通过 FFmpeg 为音频添加 1 秒静音

Mak*_*i84 24 ffmpeg

我有一个 AC3 5.1 音频文件,我想在开头插入 x 秒的静音音频。这与视频复用无关,因此它的偏移是无用的,因为它似乎只适用于伴随视频的音频流。我想用 ffmpeg 来实现这一点。有任何想法吗?

llo*_*gan 39

使用 concat demuxer(在开头和/或结尾添加静音)

如果您想避免重新编码主段,请使用concat demuxer。此方法适用于在开头或结尾(或两者)添加静音。

  1. 使用anullsrc音频源过滤器来创建无声音频。您需要匹配主音频文件的格式、通道布局和采样率。制作 5.1 声道、48000 Hz 采样率、1 秒无声 AC3 音频文件的示例(因为这是问题中的格式):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在创建一个名为的文本文件input.txt,列出要连接的文件:

    file 'silent.ac3'
    file 'main.ac3'
    
    Run Code Online (Sandbox Code Playgroud)

    如果你想要最后的静音,只需切换input.txt.

  3. 现在您可以使用concat demuxer连接文件:

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    
    Run Code Online (Sandbox Code Playgroud)

使用 concat 过滤器(在开头和/或结尾添加静音)

如果您想在一个命令中完成所有操作,或者您想以与输入不同的格式输出(因为此方法无论如何都要重新编码),请使用concat 过滤器。此方法适用于在开头或结尾或两者中添加静音。

在立体声的开头添加 1 秒静音的示例,44100 Hz 采样率输入:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
Run Code Online (Sandbox Code Playgroud)
  • 过滤将导致重新编码,而 concat 解复用器则不会。

  • anullsrc 中,建议匹配输入的通道布局和采样率。

  • 如果你想沉默添加到末尾,而不只是切换的给予CONCAT滤波器的输入顺序:[1:a][0:a]concat=n=2:v=0:a=1


使用延迟过滤器(在开头添加静音)

如果您想在一个命令中完成所有操作,或者如果您想以与输入不同的格式输出(因为此方法无论如何都会重新编码),请使用adelay音频过滤器。这仅适用于在文件开头添加静音。

此示例将在立体声输入的开头添加 1 秒的静音:

ffmpeg -i input.flac -af "adelay=1s:all=true" output.opus
Run Code Online (Sandbox Code Playgroud)

如果您ffmpeg是旧的(版本 4.2),您将需要声明毫秒而不是秒,并为每个通道提供延迟:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
Run Code Online (Sandbox Code Playgroud)
  • 过滤将导致重新编码,而 concat 解复用器则不会。

使用 apad 过滤器(在最后添加静音)

如果您想在一个命令中完成所有操作,或者您想以与输入不同的格式输出(因为此方法无论如何都会重新编码),请使用apad音频过滤器。这仅适用于在文件末尾添加静音。

此示例将在结尾添加 1 秒的静音:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
Run Code Online (Sandbox Code Playgroud)
  • 过滤将导致重新编码,而 concat 解复用器则不会。

  • 如果你得到一个错误,Option 'pad_dur' not found那么你ffmpeg就太老了。使用版本 ?4.2。

  • `[Parsed_aevalsrc_0 @ 000000000195fec0] 此语法已弃用。使用“|” 分隔列表项。` 新语法是`-i "aevalsrc=0|0|0|0|0|0:d=1"` (5认同)