使用SoX检测和打印静默期的时间戳

pro*_*fan 9 audio sox

我试图在给定的音频文件中输出静音时段的开始时间戳(因为存在背景噪声,通过静音,我的意思是阈值).最后,我想在给定这些时间戳的情况下将音频文件拆分为较小的音频文件.重要的是不丢弃原始文件的任何部分.

我试过了

sox in.wav out.wav silence 1 0.5 1% 1 2.0 1% : newfile : restart
Run Code Online (Sandbox Code Playgroud)

(http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/提供)

虽然它有点完成了这项工作,但它也削减并放弃了我不想发生的沉默时期.

"沉默"是正确的选择,还是有更简单的方法来完成我需要做的事情?

谢谢.

Jef*_*son 11

不幸的是不是Sox,但ffmpeg有一个silencedetect过滤器可以完全满足您的需求:

ffmpeg -i in.wav -af silencedetect=noise=-50dB:d=1 -f null -
Run Code Online (Sandbox Code Playgroud)

(从ffmpeg文档中检测到-50db的阈值,至少1秒)

...这会打印出这样的结果:

Press [q] to stop, [?] for help
[silencedetect @ 0x7ff2ba5168a0] silence_start: 264.718
[silencedetect @ 0x7ff2ba5168a0] silence_end: 265.744 | silence_duration: 1.02612
size=N/A time=00:04:29.53 bitrate=N/A
Run Code Online (Sandbox Code Playgroud)


chi*_*rlu 5

(当前,至少)没有办法使silence效果输出到已检测到静音的位置,或保留所有静音音频。

如果您能够自己重新编译SoX,则可以自己添加输出语句以查找剪切位置,然后trim在单独的调用中使用以拆分文件。对于普通版本,您不走运。