为了账号安全,请及时绑定邮箱和手机立即绑定

如何基于静音分割音频文件并在python中重叠最后说2秒

如何基于静音分割音频文件并在python中重叠最后说2秒

慕无忌1623718 2021-07-14 17:14:07
目前我正在使用此代码将音频文件切成小块:sound = AudioSegment.from_mp3("1.WAV")f=open("decoded.txt", "a+")chunks = split_on_silence(sound,min_silence_len=280,silence_thresh=-33,keep_silence=150)for i, chunk in enumerate(chunks):    print(i)    print("\n")    chunk.export(folder+"/chunk{0}.wav".format(i), format="wav")    AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), folder+"/chunk{0}.wav".format(i))    r = sr.Recognizer()    with sr.AudioFile(AUDIO_FILE) as source:        print("Listening...")        audio = r.record(source)  # read the entire audio file        f.write((r.recognize_google(audio) +" "))f.close();这会创建根据静音分割的文件块......但我想要的是,每当音频被分割时,下一个切片从 2 秒开始,以便任何可能被剪切的单词都可能出现。就像如果沉默是在 10,13,18,22 时间那么我的切片应该是 0-10,8-13,11-18,16-22。我正在使用 pydub 根据沉默进行拆分。我可以在 pydub 中更改某些内容,还是有其他一些可以执行此操作的软件包?
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

由于每个块在静音时被分割,因此它不会有前 2 秒的数据。
但是,您可以做的是,复制前一个块 (n-1) 的最后 2 秒并与下一个块 (nth) 合并,跳过第一个块。

伪代码如下,

n1 + n2 + n3 + ...n    #audio chunks that are split on silence
n1 + (<last 2 seconds of n1> + n2) + (<last 2 seconds of n2> + n3) + ...

您还可以使用keep_silence来查看哪些值对您的要求有意义。

另一个想法是使用 pydub.silence.detect_nonsilent()来查找静音范围并自行决定在何处切割原始音频。

我将把它留给你作为编码练习。


查看完整回答
反对 回复 2021-07-27
  • 1 回答
  • 0 关注
  • 419 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信