使用FFmpeg,我试图将许多音频文件组合成一个长文件,并且每个文件之间使用淡入淡出效果。为了使数字保持简单,假设我有10个输入文件,每个5分钟,并且我希望每个之间10秒钟的淡入淡出。(结果持续时间为48:30。)假定所有输入文件都具有相同的编解码器/比特率。
发现对两个文件进行淡入淡出是如此简单,这让我感到意外地惊喜:
ffmpeg -i 0.mp3 -i 1.mp3 -vn -filter_complex acrossfade=d=10:c1=tri:c2=tri out.mp3
但是acrossfade
过滤器不允许3个以上的输入。所以我幼稚的解决方案是重复运行ffmpeg
,使上一个中间输出与下一个输入文件交叉渐变。这不是理想的。这使我想到两个问题:
1.是否acrossfade
无损复制流?(当然,除了主动交叉淡化的地方。)还是整个输入流都被重新编码?
如果输入流被完全重新编码,那么我的幼稚方法是非常糟糕的。在上面的示例中(调用acrossfade
9次),第一个文件的前4:50将被重新编码9次!如果我要合并50个文件,则第一个文件将被重新编码49次!
2.为避免多次运行和重新编码问题,我能否在单个ffmpeg
调用中实现多次交叉淡入淡出的行为?
我想我需要一些长的滤镜,但是我还没有弄清楚。没有人有一个仅对3个输入文件进行淡入淡出的示例吗?由此,我可以自动为更长的链过滤图。
感谢您的提示!
过滤器对原始样本数据进行处理,并将其输出。解码发生在数据发送到过滤器之前,而编码发生在所有过滤完成之后。因此,如果过滤器未修改数据的一部分,则该部分将保持不变。
在您的命令中,您正在输出到MP3,因此这确实会强制重新编码。您可以通过输出到WAV来避免这种情况,
ffmpeg -i 0.mp3 -i 1.mp3 -vn -filter_complex acrossfade=d=10:c1=tri:c2=tri out.wav
您可以在最终的crossfade命令中输出到MP3。
您也可以在一个呼叫中执行所有交叉渐变。
以4个文件为例,
ffmpeg -i 0.mp3 -i 1.mp3 -i 2.mp3 -i 3.mp3 -vn
-filter_complex "[0][1]acrossfade=d=10:c1=tri:c2=tri[a01];
[a01][2]acrossfade=d=10:c1=tri:c2=tri[a02];
[a02][3]acrossfade=d=10:c1=tri:c2=tri"
out.mp3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句