【问题标题】:How to split a audio file based on silence and overlap the last say 2 seconds in python如何基于静音分割音频文件并在python中重叠最后说2秒
【发布时间】:2018-10-22 17:43:59
【问题描述】:

目前我正在使用此代码将音频文件切成小块:

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 中更改一些内容吗?或者是否有其他软件包可以做到这一点?

【问题讨论】:

    标签: python audio split pydub


    【解决方案1】:

    由于每个块都是在静音时拆分的,因此前 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() 来查找静音范围,并自行决定在哪里分割原始音频。

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

    【讨论】:

    • 我自己研究了几天,得出的结论与您所说的完全相同。我只花了 5 秒的时间间隔,在切片音频之前,我将开始时间设置为它的“-2”。这似乎很有效。很高兴知道我在正确的轨道上 :) 非常感谢
    猜你喜欢
    • 2017-08-29
    • 2018-01-13
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多