如果一个输入停止,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

相关内容