Python pydub音声停止カットを実現
1695 ワード
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)関数
1番目のパラメータは分割されるオーディオで、2番目のパラメータは何秒で「音がしない」は沈黙を表し、3番目のパラメータはデシベルが何dBFS未満の場合沈黙を表し、4番目のパラメータは切断されたオーディオごとに何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)