pythonでTOEFL3800を分割
pythonでTOEFL3800のCDを単語ごとに分割する方法。
数千個のmp3ファイルが生成されるので注意。
環境は以下の通り
1) ffmpegとpydubのインストール
また、ここからpydubをダウンロードする。
インストールは、手こずり過ぎてうろ覚えであり、割愛する。すいません。
ただし、pydubは普通にpython setup.py installをしたような気がする。
またffmpegは上記のサイトからffmpeg, ffprove, ffserverをダウンロード、解凍して、〜/anaconda/pkgs/の中に放り込んだような記憶があるようなないような。
2)データの準備
TOEFLテスト英単語3800を購入する。
本に載っているパスワードを使って、ここから背景音のない音源を入手。
CD1のデータ(tango_d1.zip)をダウンロードし、これを解凍すると、tango_d1なるフォルダーが現れるはず。
デスクトップにtestなるフォルダーを作り、この中にtango_d1を置く。
またtest内部にsplitなるフォルダーを作る。
具体的には以下に示す通りである。
Desktop/
└test/
├ tango_d1/
│ ├ CD1-01.mp3
│ ├︙
│ └ CD1-43.mp3
│
└split
3)分割するコード
音源は以下のような構成になっている。
英単語1→(無音)→日本語1→(無音)→英単語2→(無音)→日本語2→…
例)
apple→(無音)→りんご→(無音)→bug→(無音)→虫→…
以下のコードを用いて音源を無音部において分割する。
from pydub import AudioSegment
from pydub.silence import split_on_silence
import glob
titles = glob.glob("tango_d1/*.mp3")
for title in titles:
sound = AudioSegment.from_file(title, format="mp3")
chunks = split_on_silence(sound, min_silence_len=500, silence_thresh=-40, keep_silence=600)
for i, chunk in enumerate(chunks):
chunk.export(title.replace("tango_d1/","split/").replace(".mp3","_"+ str(i).zfill(3) +".mp3") , format="mp3")
ここで、以下のコードにおいて無音部において分割をしている。
sound = AudioSegment.from_file(title, format="mp3")
chunks = split_on_silence(sound, min_silence_len=500, silence_thresh=-40, keep_silence=600)
以下のコードは、分割によって生成されたmp3に対して、名前の書き換えとフォルダーの移動を行っている。
chunk.export(title.replace("tango_d1/","split/").replace(".mp3","_"+ str(i).zfill(3) +".mp3") , format="mp3")
具体的には以下のようである。
tango_d1/CD1-01.mp3 →(分割)→ split/CD1-01_000.mp3, split/CD1-01_001.mp3, …
testフォルダー内は以下のようになる。
Desktop/
└test/
├ tango_d1/
│ ├ CD1-01.mp3
│ ├︙
│ └ CD1-44.mp3
│
└split/
├ CD1-01_000.mp3
├︙
├ CD1-01_001.mp3
├︙
├ CD1-44_000.mp3
├︙
└ CD1-44_055.mp3
以下のサイトを参考にした。
【Python/pydub】mp3、wavファイルの分割(無音部分で区切る) | アルゴリズム雑記
WAVファイル, MP3ファイルを無音部分で分割 - Volo di notte
関連