2010-10-16
transcode を使って DVD から直接スピードラーニングを作る
何がしたいか
subs2srs は、例えば英語学習者にとっては「英語の音声と英語の字幕、(あれば)日本語の字幕」を抽出するプログラムである。某スピードラーニングみたいに、「日本語 -> 英語」つー音声ファイルがつくればいいなと思った。
手に入る動画は、DVD が主だと思うが、DVD の字幕は非常に扱いにくく、しかもテキストファイルなく画像で保存されている。だが、今の目的のためには、この画像ファイルをOCR などをつかってテキストにする必要はなく、タイミング情報だけとってくればいい。というわけで、字幕のタイミングをとってきて「日本語 -> 英語」の順番で次々と再生するスクリプトを作る。
ここに書く事はすごくヒューリスティックなので、ちゃんとDVDの字幕の勉強したい人は DVD の仕様を読んでね。
transcode を使ってスピードラーニングを作る
Vobsub を使えば idx/sub という字幕ファイルができるが、ここからタイミングを抽出する方法がわからない。
http://www.linux.com/archive/articles/125978 を参考にする。
まず、transcode を port install する。
sudo port install transcode
んで、 Subtitle ripper for Linux のソースをダウンロードしてきてコンパイル。
Linux 用のプログラムらしいが、Mac でもちょっといじくればコンパイルできた。( ppm.h が無いと言われたが、Makefile からppm をインクルードしないようにしてやる。
# in Makefile ### enable ppm support ### # DEFINES += -D_HAVE_LIB_PPM_ # LIBS += -lppm
http://www.linux.com/archive/articles/125978 に従って、まず対象の VOB ファイルだけフォルダ vob/ に写し、
$ tccat -i vob | tcextract -x ps1 -t vob -a 0x20 > subs-en
これで、多分 .sub ファイルが出来る。こっから、.pgm と、タイミングファイルを取り出すには、
$ subtitle2pgm -o english -c 255,255,0,255 < subs-en
255,255,0,255 は http://netpbm.sourceforge.net/doc/pgm.html:pgm の色で、多分これを変えると字幕のいろが変わるんだと思う。出来上がった字幕ファイルを見てみるには、Imagemagick の convert コマンドを使って
$ convert english0123.pgm file.png
でいける。フォルダを見てみると、english.srtx とかいうファイルと 沢山の pgm ができてて、中身が
82 00:09:55,139 --> 00:09:58,889 english0082.pgm.txt 83 00:10:01,610 --> 00:10:02,919 english0083.pgm.txt
こんな感じになってる。ここから gocr とかを使って
$ gocr english0017.pgm Realistically, sir, it's ten degrees out here. How far can these kids get
とかできるけど、特に必要ないのでやらない。(日本語の音声で十分)
とにかくここまででタイミングが取れたので、あとは
mplayer -alang jap -ss 9:54 -endpos 4 VIDEO_TS/VIDEO_TS.IFO
mplayer -alang jap -ss 9:54 -endpos 4 VIDEO_TS/VIDEO_TS.IFO
ここまで出来れば、わざわざファイルを分割しなくても学習は出来る。ただ、携帯用に音声に抽出したい。
transcode で出来上がったファイルと元の動画が同期しない。
どうやら、VIDEO_TS/VTS_01_0.VOB を入れるとタイミングがずれるようだ。だから、0 は無視して、1 より後の番号を結合してやればいい。DVD の仕様をもう少し細かく見ないとこの辺はわからない。
だから、まず
cat VTS_01_[1-9]*VOB > tmp.VOB
という感じで 1 より上の VOB だけ結合してやり、それを元に transcode で字幕を抽出してやればいいみたい。
DVD から音声の抽出。
DVD の音声形式は mp3 とかじゃないので、エンコードしてやる必要がある。とりあえず
mplayer input.IFO -dumpaudio -dumpfile stream.dump
とかで抽出。これを
ffmpeg -i stream.dump final.mp3
としてやれば適当に変換してくれる。
次やること
タイミング情報をとってきて、「日本語->英語」の順番で再生する。さらに、subs2srs と同じように、字幕の画像、タイミング、日本語音声、英語音声、スナップショット、日本語動画、英語音声を抽出し、Anki にぶち込むスクリプトまでを書く。
- 3 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 1 http://k.hatena.ne.jp/keywordblog/Mac
- 1 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=YC6&rls=org.mozilla:ja:official&q=matoge&aq=f&aqi=&aql=&oq=&gs_rfai=
- 1 http://www.google.co.jp/search?q=anki+iPad&hl=ja&biw=1276&bih=490&prmd=fd&ei=kza5TNvFKofUvQOX4KiqDQ&start=20&sa=N