我试图在给定的音频文件中输出静音时段的开始时间戳(因为存在背景噪声,通过静音,我的意思是阈值).最后,我想在给定这些时间戳的情况下将音频文件拆分为较小的音频文件.重要的是不丢弃原始文件的任何部分.
我试过了
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)
(当前,至少)没有办法使silence效果输出到已检测到静音的位置,或保留所有静音音频。
如果您能够自己重新编译SoX,则可以自己添加输出语句以查找剪切位置,然后trim在单独的调用中使用以拆分文件。对于普通版本,您不走运。