python - 如何基于静音分割音频文件并在python中重叠最后说2秒
问题描述
目前我正在使用此代码将音频文件切成小块:
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()来查找静音范围,并自行决定在哪里切片原始音频。
我将把它作为编码练习留给你。
推荐阅读
- android - 即使我杀死我的应用程序,BluetoothGattCallback 回调方法 onCharacteristicChanged 也会继续触发
- php - 如何在 Xero Webhook 中向 Xero API 提交发布请求
- android - Android模拟器在访问视频解决方案时关闭(exoplayer)
- javascript - 如何在样式函数中使用类级别状态
- javascript - 如何在 JavaScript 中分离每个 JSON 对象并将它们分组到一个数组中?
- python - Pandas - Merge two DataFrame with partial match
- angular - 角度路由器未导航到路线
- c# - 如何将 FormData 与 ABP 的内置 RestService 一起使用?
- c++ - 是否可以直接通过PCL提供的算法接口使用多线程进行加速
- azure - 为 uwp 应用程序禁用 azure 应用洞察或来自 azure 的遥测