ffmpeg
-i "1.mp4"
-i "加热三分钟 不要盖锅盖.wav"
-i "可以出锅了 大家来品尝.wav"
-i "首先添加小蒜 小火两分钟.wav"
-filter_complex "[1:a]adelay=0|0[a1]; [2:a]adelay=5000|5000[a2]; [3:a]adelay=15000|15000[a3]; [a1][a2][a3]amix=inputs=3:duration=longest[aout]"
-vf "subtitles=subtitles.srt"
-map 0:v -map "[aout]"
-c:v libx264 -c:a aac -strict experimental -y "ok.mp4"
ffmpeg
-i "1.mp4"
-i "加热三分钟 不要盖锅盖.wav"
-i "可以出锅了 大家来品尝.wav"
-i "首先添加小蒜 小火两分钟.wav"
-filter_complex "[0:a]adelay=0|0[a0]; [1:a]adelay=0|0[a1]; [2:a]adelay=5000|5000[a2]; [3:a]adelay=15000|15000[a3]; [a0][a1][a2][a3]amix=inputs=4:duration=longest[aout]"
-vf "subtitles=subtitles.srt"
-map 0:v -map "[aout]"
-c:v libx264 -c:a aac
-y "ok.mp4"
两个命令的核心区别在于是否保留视频原声音频,具体差异如下:
1. 音频处理逻辑不同
第一个命令:只处理了 3 个外部 WAV 音频([1:a]、[2:a]、[3:a]),通过adelay设置延迟后,用amix=inputs=3混合这 3 个音频,最终输出的音频[aout]不包含原视频(1.mp4)的声音。
第二个命令:新增了对视频原声音频([0:a])的处理,通过[0:a]adelay=0|0[a0]保留原声音频(延迟 0 毫秒,即不改变时间),然后用amix=inputs=4将原声音频[a0]与 3 个外部 WAV 音频一起混合,最终输出的音频[aout]包含原视频的声音 + 3 个外部音频。
2. 混音输入数量不同
第一个命令的amix=inputs=3:表示混合 3 个音频(仅 3 个 WAV 文件)。
第二个命令的amix=inputs=4:表示混合 4 个音频(原视频音频 + 3 个 WAV 文件)。
3. 输出效果不同
第一个命令生成的ok.mp4:视频画面保留,但声音只有 3 个 WAV 文件的内容(原视频声音被丢弃)。
第二个命令生成的ok.mp4:视频画面保留,声音是原视频声音与 3 个 WAV 文件的混合(原声音频被保留并参与混音)。
此外,第一个命令中包含-strict experimental参数(早期 FFmpeg 对 AAC 编码的兼容选项),第二个命令去掉了该参数(现代 FFmpeg 已无需此参数,AAC 编码默认支持)。