混合来自各种来源的音频,无论输入视频是否有声

Mix audio from various sources, regardless if an input video has sound or not

以下代码:

ffmpeg -i test.png            
       -t 2 -i a.mp3          
       -t 4 -i video.mp4      
       -t 1 -i b.mp3          
       -filter_complex [1]adelay=2000|2000[s1];[3]adelay=5000|5000[s3];[s1][2][s3]amix=inputs=3[outa];[0][2]overlay[outv]^
       -map [outa] -map [outv]^
       out.mp4 -y

有效,并混合来自 MP3 的音频(根据需要进行时移)和来自 MP4 视频的音频。

但如果MP4没有音频通道(=无声视频)则失败:

Stream specifier '' in filtergraph description ... matches no stream

无论视频是否有音频,我都希望我的脚本在这两种情况下都能正常工作。

当且仅当此视频有声音时,如何将 [2] 包含在 amix 中?


注意:加载 MP4 的一个好方法是 总是 声音流:如果视频有声音则为原始声音流,以及无声音轨如果 MP4 没有声音。 ffmpeg?

中的单个命令是否可以做到这一点

没有这样的内置功能。您必须使用 ffprobe 检查文件以查看它是否有音频,然后使用 运行 适当的命令。如果您有最喜欢的脚本语言,您可以使用 if 语句.

自动执行此操作

参见