您当前的位置:首页 > 计算机 > 编程开发 > Python

Python pydub实现语音停顿切分

时间:09-17来源:作者:点击数:
  • 将pcm文件批量处理成wav文件
import wave
import os

filepath = "data/"  # 添加路径
filename = os.listdir(filepath)  # 得到文件夹下的所有文件名称
#f = wave.open(filepath + filename[1], 'rb')
#print(filename)
for i in range(len(filename)):
    with open("data/"+failename[i], 'rb') as pcmfile:
        pcmdata = pcmfile.read()
    with wave.open("data/"+filename[i][:-3] + '.wav', 'wb') as wavfile:
        wavfile.setparams((1, 2, 16000, 0, 'NONE', 'NONE'))
        wavfile.writeframes(pcmdata)
   
  • 利用语音停顿切分

利用split_on_silence(sound,min_silence_len,   silence_thresh,    keep_silence=400)函数

第一个参数为待分割音频,第二个为多少秒“没声”代表沉默,第三个为分贝小于多少dBFS时代表沉默,第四个为为截出的每个音频添加多少ms无声

from pydub import AudioSegment
from pydub.silence import split_on_silence

sound = AudioSegment.from_mp3("movie300.wav")
loudness = sound.dBFS
#print(loudness)

chunks = split_on_silence(sound,
    # must be silent for at least half a second,沉默半秒
    min_silence_len=430,

    # consider it silent if quieter than -16 dBFS
    silence_thresh=-45,
    keep_silence=400

)
print('总分段:', len(chunks))

# 放弃长度小于2秒的录音片段
for i in list(range(len(chunks)))[::-1]:
    if len(chunks[i]) <= 2000 or len(chunks[i]) >= 10000:
        chunks.pop(i)
print('取有效分段(大于2s小于10s):', len(chunks))

'''
for x in range(0,int(len(sound)/1000)):
    print(x,sound[x*1000:(x+1)*1000].max_dBFS)
'''

for i, chunk in enumerate(chunks):
    chunk.export("cutFilter300/chunk{0}.wav".format(i), format="wav")
    #print(i)

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门