如何以编程方式从 MP3 中删除静音?
Posted
技术标签:
【中文标题】如何以编程方式从 MP3 中删除静音?【英文标题】:How can I remove silence from an MP3 programmatically? 【发布时间】:2012-08-03 18:42:03 【问题描述】:我的 MP3 文件有时会在结尾处保持沉默。我想自动消除这种沉默。据我所知,这是“完美”的静音(0 振幅),而不是背景噪音。内容的长度和静音会有所不同。
我使用ffmpeg
发现了一些关于cropping to the first 30 seconds 或cropping 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 上可用。
【问题讨论】:
你真的只对完美的沉默感兴趣吗?这是非常罕见的,来自 24 位母版的抖动和有损压缩。无论如何,FFMPEG 是必经之路。 @Brad 我们基本上是在解决我们使用的录制服务中的一个错误。当问题发生时,它似乎总是给予这种“完美”的沉默。 听起来您可能对silencedetect
FFmpeg audio filter 感兴趣。
@blahdiblah 这可能就是这样做的。请你把这个评论变成答案吗?
【参考方案1】:
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% 的音量),直到我们遇到持续时间超过 0.1 秒的声音。”。【参考方案2】:您可能正在寻找一种无损解决方案,即一种不需要重新编码(这会降低质量)的解决方案。
我相信mp3splt 是您正在寻找的。它可以在命令行和 GUI 中使用。
sudo aptitude install mp3splt mp3splt-gtk
应该可以在 Debian 和 Ubuntu 上运行。
来自手册页:
您还可以尝试使用静音检测自动拆分文件(请参阅 -s 选项),使用静音检测修剪文件(请参阅 -r 选项)或固定时间长度(请参阅 -t选项)
【讨论】:
文件中间没有声音怎么办? 是的,但是拆分会产生多个文件,我需要从一个文件中删除所有静音。 之后加入他们? 刚刚在我的演讲记录中消除了死寂 - 这种沉默是由硬件问题添加的。 然后拆分文件,加入听起来完全正确,不是吗?【参考方案3】:看看silencedetect
FFmpeg audio filter:
检测音频流中的静音。
当检测到输入音频音量小于或等于噪声容限值且持续时间大于或等于检测到的最小噪声持续时间时,此过滤器会记录一条消息。
打印的时间和持续时间以秒表示。
它有一些参数来调整安静的东西必须被认为是安静的程度,以及需要注意多久的安静。
【讨论】:
silenceremove
过滤器记录在这里 ffmpeg.org/ffmpeg-filters.html#toc-silenceremove 这个答案可能也很有用:***.com/a/29411973/1717535以上是关于如何以编程方式从 MP3 中删除静音?的主要内容,如果未能解决你的问题,请参考以下文章