为了研究如何将语音转换成视频,以便以后把自己想说的话发到B站,所以今天看了下如何将语音切割的代码。代码算法很简单,会点音频知识即可。测试代码如下:
"""
利用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("李兴球的音频介绍.wav")
loudness = sound.dBFS # 响度
chunks = split_on_silence(sound,
# 沉默一定时间的间隔,用于分隔一段语音
min_silence_len=430,
# 沉默的阈值
silence_thresh=-45,
keep_silence=400
)
print('总分段:', len(chunks))
# 放弃长度小于2秒和大于10秒的音频片段
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")
