pythonでTOEFL3800を分割

pythonでTOEFL3800のCDを単語ごとに分割する方法。 

 数千個のmp3ファイルが生成されるので注意。

 

環境は以下の通り

mac OS X 64 bit

python 2 (Anacondaによってインストールした)

ffmpeg 4.0.1

pydub 0.22.1

 

1) ffmpegとpydubのインストール

ここからffmpegをダウンロードする。

また、ここから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

 

関連

haitenaipants.hatenablog.com