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

Ben*_*kes 24 audio ubuntu mp3 ffmpeg sox

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

我发现了一些其它问题,有关裁剪至前30秒裁剪到X和X + N秒使用ffmpeg.我想我可以使用类似的方法,只要我有办法找到沉默开始的时候.我将如何以编程方式执行此操作?

例如,一种可能的解决方案是使用命令找到"沉默"的开始.我期待这样的序列

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

该解决方案并没有必须使用ffmpeg,但它确实需要可在Ubuntu上.

Jam*_*mes 38

sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse
Run Code Online (Sandbox Code Playgroud)

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

sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse
Run Code Online (Sandbox Code Playgroud)

这里可以找到详细soxsilence工作原理.


Ano*_*sse 9

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

我相信mp3splt正是你要找的.它可以在命令行和GUI中使用.

sudo aptitude install mp3splt mp3splt-gtk
Run Code Online (Sandbox Code Playgroud)

应该在Debian和Ubuntu上运行.

从手册页:

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


bla*_*lah 6

看看silencedetectFFmpeg音频滤镜:

检测音频流中的静音.

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

打印时间和持续时间以秒表示.

它有一些参数可以调整静音的安静程度,以及需要记录多长时间的静音.

  • 这里记录了`silenceremove`过滤器https://ffmpeg.org/ffmpeg-filters.html#toc-silenceremove这个答案可能也很有用:http://stackoverflow.com/a/29411973/1717535 (3认同)