10

我正在尝试在给定的音频文件中输出静音期的开始时间戳(因为存在背景噪声,静音是指阈值)。最终,考虑到这些时间戳,我想将音频文件拆分为更小的音频文件。重要的是不要丢弃原始文件的任何部分。

我试过了

sox in.wav out.wav silence 1 0.5 1% 1 2.0 1% : newfile : restart

(礼貌http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/

尽管它在某种程度上起到了作用,但它也修剪并丢弃了我不希望发生的沉默时间。

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

谢谢。

4

4 回答 4

14

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

ffmpeg -i in.wav -af silencedetect=noise=-50dB:d=1 -f null -

(检测阈值为 -50db,至少 1 秒,抄自 ffmpeg 文档

...这将打印如下结果:

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
于 2016-05-12T02:36:32.290 回答
5

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

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

于 2013-08-08T22:35:37.057 回答
2

SoX 可以轻松地为您提供文本文件中实际静音的时间戳。虽然不是静默期,但你可以用一个简单的脚本来计算

   .dat   Text  Data  files.   These  files  contain a textual representation of the sample data.  There is one line at the beginning that contains the sample
          rate, and one line that contains the number of channels.  Subsequent lines contain two or more numeric data intems: the time since the beginning  of
          the first sample and the sample value for each channel.

          Values are normalized so that the maximum and minimum are 1 and -1.  This file format can be used to create data files for external programs such as
          FFT analysers or graph routines.  SoX can also convert a file in this format back into one of the other file formats.

          Example containing only 2 stereo samples of silence:

              ; Sample Rate 8012
              ; Channels 2
                          0   0    0
              0.00012481278   0    0

所以你可以这样做sox in.wav out.dat,然后解析文本文件并考虑一个静默值接近 0 的行序列(取决于你的阈值)

于 2019-06-07T21:24:43.350 回答
0

necroposting:您可以运行一个单独的脚本来迭代所有 sox 输出文件(对于 *.wav 中的 f),然后使用命令;soxi -D $f获取声音片段的 DURATION。然后,以秒为单位获取系统时间date "+%s",然后减去以找到录制开始的时间。

于 2014-05-20T19:16:42.450 回答