我正在尝试将多个音频文件合并到一个文件中,而不是使用以下命令将其合并:
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)”而无法正常工作。
文档不是很有帮助,有人知道该怎么做吗?
谢谢!
答案 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