29

我有 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

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

4

3 回答 3

44
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

于 2012-08-06T19:30:38.173 回答
12

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

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

sudo aptitude install mp3splt mp3splt-gtk

应该适用于 Debian 和 Ubuntu。

从手册页:

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

于 2013-12-30T10:06:35.553 回答
8

看看silencedetectFFmpeg 音频过滤器

检测音频流中的静音。

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

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

它具有参数来调整必须将某些东西视为静音的程度,以及需要注意静音的时间。

于 2012-08-06T19:28:46.460 回答