如果一個輸入停止,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

嘗試使用阿帕德音訊過濾器以無限期的靜音來擴展串流。您應該能夠添加-af命令到您現有的字串...

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

……或改變你現有的-vf字串到-filter_complex處理音訊和視訊過濾命令...

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

請注意輸入流程說明符(x11grab 為“[0]”,音訊串流為“[1]”)應該可選,但如果未指定,某些舊版本的 FFmpeg 可能會造成混亂。

如果兩個過濾器設定都按原樣工作,您可能需要添加-最短也標記到您的一般輸出參數(請注意,不是作為過濾器字串的一部分),例如:

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

相關內容