在 MP3 结尾添加静音

在 MP3 结尾添加静音

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

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

我用谷歌搜索了这个问题,我能做的最好的就是pad使用索克斯,但是它不适用于 MP3。

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

答案1

pad您可以使用 SoX 的参数和以下语法轻松完成此操作:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

例子:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

这些静音以秒为单位。(使用不同的语法也可以实现其他用法,以便在特定位置插入这些静音。有关详细信息,请参阅 SoX 文档。)

答案2

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

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

您可以通过更改您想要的任何时间(以秒为单位)来控制静音的长度-t 10。当然,您只需生成一次静音,然后您就可以保留该文件并使用它来填充您想要的每个文件。您可能还想查找连接解复用器- 它对处理器的要求稍微高一些,但您可能会发现将其放入 shell 脚本中更容易。

如果您想用单个命令完成此操作,则可以使用 concat 过滤器 - 这将要求您重新编码音频(因为过滤器图与 不兼容-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

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

相关内容