在 MP3 的末尾添加静音

Max*_*ams 15 audio linux mp3 mencoder ffmpeg

你们中有人知道在 Linux 中将固定持续时间的静音添加到 MP3 结尾的方法吗?例如使用 MEncoder、FFmpeg 等?

它需要是命令行,因为它将被编写脚本并在我们的服务器上运行。

我用谷歌搜索了这个,我能做的最好的事情是padSoX 中使用该功能,但这不适用于 MP3。

我可以将其转换为 WAV,使用 SoX,然后再次将其转换回 MP3,并将元数据(减去持续时间)从原始文件复制到新的 MP3。但是,在为此编写脚本之前,我想我会看看是否有一击式解决方案。

evi*_*oup 17

使用 ffmpeg,您可以使用 aevalsrc 过滤器生成静音,然后在第二个命令中使用 concat 协议无损地组合它们:

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3
Run Code Online (Sandbox Code Playgroud)

您可以通过更改-t 10为您喜欢的任何时间(以秒为单位)来控制静音的长度。当然,您只需要生成一次静音,然后您就可以保留文件并使用它来填充您想要的每个文件。您可能还想查看concat demuxer - 它稍微占用更多处理器,但您可能会发现放入 shell 脚本更容易。

如果您想在单个命令中执行此操作,您可以使用 concat 过滤器 - 这将要求您重新编码您的音频(因为 filtergraphs 与 不兼容-codec copy),因此上面的选项可能最适合您。但这对于任何使用原始 PCM 的人来说可能很有用,希望在编码音频之前在最后添加静音:

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3
Run Code Online (Sandbox Code Playgroud)

通过更改d=10为您想要的任何时间(以秒为单位)来控制静音的长度。如果您使用这种方法,您可能会发现这个FFmpeg MP3 编码指南很有用。


Fab*_*ert 10

您可以使用 SoX 的pad参数和以下语法轻松做到这一点:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>
Run Code Online (Sandbox Code Playgroud)

例子:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1
Run Code Online (Sandbox Code Playgroud)

那些沉默是在几秒钟内。(其他用法可以使用不同的语法,以便在特定位置插入这些静音。有关更多信息,请参阅 SoX 文档。)