使用python从音频中获取时间戳

Nic*_*aiF 4 python audio pydub

我有许多音频文件,我想在语音开始和结束时自动添加时间戳。因此,话语开始时的“开始”时间戳。以及话语结束时的“停止”时间戳。

喜欢:

start,stop
0:00:02.40,0:00:11.18
0:00:18.68,0:00:19.77
...
Run Code Online (Sandbox Code Playgroud)

我测试了以下解决方案,它工作正常:使用静音检测分割音频文件问题是我只能从中获取块,这使得将时间戳与原始音频进行匹配有点困难

任何正确方向的解决方案或推动都将受到高度赞赏!

Ani*_*l_M 6

理想情况下,将 ML 算法与全面的测试/训练数据结合起来将产生动态解决方案,可能不需要对静音长度和阈值进行任何手动调整。

然而,可以使用 pydub 的detector_nonsilent方法设计一个简单的静态解决方案。此方法以连续方式返回非静默块的开始和停止时间。

以下参数会影响可能需要进行一些调整的结果。

min_silence_len:您期望的音频中的最小静音长度(以毫秒为单位)。
silence_thresh :低于此阈值的任何内容都被视为沉默。

在尝试时,我确实注意到,在运行detector_nonsilent方法之前对音频进行标准化有很大帮助,可能是因为应用增益来实现平均幅度水平,这使得检测静音变得更加容易。

示例音频文件是从开放语音存储库下载的。每个音频文件有 10 个口语句子,句子之间有一些间隙。

这是一个有效的演示代码:

from pydub import AudioSegment
from pydub.silence import detect_nonsilent

#adjust target amplitude
def match_target_amplitude(sound, target_dBFS):
    change_in_dBFS = target_dBFS - sound.dBFS
    return sound.apply_gain(change_in_dBFS)

#Convert wav to audio_segment
audio_segment = AudioSegment.from_wav("OSR_us_000_0010_8k.wav")

#normalize audio_segment to -20dBFS 
normalized_sound = match_target_amplitude(audio_segment, -20.0)
print("length of audio_segment={} seconds".format(len(normalized_sound)/1000))

#Print detected non-silent chunks, which in our case would be spoken words.
nonsilent_data = detect_nonsilent(normalized_sound, min_silence_len=500, silence_thresh=-20, seek_step=1)

#convert ms to seconds
print("start,Stop")
for chunks in nonsilent_data:
    print( [chunk/1000 for chunk in chunks])
Run Code Online (Sandbox Code Playgroud)

结果:

root# python nonSilence.py 
length of audio_segment=33.623 seconds
start,Stop
[0.81, 2.429]
[4.456, 5.137]
[8.084, 8.668]
[11.035, 12.334]
[14.387, 15.601]
[17.594, 18.133]
[20.733, 21.289]
[24.007, 24.066]
[27.372, 27.977]
[30.361, 30.996]
Run Code Online (Sandbox Code Playgroud)

正如 audacity 中所见(差异如下所示),我们的结果接近 0.1 - 0.4 秒偏移。调整 detector_nonsilent 参数可能会有所帮助。

Count From Script   From Audacity
1   0.81-2.429      0.573-2.833
2   4.456-5.137     4.283-6.421
3   8.084-8.668     7.824-9.679
4   11.035-12.334   10.994-12.833
5   14.387-15.601   14.367-16.120
6   17.594-18.133   17.3-19.021
7   20.773-21.289   20.471-22.258
8   24.007-24.066   23.843-25.664
9   27.372-27.977   27.081-28.598
10  30.361, 30.996  30.015-32.240
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述