Entry

DVDより字幕ストリーム付きのmkvファイルを作成する

最近、DVD-Videoから動画ファイルを作成する作業で試行錯誤していたため、その手順を以下に記録する。
ただしここでいう動画ファイルというのは、普通のaviファイルで作るような動画とは異なる。そんな情報はネット上にごまんと転がっているので、わざわざ自分が下手な文書で書くような物でもない。
今回対象とする動画は、以下の条件に当てはまる物とする。

  1. 映像ストリームが格納される事(当たり前だ!)。
  2. 音声ストリームが2つ以上格納される事。
  3. 字幕ストリームが格納される事。
  4. チャプタが入力出来るといいな(できれば)。
  5. COWON A3で視聴できる事。
  6. 作成に手間がかからなない事。
  7. Windows XP環境上で作成できる事。

ここでいう「字幕」というのは、ただ動画に混ぜ込んだ(mix)ものではなく、動画と独立したストリームで多重化(mux)され、字幕の表示・非表示が切り替えられる物を指す。要は、DVDの動画をほぼそのまま1ファイルに収めようという話。
また、多数のツールを駆使して作るとか面倒な事はハッキリ言ってやりたくないので、ある程度のこだわりは捨てて、出来る限り作業を簡単にする事を条件とした。

この目的は、自分の所持するDVD(多重音声及び字幕必須)を頻繁に使いたい事情があるけれど、毎度毎度DVD挿入するのもめんどいので、動画ファイルにしてしまおうという物。ついでに、手持ちのポータブルプレイヤー「COWON A3」でも見られる代物に仕上げる事を目標とする。

今回作業を行ったDVDは、北米版の「Rozen Maiden」Vol.1。英語音声及び日本語音声があり、英語字幕が2つ収録されている(映像ストリームx1、音声ストリームx2、字幕ストリームx2)。ちなみに、2種類ある英語字幕のうち、片方は通常の字幕(ENGLISH DIALOGUE TRANSLATION」…と言うらしい)、もう一方はキャラクターの台詞の字幕が一切無く、映像上の日本語等の意味及びOP/ED(これらは原曲のまま)の歌詞を表示するだけの字幕(「ENGLISH ON-SCREEN TRANSLATION」…と言うらしい)。

作業手順を以下に示す。
なお、自分は動画編集の知識が中途半端のため、誤った設定や操作を行っている可能性がある点に注意。

  1. DVD-Videoのリッピング
  2. 映像・音声のエンコード [使用ツール:HandBrake]
  3. 字幕の抽出 [使用ツール:VSRip]
  4. 動画と字幕の統合 [使用ツール:mkvtoolnix ]

DVD-Videoのリッピング

DVDのリッピングについては、ここでは触れません。というか正直、私的複製を目的にしていてもあんまり触れたくないです(笑)。いやまぁ、この記事の主旨としては、ここをクリアできなければどうしようも無いので、避けて通れない作業ではあるのですが。ここは、何らかの手段によってリッピングが出来たという前提で次に話を進める。
リッピング後のデータ形式は主に以下の2種類がある。

IFO/VOB/BUP
DVD内のデータを吸い上げたファイル群。VIDEO_TSディレクトリに各ファイルが入っている。メリットは、取り扱えるソフトウェアが多い事。
ISO
DVDをそのままイメージファイル化したファイル。メリットは、DVDの情報がそのまま格納される事。

今後の作業をする上ではどちらでも問題ない。ただしISO形式の場合は別途、「DAEMON Tools」や、「Alcohol 52%」といった仮想ドライブソフトが必要となる。
ちなみに、推奨はISO。理由は、元動画の確認や字幕同期の確認、チャプタの確認が出来るから(別に元のDVD使えばいい話だけど)。

映像・音声のエンコード

リッピングしたDVDデータを別の動画ファイルにエンコードする作業。
実は再生対象に挙げている「COWON A3」というポータブルプレイヤーは、DVDから吸い上げたVOBファイルも再生できたりするのだけど、今回リッピングしたデータはどうも上手く再生できなかったので、汎用的な形式に変換する事にした。
使用ツールはHandBrake(現バージョンは0.9.2)。

Handbrake

以下設定。

Source
リッピングしたDVDがIFO/VOB/BUPの場合はFolder、ISOの場合はFileにチェックを入れて「Source」のパスを設定する。その後、「Title」よりエンコード対象のタイトルを選択する(リッピングソフトの情報等を参照にする。大抵は一番時間の長いヤツ)。
Destination
出力先のファイルパスを設定する。この時、動画コンテナの形式も同時に決定する(avi、mkv、mp4、m4v、ogmが可能)。今回作成する動画の条件として最も適切なコンテナはMatroska形式(.mkv)なので、そのように設定する。
Output Settings
EncoderはH.264、Audio EncoderはAACとした。個人的には、汎用性の高さと負荷の軽さからDivXを使用したい所だけど、生憎と未対応。

その他の設定は以下の画像の通り。

設定上問題が発生する可能性のある箇所は赤く表示される。
今回、解像度を704×396と設定したが、396という数字が16の倍数は無いため(多くの動画エンコードにおいて、解像度の縦横は16の倍数が推奨されている)好ましくないと判定されているらしい。ただ、16の倍数でなくても作成・再生に支障は無いようだ。
気になる場合は、16:9のアスペクト比かつ16の倍数となる512×288または768×432とするのが良いかも(参考: Lunatilia.net – 動画/16の倍数の解像度一覧)。あるいは、その他の解像度を設定してCropを設定する。

あと、今回の映像はOP/EDのフレームレートは30fps(29.971fps)、本編のフレームレートが24fps(23.976fps)となっているようだ。生憎と、ダミーフレームを挿入して24と30の最小公倍数である120fpsにするというような機能は無いので、30fpsで妥協する事にする。なお、この時Detelecineにチェックを入れないと24fpsの映像にインターレスの縞が残る。
ちなみに、VFR(Variable Frame Rate:可変フレームレート)は今回上手くいかなかったので諦めた。多分、2passエンコードとかやらないとダメなんだろうと思うけど、そんな手間をかける気が無いのでやらない。

設定完了後、「Start」ボタンを押すとエンコードが開始される。当然のように時間がかかるので、PCに空きが出来る前に仕掛けておくと良い。
この結果、映像ストリーム及び音声ストリームx2(英語音声、日本語音声)が格納され、チャプタ分割されたmkv動画ファイルが出来上がる。
ちなみにこのmkvファイル、あまり出来が良くないのか、自分の環境で再生するとシークにやたら時間がかかる。そのため、下記のMKVToolnixを使用して作り直すと良いかも。

2009-03-08 追記

DVDによっては、上記の作業においてエンコードに失敗する事がある。
Hand BrakeのActivity Window(ログウィンドウ)を見ると、「a52_syncinfo failed」といったメッセージがたくさん残されている。原因は今ひとつ良く分からないけれど、どうも動画と音声に何らかのギャップがあり、エンコードする際にその同期が上手くいかないとこうなるらしい。
これについて対処法について調べてみたけど解決策が出てこなかったので、とりあえずそのギャップ情報が正しく設定されれば良いのだろうと考え、「DVD Shrink」を使用してリッピングしたDVDデータの再構成を行った後、再度Hand Brakeに渡してみたところ、正常にエンコードが完了した。

字幕の抽出

ver 0.9.4より字幕ストリームの追加も可能となっている模様なので、本作業は恐らく不要。 [2011-05-27]

DVDより字幕データを吸い出す作業。
使用ツールはVSRip(現バージョンは1.0.0.6)。

VSRip

リッピングしたDVDがIFO/VOB/BUP形式の場合は、フォルダ内のIFOファイルを指定する。ISO形式の場合は、一度仮想ディスクをマウントして、イメージ内のIFOファイルを指定する。指定するIFOファイルは、エンコードした動画に対応する物を指定する。
「Next」ボタンを押していくと処理が開始される。
完了すると、idx+subファイルが出来上がる。

この作業に関しては特に迷うような事はないはず。

動画と字幕の統合

ver 0.9.4より字幕ストリームの追加も可能となっている模様なので、本作業は恐らく不要。 [2011-05-27]

作成したmkv動画ファイルと、idx/sub字幕ファイルを統合(Marge)する作業。
使用ツールはMKVToolnix(mkvmerge GUI)(現バージョンはv2.2.0)。

MKVToolnix

Input filesにmkv動画ファイルとidx+sub字幕ファイルを追加すると、「Tracks」欄に自動的にストリームのリストが表示される。今回の作業では、動画ストリームx1、音声ストリームx2、字幕ストリームx2の計5つがリストに表示される事になる。

ここで、「Start muxing」ボタンを押すと各ストリームが統合され、1つのmkvファイルが出力される。
作業はこれで完了…と言いたいところだけど、このままでは動画と字幕にズレが生じ、字幕の表示が1秒ほど遅れていた(1秒とは正確に計測したものではなく、元映像と目視比較した値)。そこで、字幕のタイミングを設定する。
MKVToolnixの「Tracks」から字幕ストリームを選択。「Format specific options」タブを開き、「Delay」に「-1000」を入力する。これで字幕の表示タイミングを合わせる事ができる(全ての字幕ストリームに対して行う事)。

MKVToolnix

再度「Start muxing」ボタンを押すと、目的のmkv動画ファイルが完成する。

まとめ

これにより完成した動画は以下のようになる。

  • コンテナ:Matroska(.mkv)
  • 映像:H.264
  • 音声:AAC (1.英語音声、2.日本語音声)
  • 字幕:SUB (1.英語字幕(DIALOGUE TRANSLATION)、2.英語字幕(ON-SCREEN TRANSLATION))
  • DVDと同等のチャプタ付き。

Rozen Maiden OP

再生には各種コーデックやフィルタが必要になるが、ファイル単体で扱えるため、手軽に再生できるようになる。音声切換、字幕切換、チャプタ再生も可能。
COWON A3で再生してみたところ、再生は上手く出来た。シークがイマイチ上手くいかないのだけど、これはA3の出来の問題なのであまり気にしない事にしよう。なお、COWON A3はmkvの字幕には対応していないようだ。残念。

あまりこだわるつもりが無かったため、これでも作業をかなり単純化したつもりだけど、思いの外出来の良いファイルが出来上がったような気がする。特に今回は、HandBrakeという複数音声ストリームのエンコードやチャプタ分割までやってくれる便利ツールがあったので相当助かった。

あとは、これをチャプターを維持したまま1話毎にファイル分割したいところだけど、今のところ上手い方法が見つからない。こういったメディア関連のプログラムが自分でできればいんだけどねー。その辺を勉強するという選択肢もアリかなぁ。

追記

andbrakeが字幕の抽出とマージまでやってくれればいいのに…。映像に埋め込む字幕を作る事はできるのだけど。
あと、音量が小さいのでノーマライズ機能もあれば最高。

2008-08-27 追記:PLANETESのケース

別の北米版DVDとして「PLANETES」(プラネテス)を所持しているため、こちらでも同様にmkvファイル作成を行ってみた。対象は、「PLANETES」Vol.1の第1話のみ。
「Rozen Maiden」の場合と異なっていたのは以下の点。

  • 1エピソードごとにファイル(タイトル)分割されているため、5話分で計5回のエンコードを行う必要がある(Rozen Maidenの場合は1タイトルに全話収められている構成)。
  • 第1話は日本語音声、英語音声に加え、特典としてオーディオコメンタリーが収録されているため、音声ストリームは3つ(それ以外は2つ)
  • 第1話はオーディオコメンタリー分の字幕もあるので、字幕ストリームも計3つ。

まず引っかかるのは、音声ストリームが3つある点。現時点において、HandBrakeは2つまでしか対応していない。とりあえず、日本語音声及び英語音声を設定してHandBrakeでエンコードを行う。この時点では、映像ストリームx1、音声ストリームx2。

次に、オーディオコメンタリーの音声だけを取得する。これには「DVD Decryptor」を使用した。これを使用すると、IFOモードに切り替えて吸い出せば、DVDから音声チャンネル分だけを抜き出したVOBファイルを作成することが出来る。

今度は、mkvの音声コーデックに合わせてAACに変換する。これには、MediaCoderを使用。
HandBrakeに合わせてエンコーダにはFAAC、平均ビットレートを160、MPEGバージョンをMPEG4、オブジェクトタイプ(ちなみに、日本語表示すると右端が欠けて「オブジェクトタイ」に見える)はLow Complexityとする。
MediaCoderにファイルを突っ込んで、Startボタンを押せばオーディオコメンタリー音声の完成。この時は恐らく普通はMP4ファイルで生成されるけど、どうせ中身は一緒なので気にしない。これで音声ストリームx1が出来上がる。

最後に、HandBrakeで作成したmkvファイル、MediaCoderで作成したMP4(またはAAC)ファイル、VSRipで作成したidx+subファイルを、MKVtoolnix(mkvmerge GUI)に放り込む。すると、以下のように見える。

20080828_mkvtoolnix.jpg

この時、何故か字幕ストリームが6つ見える。理由は知らない。
その実体は、DIALOGUE字幕と、ON-SCREEN字幕と、オーディオコメンタリー字幕の3つがそれぞれ2つずつ重複しているらしい、という事は分かった。そこで、重複データのチェックを外して、字幕を3つに絞る事にした(どれが何の字幕なのかは、一度作成したmkvファイルの字幕の順番を手がかりにした)。
また、別途追加したオーディオコメンタリー音声の方に言語が設定されていないので、「Language」をjpn (Japanese)に設定。これを統合する事で、目的のmkvファイルを作成する事ができた。

20080828_planetes.jpg

幸いにして、今回は音声と字幕のズレは無かったため、作業はこれで完了。映像ストリームx1、音声ストリームx3、字幕ストリームx3のmkvファイルが出来上がった。
気付いた点としては、最後の3つのチャプタが再生時間の最後ギリギリに設定されているのだけど、これは元のDVDが確かにそうなっているので仕方ない。

何だか、音声ストリームが増えただけで使用するツールと手間が結構増えてしまった点はちと面倒臭いなぁ。もっとこう、手軽にポンと行きたい。

2009-03-08 追記

2008年11月にリリースされたHand Brake 0.9.3より、4ストリームまでの音声をサポートするようになったため、上記の作業は不要となる。

2008-08-29 追記:ファイルを分割する

mkvmerge GUIを使用すれば、割と簡単にファイル分割できるのね。
「Global」タブの「Splitting」で、「after timecodes」を指定してやる。フォーマットは、分割する時間を「HH:MM:SS(HH→時2桁、MM→分2桁、SS→秒2桁、小数点可)」または「NNNNs(XXXX→秒の整数値)」をカンマ「,」で区切って指定する。
例えば、上記で作成した「Rozen Maiden」の場合、1話ごとのチャプタ区切り時間が「00:24:12,00:48:23,01:12:34」となるので、そのように秒単位で指定する。
恐らくキーフレーム分割なので、分割時間をms単位で指定しなくても、一番近いキーフレーム(チャプタの区切り)に合わせてくれるようで。

これで、1話ごとに分割されたmkvファイルが作成される。

2011-05-27 追記

久しぶりに使ってみたら、ver.0.9.4より焼き込み字幕以外にストリームによる字幕追加もできるようになっていた模様。
よって、字幕抽出作業は不要。


Comments (0 件)

コメントを残す

メールアドレスが公開されることはありません。