Python pydub音声停止カットを実現

1695 ワード

  • 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)関数
    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)