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

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

我有一个 AC3 5.1 音频文件,我想在开头插入 x 秒的静音音频。这与视频多路复用无关,因此 itsoffset 毫无用处,因为它似乎只适用于伴随视频流的音频流。我想用 ffmpeg 实现这一点。有什么想法吗?

答案1

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

使用连接解复用器如果您想避免重新编码主要片段。此方法可用于在开头或结尾(或两者)添加静音。

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

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

    file 'silent.ac3'
    file 'main.ac3'
    

    如果您希望最后保持沉默,只需切换文件的顺序即可input.txt

  3. 现在您可以使用以下方式连接文件连接解复用器

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

使用 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
  • 过滤将导致重新编码,而连接解复用器则不会。

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

  • 如果您要在末尾添加静音,则只需切换给予 concat 过滤器的输入的顺序:[1:a][0:a]concat=n=2:v=0:a=1


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

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

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

ffmpeg -i input.flac -af "adelay=1s:all=true" output.opus

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

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • 过滤将导致重新编码,而连接解复用器则不会。

使用 apad 过滤器(在末尾添加静音)

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

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

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • 过滤将导致重新编码,而连接解复用器则不会。

  • 如果出现错误,Option 'pad_dur' not found则说明您的ffmpeg版本太旧。请使用版本 ≥4.2。

相关内容