Pythonで音声ファイルを分割する

Pythonでは、pydubpydub.silenceを使用して音声ファイルを無音位置で分割できます。

インストール

pydubをインストールします。

pip install pydub

また、実行にはffmpegが必要です。インストールしていない場合はインストールしてください。

sudo apt update
sudo apt install ffmpeg

使用方法

from pydub import AudioSegment
from pydub.silence import split_on_silence

def split_audio(input_file_path, output_dir_path):
    # read audio file
    audio = AudioSegment.from_file(input_file_path)

    # split file when point of silence
    segments = split_on_silence(audio, silence_thresh=-40)

    for i, segment in enumerate(segments):
        segment.export(f"{output_dir_path}/file_{i+1}.wav", format="wav")
#;

split_audio("./wav/hello.m4a", "./wav")

silence_threshは無音とみなす閾値です。上記では、-40dB(デシベル)以下の音を無音とみなしています。デフォルトは-16dBです。

出力フォーマット

他にも指定可能のようですが、私の環境では、以下の指定が可能でした。

  • wav
  • mp3
  • ogg

ビットレート指定

export()メソッドのパラメータにビットレートを指定できます。

segment.export(f"{output_dir_path}/file_{i+1}.mp3", format="mp3", bitrate="192k")

最低無音時間の設定

split_on_silence()のパラメータに無音時間の閾値(無音とみなす最小の無音時間)をmin_silence_lenで設定できます。この時間より短い無音は無視されます。単位はミリ秒です。デフォルトは1秒です。

次の例では、2秒間無音と判定された場合のみ分割します。

split_on_silence(audio, silence_thresh=-42, min_silence_len=2000)

探索精度

split_on_silence()のパラメータseek_stepで無音時間を探索する際の探索精度を設定できます。単位はミリ秒でデフォルトは1ミリ秒です。この値が細かいと処理に時間がかかります。

split_on_silence(audio, silence_thresh=-42, seek_step=10)
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です