答案1
有几种方法可以做到这一点。
apad + concat 过滤器
使用阿帕德用静音音频扩展 audio1,然后连接过滤器将其与 audio2 连接起来:
ffmpeg -i video -i audio1 -i audio2 -filter_complex "[1:a]apad=pad_dur=360[a1];[a1][2:a]concat=n=2:v=0:a=1[a]" -map 0:v -map "[a]" -c:v copy output.mp4
anullsrc + concat 解复用器
这可以让你避免重新编码任何内容,但它稍微复杂一些,因为它需要几个步骤。请注意,所有输入必须具有相同的格式、通道布局和采样率。
默哀 8 分钟anullsrc:
ffmpeg -f lafvi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 00:08:00 silence.m4a
包含
input.txt
以下内容:file 'audio1.m4a' file 'silence.m4a' file 'audio2.m4a'
与连接解复用器:
ffmpeg -i video.mp4 -f concat -i input.txt -map 0:v -map 1:a -c copy output.mp4
adelay + amix
您可以使用延迟为音频 2 添加延迟,然后将音频 1 和音频 2 混合为混合物:
ffmpeg -i video -i audio1 -i audio2 -filter_complex "[2:a]adelay=480s:all=1[a2];[1:a][a2]amix[a]" -map 0:v -map "[a]" -c:v copy output.mp4
您需要至少 FFmpeg 4.2 才能使用此较新的 adelay 语法。否则,您必须声明延迟(以毫秒为单位),并为每个单独的通道(每个通道以 分隔
|
)声明延迟。请注意,输出将受到音频音量标准化的影响。这意味着它将比其各个片段更安静。请参阅不同持续时间的输入导致的 amix 过滤器音量问题以获得各种解决方案。
获取持续时间
您可以使用ffprobe
获得持续时间每个输入都特别有助于脚本使用。