Я не знаком с расширением .ts
, но предполагая, что это какой-то тип видеофайла, вы можете использовать ffmpeg
для определения длительности файла следующим образом:
$ ffmpeg -i some.mp4 2>&1 | grep Dura
Duration: 00:23:17.01, start: 0.000000, bitrate: 504 kb/s
Затем мы можем разделить этот вывод, выбрав только длительность.
$ ffmpeg -i some.mp4 2>&1 | grep -oP "(?<=Duration: ).*(?=, start.*)"
00:23:17.01
Так что теперь нам нужен только способ итерации по нашим файлам и сбора этих значений продолжительности.
$ for i in *.mp4; do
ffmpeg -i "$i" 2>&1 | grep -oP "(?<=Duration: ).*(?=, start.*)"; done
00:23:17.01
00:23:17.01
00:23:17.01
ПРИМЕЧАНИЕ: В данном примере я просто скопировал свой файл-пример some.mp4
и назвал его 1.mp4
, 2.mp4
, и 3.mp4
.
Следующий фрагмент возьмет длительность сверху и преобразует ее в секунды.
$ for i in *.mp4; do
dur=$(ffmpeg -i "$i" 2>&1 | grep -oP "(?<=Duration: ).*(?=, start.*)");
date -ud "1970/01/01 $dur" +%s; done
1397
1397
1397
Это берёт наши длительности и помещает их в переменную, $dur
, по мере того, как мы перебираем файлы. Команда date
затем используется для вычисления количества секунд синусоидальной эпохи Unix (1970/01/01). Вот вышеприведенная команда date
разбита так, чтобы было проще увидеть:
$ date -ud "1970/01/01 00:23:17.01" +%s
1397
NOTE: Использование date
таким образом будет работать только в том случае, если все ваши файлы имеют продолжительность < 24 часа (т.е. 86400 секунд). Если вам нужно что-то, что может обработать большую длительность, вы можете использовать это в качестве альтернативы:
sed 's/^/((/; s/:/)*60+/g' | bc
Пример
$ echo 44:29:36.01 | sed 's/^/((/; s/:/)*60+/g' | bc
160176.01
Затем мы можем взять вывод нашего цикла для
и выполнить его в команде paste
, которая будет включать знаки +
между каждым номером, например, таким образом:
$ for i in *.mp4; do
dur=$(ffmpeg -i "$i" 2>&1 | grep -oP "(?<=Duration: ).*(?=, start.*)");
date -ud "1970/01/01 $dur" +%s; done | paste -s -d+
1397+1397+1397
Наконец, мы запускаем эту команду в калькулятор командной строки, bc
, чтобы просуммировать их:
$ for i in *.mp4; do
dur=$(ffmpeg -i "$i" 2>&1 | grep -oP "(?<=Duration: ).*(?=, start.*)");
date -ud "1970/01/01 $dur" +%s; done | paste -s -d+ | bc
4191
В результате получим общую длительность всех файлов, в секундах. Разумеется, при необходимости это можно преобразовать в какой-нибудь другой формат.
Если скорость соотношения и бода неверна, консоль просто не будет работать, и она очень вряд ли будет отображать что-либо вообще.
Если это что-то отображается, скорость четности и бода должно быть в порядке.
Как правило, консоли Cisco требуют следующих настроек:
9600 baud, 8 data bits, no parity, and 1 stop bit.
Это документ, который научил меня большинству из того, что я знаю об этом, и это очень ориентирован на ядр:
user usb-последовательная документация
Установите скорость передачи данных, биты данных, четность и стоп-сигнал
stty -F /dev/ttyACM0 cs8 9600 -parenb -cstopb
Теперь вы, какую программу вы используете в качестве серийной консоли?
Попробуйте подключиться к тому, что вы используете.
Я буду смотреть, если есть какие-то конкретные проблемы с этим ядром, поскольку Ubuntu включает в себя пакеты без FOSS .... Я дам вам знать мои выводы.