![如何使用 sox 或 ffmpeg 检测长音频文件中的静音间隔并将其替换为零(又名抑制背景噪音)?](https://linux22.com/image/5940/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sox%20%E6%88%96%20ffmpeg%20%E6%A3%80%E6%B5%8B%E9%95%BF%E9%9F%B3%E9%A2%91%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E9%9D%99%E9%9F%B3%E9%97%B4%E9%9A%94%E5%B9%B6%E5%B0%86%E5%85%B6%E6%9B%BF%E6%8D%A2%E4%B8%BA%E9%9B%B6%EF%BC%88%E5%8F%88%E5%90%8D%E6%8A%91%E5%88%B6%E8%83%8C%E6%99%AF%E5%99%AA%E9%9F%B3%EF%BC%89%EF%BC%9F.png)
我有一个长音频文件,是通过连接许多短文件创建的。我想检测语音片段之间的静音(仅阈值就足以满足我的目的)并用绝对零替换它们,这样就没有背景“噪音”。保留录音的长度对我来说很重要。
我知道 sox 可以检测文件开头和结尾的静音,我可以使用silence
、reverse
等pad
来删除样本并填充零。有没有办法在文件中的任何地方都执行此操作,而不仅仅是开始+结束?
UPD:这可能是一个非常复杂的方法来询问是否有用于 Linux 的语音活动检测工具
答案1
使用 soxsilence
选项:
sox [input] [output] silence 1 1 2% -1 0.5 2%
会将文件中前面的静音时间减少到 1 秒,并将间隙减少到半秒。在我的例子中,2% 忽略了本底噪声。 0% 可能适合你。
-1
告诉 sox 处理每个实例。