![使用 concat 解复用器(在开头和/或结尾添加静音)](https://linux22.com/image/1358686/%E4%BD%BF%E7%94%A8%20concat%20%E8%A7%A3%E5%A4%8D%E7%94%A8%E5%99%A8%EF%BC%88%E5%9C%A8%E5%BC%80%E5%A4%B4%E5%92%8C%2F%E6%88%96%E7%BB%93%E5%B0%BE%E6%B7%BB%E5%8A%A0%E9%9D%99%E9%9F%B3%EF%BC%89.png)
我有一个 AC3 5.1 音频文件,我想在开头插入 x 秒的静音音频。这与视频多路复用无关,因此 itsoffset 毫无用处,因为它似乎只适用于伴随视频流的音频流。我想用 ffmpeg 实现这一点。有什么想法吗?
答案1
使用 concat 解复用器(在开头和/或结尾添加静音)
使用连接解复用器如果您想避免重新编码主要片段。此方法可用于在开头或结尾(或两者)添加静音。
使用anullsrc音频源过滤器来创建静音音频。您需要匹配主音频文件的格式、通道布局和采样率。例如,制作 5.1 通道、48000 Hz 采样率、1 秒静音 AC3 音频文件(因为这是问题中的格式):
ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
现在创建一个名为的文本文件
input.txt
,列出要连接的文件:file 'silent.ac3' file 'main.ac3'
如果您希望最后保持沉默,只需切换文件的顺序即可
input.txt
。现在您可以使用以下方式连接文件连接解复用器:
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。