ffmpeg останавливает потоковую передачу, если останавливается один из входов

ffmpeg останавливает потоковую передачу, если останавливается один из входов

Я пытаюсь создать поток mpeg-ts, где видео — это скриншот из Xvfb, а аудио — из интернет-радио (поток mp3 или aac). Работает достаточно хорошо, но если возникают проблемы с интернет-радио, то останавливается весь вывод, а не только аудио, и не возобновляется, пока я не убью 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

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

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

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

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

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

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

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

Связанный контент