Volo di notte

お勉強の成果メモや日常のこと

夜間飛行へ移行中です

 

WAVファイル, MP3ファイルを無音部分で分割

仕事で音声ファイルを無音部分で分割する必要がでてきたけど、 Audacityでやっても分割前の空音が残ってしまったり、保存時のファイル名指定が面倒だったり、 なかなか思い通りにならなかったのでPythonで処理しました。

必要なものなどのメモ書き。

環境

ライブラリのインストール

AnacondaでFFMPEGmenpoさんが公開しているので、これを使った。

conda install -c menpo ffmpeg

また、pydubはpipでインストール.

pip install pydub

ファイルの読み込み~無音部分での分割

pydubにsplit_on_silenceというクラスがあるので、これを使うだけ。

from pydub import AudioSegment
from pydub.silence import split_on_silence

sound = AudioSegment.from_file("./untitled1.wav", format="wav")
chunks = split_on_silence(
    sound,

    # 1500ms以上の無音がある箇所で分割
    min_silence_len=1500,

    # -30dBFS以下で無音とみなす
    silence_thresh=-30, 

    # 分割後500msだけ、無音を残す
    keep_silence=500
)

# 分割数の表示
print len(chunks)

表示された分割数で所望数通り、分割されているか確認してね。 silence_threshやmin_silence_lenのパラメータで多少の調整は必要。

ファイル名リストの作成~保存

作成したいファイル名が連番でなかったので、リストで作成(ここは好きにすればよい)。 その名前に従って分割した音声ファイルを保存。前節の分割数とfilelistの要素数が同じになるように注意。

filelist = ["file_hoge1","hogegennhogehoge","foo_bar","lucky_you",]

for i, chunk in enumerate(chunks):
    chunk.export(u"./分割/"+filelist[i]+".wav", format="wav")

Easy peasy Japanesey!