[英]How do I split an audio file at the end of a silence, without deleting silence, using pydub?
[英]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.