簡體   English   中英

如何基於靜音分割音頻文件並在python中重疊最后說2秒

[英]How to split a audio file based on silence and overlap the last say 2 seconds in python

目前我正在使用此代碼將音頻文件切成小塊:

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 中更改某些內容,還是有其他一些可以執行此操作的軟件包?

由於每個塊在靜音時被分割,因此它不會有前 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()來查找靜音范圍並自行決定在何處切割原始音頻。

我將把它留給你作為編碼練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM