我需要在特定时间将音频文件覆盖在现有的silence.mp3上。像这样的东西:
[----[...audio1...]----------[...audio2...]---------------]
我尝试了以下操作,但不起作用:
ffmpeg -y -i silence.mp3 -itsoffset 4 -i audio1.mp3 -itsoffset 30 -i audio2.mp3 -c:a copy final.mp3
将寻求任何帮助。谢谢。
答案 0 :(得分:0)
有几种方法。
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过滤器。假设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 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