2017-08-05 39 views
0

私は200を超えるMP3ファイルを持っており、無音検出を使用してそれぞれを分割する必要があります。私はAudacityとWavePadを試しましたが、バッチプロセスはなく、1つずつ作成するのは非常に遅いです。無音検出を使用してオーディオファイルを分割する

次のようなシナリオがある:沈黙2秒以上

  • 一方

    • 分割トラックは、開始し、これらのトラックの終わりに0.5秒を追加し、.MP3
    • ビットレートとして保存します192ステレオ
    • 正規のボリュームは、すべてのファイルが同じボリュームと品質であることを確認することが

    私はFFmpegのを試してみましたが、失敗。

  • +0

    [どのようにmp3ファイルを分割できますか?](https://askubuntu.com/questions/27574/how-can-i-split-a-mp3-file)をご覧ください。 – John1024

    +0

    私は[mp3DirectCut](http://www.mpesch3.de1.cc/mp3dc.html)を妥当な成功を収めて使用しました。言いましたが、StackOverflowはプログラミングのためのQ/Aサイトです。これは、ソフトウェアやその他のオフサイトリソースの推奨を求めるサイトではありません。 – rojo

    答えて

    4

    私はpydubが、これらの種類のオーディオ操作を簡単な方法で最小限のコードで実行する最も簡単なツールであることを発見しました。

    あなたは、必要な場合は、ffmpegの/ avlibをインストールする必要がありますpydub

    pip install pydub 
    

    としてインストールすることができます。詳細については linkを確認してください。

    ここには、あなたが求めたことをするコードがあります。 silence_threshold,target_dBFSなどのパラメータの中には、要件に合わせてチューニングが必要なものがあります。
    は全体的に私はmp3ファイルを分割することができました(ただし、私の最後のsilence_threshold異なる時)

    ワーキングコード

    from pydub import AudioSegment 
    from pydub.silence import split_on_silence 
    
    def match_target_amplitude(aChunk, target_dBFS): 
        ''' Normalize given audio chunk ''' 
        change_in_dBFS = target_dBFS - aChunk.dBFS 
        return aChunk.apply_gain(change_in_dBFS) 
    
    song = AudioSegment.from_mp3("your_audio.mp3") 
    
    #split track where silence is 2 seconds or more and get chunks 
    
    chunks = split_on_silence(song, 
        # must be silent for at least 2 seconds or 2000 ms 
        min_silence_len=2000, 
    
        # consider it silent if quieter than -16 dBFS 
        #Adjust this per requirement 
        silence_thresh=-16 
    ) 
    
    #Process each chunk per requirements 
    for i, chunk in enumerate(chunks): 
        #Create 0.5 seconds silence chunk 
        silence_chunk = AudioSegment.silent(duration=500) 
    
        #Add 0.5 sec silence to beginning and end of audio chunk 
        audio_chunk = silence_chunk + chunk + silence_chunk 
    
        #Normalize each audio chunk 
        normalized_chunk = match_target_amplitude(audio_chunk, -20.0) 
    
        #Export audio chunk with new bitrate 
        print("exporting chunk{0}.mp3".format(i)) 
        normalized_chunk.export(".//chunk{0}.mp3".format(i), bitrate='192k', format="mp3") 
    

    元の音声はステレオ(チャンネル= 2)、チャンクがなるステレオの場合。 以下のように確認できます。

    >>> song.channels 
    2 
    
    関連する問題