繁体   English   中英

ffmpeg 在特定时间混合音频

[英]ffmpeg mix audio at specific time

我想将 2 个音频文件混合在一起 - 一个文件的长度为 2 分钟,另一个为 10 秒的声音。 我希望两个文件混合在一起,这样仍然可以听到两种声音。 我希望这个 10 秒剪辑在 10 秒内恰好在 30 秒出现,因此它将在 40 秒结束。

我知道如何使用 ffmpeg 将 2 个音频文件混合在一起

ffmpeg -i input.mp3 -i input2.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 output.mp3

但是,我不知道如何在特定时间启动这 10 秒的声音。

自从发布这篇文章以来,我找到了解决这个问题的方法——我想分享给其他人使用,因为我花了很多时间寻找这个。

创建一个比最长剪辑长的空白音频文件。

ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t <seconds> -q:a 9 -acodec libmp3lame <blank audio>

从这里开始,您需要将 10 秒的剪辑添加到空白音频文件中。

ffmpeg -i <blank audio> -i < audio file 2> -filter_complex "aevalsrc=0:d= <time> [s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map 0:v -map [aout] <output file>

从这里开始,您将这个现在最长的剪辑叠加到原来的更长的剪辑上

ffmpeg -i <output from silent and short clip> -i <original long clip> -filter_complex "amix=inputs=2:duration=longest:dropout_transition=0, volume=2" <output audio file>

我的音频采样率为 8000。我使用以下命令在特定时间插入 3 个音频文件,没有合成音频。 请注意,以秒为单位的延迟必须是整数。 对于精确位置,您可以使用“S”(样本)而不是“s”(秒)来定义延迟。

ffmpeg -y -i earth.mp4 -i 1.wav -i 2.wav -i 3.wav -filter_complex "[1]adelay=delays=5s:all=1[r1]; [2]adelay=delays=8000S:all=1[r2]; [3]adelay=delays=15s:all=1[r3]; [r1][r2][r3]amix=inputs=3[a]"  -map 0:v -map "[a]" -codec:v copy output.mp4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM