问题描述
我有MP3文件,有时结尾处没有声音。我想自动删除此静音。据我所知,这是”perfect”静音(0振幅),而不是背景噪声。内容的长度和静默各不相同。
我使用ffmpeg
找到了有关cropping to the first 30 seconds或cropping to X and X+N seconds的其他问题。我想我可以使用类似的方法,只要我能找到何时开始沉默。我将如何以编程方式进行操作?
例如,一种可能的解决方案是使用找到”silence”开头的命令。我希望这样的序列
end=$(ffmpeg some-command-to-find-start-of-silence)
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3
该解决方案不必使用ffmpeg
,但是它确实需要在Ubuntu上可用。
最佳回答
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
here对sox
的silence
的工作方式有详细的了解。
次佳回答
您可能正在寻找一种无损解决方案,即不需要re-encoding(这会降低质量)的解决方案。
我相信mp3splt是您想要的。可以从命令行和GUI使用它。
sudo aptitude install mp3splt mp3splt-gtk
应该可以在Debian和Ubuntu上使用。
从手册页:
You can also try to split files automatically with silence detection (see -s option), trim files using silence detection (see -r option), or by a fixed time length (see -t option)
第三种回答
看一下silencedetect
FFmpeg音频过滤器:
Detect silence in an audio stream.
This filter logs a message when it detects that the input audio volume is less or equal to a noise tolerance value for a duration greater or equal to the minimum detected noise duration.
The printed times and duration are expressed in seconds.
它具有一些参数,可以调整必须将静音视为静音的程度,以及需要注意静音的时间。