当前,我正在使用以下代码将音频文件切成小块:
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中更改某些内容,还是可以使用其他软件包?
答案 0 :(得分: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()查找静音范围,并自行决定在哪里分割原始音频。
我将其留给您作为编码练习。