0

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

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 ' 错误。

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

提前致谢!

4

1 回答 1

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.1 秒(!),在输入采样率下少于 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

于 2019-03-11T08:14:43.857 回答