如何使用ffmpeg在特定时间在静音音频文件上添加多个音频文件?

时间:2020-02-02 15:12:19

标签: ffmpeg

我需要在特定时间将音频文件覆盖在现有的silence.mp3上。像这样的东西:

[----[...audio1...]----------[...audio2...]---------------]

我尝试了以下操作,但不起作用:

ffmpeg -y -i silence.mp3 -itsoffset 4 -i audio1.mp3 -itsoffset 30 -i audio2.mp3 -c:a copy final.mp3

将寻求任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

有几种方法。

阿德莱,混音

使用adelayamix过滤器:

ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex "[0]adelay=4s:all=1[0a];[1]adelay=30s:all=1[1a];[0a][1a]amix=inputs=2[a]" -map "[a]" output.mp3

请注意,混音滤波器会减小输出的音量,以防止削波。如果需要,可以使用dynaudnorm或体积过滤器进行跟踪。

adelay,concat过滤器

或者adelay和concat过滤器。假设audio1.mp4的时长为10秒,并且两个输入的采样率和通道布局相同:

ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex "[0]adelay=4s:all=1[0a];[1]adelay=16s:all=1[1a];[0a][1a]concat=n=2:v=0:a=1[a]" -map "[a]" output.mp3

anullsrc,concat多路分配器

或使用anullsrc filter生成静默文件作为分隔符:

ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 4 4.mp3
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 16 16.mp3

创建input.txt:

file '4.mp3'
file 'audio1.mp3'
file '16.mp3'
file 'audio2.mp3'

然后使用concat demuxer

ffmpeg -f concat -i input.txt -c copy output.mp3