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

理想情况下,将ML算法与全面的测试/列车数据结合使用,将产生一个动态解决方案,该方案可能不需要对静默长度和阈值进行任何手动调整。在

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

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

最小静音长度:音频中预期的最小静音长度(毫秒)。

沉默:任何低于这个限度的东西都被认为是沉默。在

在尝试的过程中,我注意到,在运行detect_nsilent方法之前,对音频进行规范化非常有帮助,这可能是因为增益用于实现平均振幅水平,这使得检测静默变得更容易。在

示例音频文件从open speech repo下载。每个音频文件有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])

结果:

^{pr2}$

正如在audacity中看到的(差异如下所示),我们的结果接近于0.1-0.4秒的偏移量。调整detect_nsilent参数可能会有所帮助。在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

fTGVI.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值