我想将2个音频文件混合在一起 - 一个文件长度为2分钟,另一个文件长度为10秒。我希望两个文件混合,这样两种声音仍然可以听到。我希望这个10秒的剪辑准确地在30秒内进入10秒,所以它将以40秒结束。
我知道如何使用ffmpeg将两个音频文件混合在一起
ffmpeg -i input.mp3 -i input2.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 output.mp3
但是,我不知道如何在特定时间开始这10秒的声音。
答案 0 :(得分:9)
自发布以来我找到了解决这个问题的方法 - 我想分享给其他人使用,因为我花了很多时间来寻找这个。
创建一个比最长剪辑长的空白音频文件。
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>
答案 1 :(得分:0)
我的音频采样率为 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