如何以编程方式从MP3中删除静音?

时间:2012-08-06 19:05:34

标签: ubuntu audio ffmpeg mp3 sox

我有MP3文件,有时最后会沉默。我想自动删除这个沉默。从我所知,它是“完美的”沉默(0幅度),而不是背景噪音。内容的长度和沉默各不相同。

我使用ffmpeg找到了关于cropping to the first 30 secondscropping to X and X+N seconds的其他一些问题。我想我可以使用类似的方法,只要我有办法找到沉默开始的时候。我将如何以编程方式执行此操作?

例如,一种可能的解决方案是找到一个命令,找到“沉默”的开始。我期待这样的序列

end=$(ffmpeg some-command-to-find-start-of-silence)
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3

解决方案必须使用ffmpeg,但它确实需要在Ubuntu上可用。

3 个答案:

答案 0 :(得分:37)

sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse

这样可以减少文件中超过0.1秒的静音。如果您只关心修剪结束,可以简化为:

sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse

详细了解sox silence的工作原理here

答案 1 :(得分:9)

您可能正在寻找无损解决方案,即不需要重新编码(降低质量)的解决方案。

我相信mp3splt正是您所寻找的。它可以在命令行和GUI中使用。

sudo aptitude install mp3splt mp3splt-gtk

应该适用于Debian和Ubuntu。

从手册页:

  

您还可以尝试使用静音检测自动分割文件(请参阅-s选项),使用静音检测修剪文件(请参阅-r选项)或固定时间长度(请参阅-t选项)

答案 2 :(得分:6)

查看silencedetect FFmpeg audio filter

  

检测音频流中的静音。

     

此过滤器在检测到输入音量小于或等于噪声容限值且持续时间大于或等于最小检测到的噪声持续时间时记录消息。

     

打印时间和持续时间以秒为单位。

它有参数来调整某些东西必须被认为是沉默,以及需要注意多长时间的沉默。