如何使用 ffmpeg 重叠和合并多个音频文件?

How to overlap and merge multiple audio files using ffmpeg?

我正在尝试将多个音频文件合并到一个文件中,但我可以使用以下命令而不是串联:

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex [0:0]concat=n=3:v=0:a=1[out] -map [out] output.wav

尽管此命令可以很好地连接,但我想重叠,比如第一个文件结尾的最后 100 毫秒和下一个文件开头的 100 毫秒。

我现在正在尝试使用 ffmpeg 提供的 'acrossfade' 过滤器,但我没有成功。

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex [0:a]acrossfade=d=0.100:c1=exp:c2=exp,[1:a]acrossfade=d=0.100:c1=exp:c2=exp,[2:a]acrossfade=d=0.100:c1=exp:c2=exp

这是我到现在为止想出的,但没有用,因为它抛出“Buffer is too short (n=0) for frame_length=1 ' 错误。

文档不是很有用,有人知道可以做什么吗?

提前致谢!

crossfade 旨在创建 两个 输入之间的过渡。因此,每对输入都必须应用淡入淡出,结果用作下一个淡入淡出的输入。

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex "[0:a][1:a]acrossfade=d=0.100:c1=exp:c2=exp[a01];[a01][2:a]acrossfade=d=0.100:c1=exp:c2=exp" out.wav

编辑:您的输入是 16000 Hz,交叉淡化持续时间是 0.1s (!),在输入采样率下小于 2 个音频帧。默认帧大小为 1024 个样本。因此,需要降低帧大小。

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex "[0:a]asetnsamples=256[0a];[1:a]asetnsamples=256[1a];[2:a]asetnsamples=256[2a];[0a][1a]acrossfade=d=0.100:c1=exp:c2=exp[a01];[a01][2a]acrossfade=d=0.100:c1=exp:c2=exp" out.wav