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

时间:2019-03-11 07:28:06

标签: linux audio ffmpeg cross-fade

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

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

尽管此命令可以很好地进行串联,但是我想重叠一下,例如第一个文件末尾的最后100ms和下一个文件开始的100ms。

我现在正在尝试使用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

这是我到目前为止提出的内容,但是由于抛出“ 对于frame_length = 1的缓冲区太短(n = 0)”而无法正常工作。

文档不是很有帮助,有人知道该怎么做吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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