Я пытаюсь создать поток mpeg-ts, где видео - это скриншот из Xvfb, а аудио - из интернет-радио (mp3 или aac stream). Он работает достаточно хорошо, но если есть проблема с интернет-радио, то весь вывод останавливается, а не только звук, и не возобновляется, пока я не убью ffmpeg и не начну его снова.

Вот командная строка, которую я использую

DISPLAY=:1 ffmpeg -re -video_size 768x576 -framerate 50 -f x11grab -i :1 -i http://internet-radio/mp3 -c:v mpeg2video -b:v 6000k -minrate 6000k -maxrate 6000k -bufsize 3000k -dc 10 -top 0 -f mpegts -c:a mp2 -ac 2 -b:a 192k -flags +ilme+ildct -vf "tinterlace=interleave_top" udp://192.168.0.1:1234?pkt_size=1316

Есть ли способ либо предотвратить его остановку (просто произвести молчание, пока не вернется аудиовход), либо, по крайней мере, обнаружить, что он вышел из строя, чтобы я мог написать скрипт для его перезапуска?

1 ответ1

0

Попробуйте использовать аудио фильтр apad, чтобы расширить поток с неопределенным молчанием. Вы должны иметь возможность добавить команду -af к существующей строке ...

-vf "[0]tinterlace=interleave_top" -af "[1]apad"

... или измените существующую строку -vf на -filter_complex для обработки команд фильтрации аудио и видео ...

-filter_complex "[0]tinterlace=interleave_top;[1]apad"

Обратите внимание, что спецификаторы входного потока («[0]» для x11grab и «[1]» для аудиопотока) должны быть необязательными, но некоторые более старые версии FFmpeg могут запутаться, если они не указаны.

Если ни одна из настроек фильтра не работает как есть, вам может потребоваться добавить флаг -shortest в ваши общие выходные параметры (обратите внимание, что это не часть строки фильтра), например:

-filter_complex "[0]tinterlace=interleave_top;[1]apad" -shortest

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