Вопрос: Использование bash для чтения вывода терминала FFmpeg


У меня есть небольшой вопрос, как читать выходной текст с терминала, сгенерированный FFmpeg при запуске. У меня есть потоковый сервер с потоком камеры, который иногда развращается и падает, когда есть проблемы с подключением к Интернету в месте расположения камеры. Этот поток проверяется while и когда соединение полностью падает, цикл пытается его перезапустить.

Но в некоторых случаях, когда происходит огромная потеря пакетов, поток развращает, но не останавливается полностью. Кодирование FFmpeg зависает, и соединение с сервером не падает. (Мой цикл «перезапуска» бесполезен). Когда это происходит, FPS видео начинает падать до более низких значений, а затем мне нужно зафиксировать это значение и выполнить необходимые действия.

Эта строка с этой информацией выглядит так:

frame=74190 fps= 20 q=0.0 size=  285208kB time=01:01:49.45 bitrate= 629.9kbits/s

Поэтому, если значение в fps= 20 падает до 18 и ниже, выполняются соответствующие действия. Что мне нужно использовать? Я пробовал grep но без каких-либо успехов.

Я буду рад за любые решения или советы для достижения каких-либо успехов.


0
2018-06-12 13:47


Источник




Ответы:


Обратите внимание, что вывод ffmpeg записывается в stderr и не stdout (что это?).

Если ты хочешь grep Выход журнала ffmpeg, вам нужно сначала перенести все из stderr в stdout, которые вы можете сделать в Bash:

ffmpeg … 2>&1 | grep …

Если вы выполняете процессы с сервера, лучше будет направлять вывод в файл журнала, а затем grep это, если вам нужно.

ffmpeg … 2>&1 > /var/log/ffmpeg.log
grep "fps=…" /var/log/ffmpeg.log

Обратите внимание, что при каждом новом вызове > /var/log/ffmpeg.log, этот конкретный файл обрезается и перезаписывается вашей оболочкой. Вы можете добавить в существующий файл, используя >> вместо.


1
2018-06-13 09:43



Для мониторинга лог-файла на лету можно использовать это решение (Я связываюсь с ответом, который кажется мне лучшим). - Kamil Maciorowski
@KamilMaciorowski Хорошее предложение, спасибо. - slhck