我有一个AC3 5.1音频文件,我想在其中插入x秒的无声音频。这与视频混合无关,因此它的偏移量是无用的,因为它似乎仅与伴随视频的音频流一起工作。我想用ffmpeg实现。有任何想法吗?
我有一个AC3 5.1音频文件,我想在其中插入x秒的无声音频。这与视频混合无关,因此它的偏移量是无用的,因为它似乎仅与伴随视频的音频流一起工作。我想用ffmpeg实现。有任何想法吗?
Answers:
如果要避免对主段进行重新编码,请使用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
。
现在,您可以使用concat demuxer连接文件:
ffmpeg -f concat -i input.txt -codec copy output.ac3
如果要在一个命令中执行所有操作,或者要输出为与输入不同的格式,请使用concat过滤器(因为此方法仍然会重新编码)。此方法可为开始或结束或两者同时添加静音。
在立体声44100 Hz采样率输入的开头增加1秒的静音的示例:
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
过滤将导致重新编码,而concat多路分配器则不会。
在anullsrc中,建议匹配通道布局和输入的采样率。
如果要在最后添加静音,则只需切换指定给concat过滤器的输入顺序即可[1:a][0:a]concat=n=2:v=0:a=1
。
如果要在一个命令中执行所有操作,或者要输出为与输入不同的格式,请使用adelay音频过滤器(因为此方法始终会重新编码)。这仅适用于在文件开头添加静音。
此示例将为立体声输入的开头增加1秒的静音:
ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
1s
一秒钟。adelay=1000
,而使用5.1输入adelay=1000|1000|1000|1000|1000|1000
。如果要在一个命令中执行所有操作,或者要输出为与输入不同的格式,请使用apad音频过滤器(因为此方法始终会重新编码)。这仅可在文件末尾添加静音。
此示例将在末尾添加1秒的静音:
ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
过滤将导致重新编码,而concat多路分配器则不会。
该pad_dur
选项是在FFmpeg 4.1发行后添加的,因此您将需要使用git master分支中的最新版本或等待FFmpeg 4.2。
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.
新语法是-i "aevalsrc=0|0|0|0|0|0:d=1"