⧅ffmpeg DVDから抽出したVOBファイルをmp4に変換する

提供:yonewiki

⧅ffmpegに戻る。

概要

 DVDのデータを抽出するとAUDIO_TSという空っぽのフォルダとVIDEO_TSというフォルダに*.VOBや*.IFOファイルが取り出せます。*.IFOファイルには字幕情報が入っています。VOBは1GByteくらいの大きさで分割された状態になっています。抽出にはDVD Fab(有償オールインワンで35,000円ほど)やDVD Shrink(無償)といったアプリケーションを使うと早いでしょう。ちなみに*.BUPファイルはIFOファイルのバックアップで、VIDEO_TS.BUPとVIDEO_TS.IFO、VTS_01_0.BUPとVTS_01_0.IFO、VTS_02_0.BUPとVTS_02_0.IFO…、VTS_0m_0.BUPとVTS_0m_0.IFOは基本的には同じ内容になっています。


 リッピングは犯罪ですが、個人で楽しむ範囲ならば検挙されないので(いまのところ)、家庭内やもともと購入する予定のない友人間程度の直接手渡しの範囲で楽しむのであれば、ほぼ問題ないと考えて良いでしょう。なんやかんやでオリジナルのDVDやBlu-rayDiscが無いと楽しむには不便ですからね。リッピングするにしても、楽しむ範囲内の対価のお金は権利者に届く形で払うようにしましょう。ここが大事。権利者にお金がわたりさえすれば、権利者は不満なくコンテンツの制作に取り組めます。


 コピープロテクトがあるようなコンテンツについて、中身を取り出す操作について、犯罪は犯罪ですから、オススメはできませんが、技術としては知っておいた方が有効活用できるし、仕組みの勉強にもなります。実際、おもしろいぞこれっていう宣伝になれば、該当コンテンツ関連の消費活動は広がりますし、悪いことばかりではないのですが、被害がでるほどのバラマキや搾取をする行為を取り締まるためにある法律といっても過言ではないでしょう。この法律の狙いはそこにあるのです。


 あまり言ってもただしくないので、実際の作業の話に移ります。

 

操作

 1.つなげる。1,073,739,776Byteごとに分割されたVTS_01_1~n.vobファイルを繋ぎ合わせます。


 例えば、n=4の場合で出力するファイルがOutputMain.vobならば、以下のコマンドでつなぎ合わせることができます。ただし4GByteの空き容量がないと出来ない処理です。VTS_02_1~n.vobやVTS_03_1~n.vob…VTS_0m_1~n.vobまである可能性があります。

copy /b VTS_01_1.vob+VTS_01_2.vob+VTS_01_3.vob+VTS_01_4.vob OutputMain.vob


 2.ffmpegで変換する。日本語音声や外国語音声の切り分けや音声字幕がない場合の単純な例です。

ffmpeg -i OutputMain.vob -c:v libx264 -filter:v yadif -vprofile high -vlevel 3.1 -crf 22 -c:a aac OutputMain.mp4


 コマンドの意味


 -i OutputMain.vob:入力ファイル名


 -c:v libx264:ビデオコーデックの指定 H.264


 -filter:v yadif:インターレース解除(走査線の更新が奇数、偶数交互の方式を解除して縞々の目立ちを抑える。)


 -vprofile high:H.264 には圧縮の仕方の違いによってベースラインプロファイル (baseline profile), メインプロファイル(main profile), ハイプロファイル(high profile)という3つのプロファイルがあります。 古い baseline/main/high 新しいという対応です。再生する機器によっては、このプロファイルによって再生できるかどうかが分かれることもあり得ます。


 -vlevel 3.1:最新版のffmpegなら-level 31のようにvlevel値の10倍の値を使うのが同等の指定になります。各レベルが示す具体的なビデオ品質はwikipediaにまとめられているとおり。


 -crf 22:画質を決める。デフォルトは23。値が小さいほど処理は重く。美しくなる。


 -c:a aac:音声コーデック。


 最後は出力ファイル名。


 字幕がある場合は、

ffmpeg -probesize 120M -analyzeduration 120M -ifo_palette VTS_01_0.IFO -i OutputMain.vob -filter_complex "[0:v]yadif[v1]; [v1][0:s]overlay[v2]" -map [v2] -c:v libx264 -vprofile high -vlevel 3.1 -crf 22 -map 0:a -c:a aac OutputMain2.mp4


-ifo_palette VTS_01_0.IFO:字幕ファイルの指定。


 -probesize 120M:

 -analyzeduration 120M:解析時間(MegaMicroSecond) 120Mなら120秒。


 -filter_complex "[0:v]yadif[v1]; [v1][0:s]overlay[v2]":複合フィルタ 0番のVideo映像をインターレース処理したものをv1となづけ、v1映像に0番の字幕を重ね合わせて、v2という映像とする。


 -map [v2]:v2を映像として選択。


 -map 0:a:0番のオーディオを音声として選択。


 という感じです。


 字幕情報がない場合は


Stream specifier ':s' in filtergraph description [0:v]yadif[v1]; [v1][0:s]overlay[v2] matches no streams.


 というエラーになります。

 

⧅ffmpegに戻る。