ffmpegは1つの入力が停止するとストリーミングを停止します

ffmpegは1つの入力が停止するとストリーミングを停止します

ビデオが Xvfb からのスクリーン キャプチャで、オーディオがインターネット ラジオ (mp3 または aac ストリーム) からの mpeg-ts ストリームを作成しようとしています。これはかなりうまく機能しますが、インターネット ラジオに問題がある場合は、オーディオだけでなく出力全体が停止し、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"

...または既存のものを変更する-vf文字列を-フィルター複合オーディオとビデオの両方のフィルタリング コマンドを処理するには...

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

入力ストリーム指定子(x11grabの場合は「[0]」、オーディオストリームの場合は「[1]」)に注意してください。すべきであるオプションですが、FFmpeg の古いバージョンでは、指定しないと混乱する可能性があります。

どちらのフィルタ設定もそのままでは機能しない場合は、-最短一般的な出力パラメータにもフラグを追加します (フィルター文字列の一部としてではなく)。例:

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

関連情報