Hatena::ブログ(Diary)

徒手空拳日記 Twitter

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 にぶち込むスクリプトまでを書く。

こっから先は python でできるので楽だ。先人たちに感謝

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/matoge/20101016/1287195402