音声ファイルを分割
録音した音声ファイルを無音部分で分割したので適当なフリーソフトがないか検索しているとAnacondaで簡単に実現できることが分かった。
VS Codeの統合ターミナル(Windows/macOSを意識しなくてよくなる)で環境を整える。
$ conda install -c menpo ffmpeg
音声データ処理用のライブラリ Pydub をインストール
$ pip install pydub
Windows版で、エラーが発生!
Unknown or unsupported command ‘install’
$ where pip
でpipのインストール状況を確認するとAnacondaの他にPerlのpipがインストールされていることがわかる
以下のいづれかの方法で対処できると思います。お好みで。
Mac版では、別のエラーが発生!
RuntimeWarning: Couldn’t find ffmpeg or avconv - defaulting to ffmpeg, but may not work
ffmpegがうまく認識できないいないようだ。 インストールのミス?
ffmpegへのパスは通っている。 ffmpegコマンドを実行するとPermission Denied。確かに実行権がない。
$ conda uninstall -c menpo ffmpeg
アンインストール後、念のため、以下のフォルダを削除
Users/user/anaconda/pkgs/ffmpeg-x.x.x-0
(xは、バージョン番号)
その後、再インストールで正常に動作するようになりました。
$ conda install -c menpo ffmpeg
音声ファイルの分割方法は、以下の通りです。
""" コマンドライン引数で指定されたカレントディレクトリのwavファイルを 無音部分で分割します。 分割されたwavファイルは、splitフォルダに保存されます。 """ import sys # モジュール属性 argv を取得するため import datetime from pydub import AudioSegment from pydub.silence import split_on_silence ARGVS = sys.argv # コマンドライン引数を格納したリストの取得 ARGC = len(ARGVS) # 引数の個数 if ARGC != 2: # 引数が足りない場合は、その旨を表示 print("Usage: # python " + ARGVS[0] + " wavfilename") quit() # プログラムの終了 NAME = ARGVS[1] START = datetime.datetime.now() print("-- 解析開始 -- ", START) SOUND = AudioSegment.from_file("./" + NAME + ".wav", format="wav") CHUNKS = split_on_silence( SOUND, # ms以上の無音がある箇所で分割 min_silence_len=5000, # dBFS以下で無音とみなす silence_thresh=-16, # 分割後500msだけ、無音を残す keep_silence=500 ) END = datetime.datetime.now() print("-- 解析終了 -- ", END, " elapsed_time:", (END - START)) # 分割数の表示 print("分割数:{0}".format(len(CHUNKS))) for i, chunk in enumerate(CHUNKS): chunk.export("./split/"+ NAME + "_{0}.wav".format(i), format="wav")
実装速度はかなり遅いです。
45分のwavファイルを分割するのに10分程度かかりました。
マシンスペックは、以下の通りです。
$ python -m compileall [ファイル名] $ python __pycache__/[ファイル名].[Pythonのバージョン].pyc
処理時間同じだった。なんでだろう?
そうか単に難読化してるだけだったかぁ。
速度的には、こちらがよいかも? stabucky.com
Audacityのパラメータを同様に設定したが、同じように分割されない。なぜ?