添加沉默到MP3的末尾


12

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

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

我用Google搜索了,我能做的最好的就是padSoX中使用该功能,但这对MP3不起作用。

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


2
我认为你可以用mp3DirectCut完成这样的事情(仅限Windows,但他们说它与Wine下的Linux兼容),这避免了重新压缩声音数据。如果您要使用MP3 - > WAV - > MP3,您将重新压缩已经MP3压缩的数据流,在途中会失去很多质量。
突破

谢谢。你可以从命令行通过Wine运行Windows软件吗?如果可能的话,我宁愿避免使用Wine解决方案,因为我不愿意在我们的服务器上安装Wine。
Max Williams

嗯,你可能想要避免葡萄酒之路,如果你还没有。Wine本身是一个相当大的下载,远远超过一兆或两个简单的MP3剪切/合并工具。我确信有一个等效的Linux原生解决方案。如果我找到任何其他工具,我一定会通知您。
突破

Answers:


9

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

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

例:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

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


我应该注意我用MP3文件测试它(安装了libmad-0.dll和libmp3lame-0.dll,分别用于解码和编码MP3。)尽可能地,我建议使用无损格式并且仅转换为最后只有MP3。
Fabien Snauwaert 2014年

这真的很酷 - 谢谢Fabien!
Max Williams

这是无损的吗?
Geremia

更新:我在sox联机帮助页中读到它转换为内部格式然后重新编码...
Geremia

MP3是一种有损格式。对有损格式进行编码和重新编码将逐渐降低音频质量(无论您是否听到它。)因此,最好使用无损格式,最后只编码为有损格式一次。有关有损音频编解码器的列表:en.wikipedia.org/wiki/Lossy_compression#Audio和无损音频编解码器列表en.wikipedia.org/wiki/Lossless_compression#Audio
Fabien Snauwaert于

15

使用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你喜欢的任何时间来控制沉默的长度。当然,您只需要生成一次静音,然后您可以保留文件并使用它来填充您想要的每个文件。您可能还想查找concat demuxer - 它稍微多一点处理器,但您可能会发现更容易放入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编码指南很有用。


谢谢@evilsoup。我刚试过并得到以下内容 - max-thinkpad-linux:〜$ ffmpeg -filter_complex aevalsrc = 0 -t 4.61 silence.mp3ffmpeg version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Unrecognized option 'filter_complex' Failed to set value 'aevalsrc=0' for option 'filter_complex'
Max Williams

@max首先,你实际上是在使用libav项目中的avconv - 它们是Debian和Ubuntu使用的FFmpeg的分支,而不是主项目,它们提供了ffmpeg的残缺版本。请尝试使用avconv- 语法应该相同,只需替换ffmpegavconv
Evilsoup 2013年

如果这不起作用,请尝试升级到较新版本的ffmpeg。因为你在Ubuntu上,你应该可以使用这个PPA,或者你可以从源代码编译它的最新版本。
Evilsoup 2013年

1
@MaxWilliams或者你可以下载静态版本,你不必先编译。只需下载,解压缩,使用即可。
slhck

1
供将来参考:如果您遇到像我这样的错误,请尝试用双引号替换单引号
SZT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.