У меня есть маленький вопрос, как читать выходной текст из терминала, сгенерированный 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 но безуспешно.

Я буду рад любым решениям или советам, чтобы добиться прогресса.

1 ответ1

1

Обратите внимание, что вывод 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 этот конкретный файл усекается и перезаписывается вашей оболочкой. Вы можете добавить к существующему файлу, используя вместо этого >> .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .