ffmpeg 在特定时间混合音频

ffmpeg mix audio at specific time

我想将 2 个音频文件混合在一起 - 一个文件的长度为 2 分钟,另一个是 10 秒的声音。我希望将两个文件混合,以便仍然可以听到两种声音。我希望这个 10 秒的剪辑在这 10 秒中正好在 30 秒时出现,所以它会在 40 秒时结束。

我知道如何使用 ffmpeg 将 2 个音频文件混合在一起

ffmpeg -i input.mp3 -i input2.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 output.mp3

但是,我不知道如何在特定时间启动这10秒的声音。

自从发布这篇文章后,我找到了解决这个问题的方法 - 我想把它分享给其他人使用,因为我花了很多时间寻找这个。

创建比最长剪辑更长的空白音频文件。

ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t <seconds> -q:a 9 -acodec libmp3lame <blank audio>

从这里开始,您需要在您想要的时间将 10 秒的剪辑添加到空白音频文件中。

ffmpeg -i <blank audio> -i < audio file 2> -filter_complex "aevalsrc=0:d= <time> [s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map 0:v -map [aout] <output file>

然后从这里将这个最长的剪辑叠加到原来的较长剪辑上

ffmpeg -i <output from silent and short clip> -i <original long clip> -filter_complex "amix=inputs=2:duration=longest:dropout_transition=0, volume=2" <output audio file>

我的音频采样率为8000。我在没有合成音频的情况下使用以下命令在特定时间插入3个音频文件。请注意,以秒为单位的延迟必须是整数。对于精确位置,您可以使用 'S'(示例)而不是 's'(第二)来定义延迟。

ffmpeg -y -i earth.mp4 -i 1.wav -i 2.wav -i 3.wav -filter_complex "[1]adelay=delays=5s:all=1[r1]; [2]adelay=delays=8000S:all=1[r2]; [3]adelay=delays=15s:all=1[r3]; [r1][r2][r3]amix=inputs=3[a]"  -map 0:v -map "[a]" -codec:v copy output.mp4