apad + concat 过滤器

apad + concat 过滤器

我有一个视频(约 10 分钟)和两个音频文件(每个约 2 分钟)。我想将一个音频文件添加到视频开头,将另一个音频文件添加到视频结尾,同时保持视频中间部分静音。这可以在不重新编码(至少是视频)的情况下实现吗?如果可以,如何实现?

在此处输入图片描述

答案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 解复用器

这可以让你避免重新编码任何内容,但它稍微复杂一些,因为它需要几个步骤。请注意,所有输入必须具有相同的格式、通道布局和采样率。

  1. 默哀 8 分钟anullsrc

    ffmpeg -f lafvi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t 00:08:00 silence.m4a
    
  2. 包含input.txt以下内容:

    file 'audio1.m4a'
    file 'silence.m4a'
    file 'audio2.m4a'
    
  3. 连接解复用器

    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获得持续时间每个输入都特别有助于脚本使用。

相关内容