DVD ビデオ作成 その2:DVD メニューを作るでは DVD メニューを作りましたが、使用した dvdauthor が新しくなって最新版は 0.6.8 (前回は 0.5.4) になりました。0.6 では今までコマンドラインでボタン位置などを指定してたのを XML ファイルから読み込むようになり自由度が上がった上、今まで表現できなかったか、できても非常に難しかったことが簡単にできるようになっています。私の見付けた限り、以下のような変更があります。(Change Log を読めばいいんだけどあまり読んでない)
1. 構成とデザインを考える
2. GIMP でメニュー画面・ボタンの作成
3. メニューの MPEG ファイル作成
4. オーサリング
5. DVD イメージ作成、書き込み
チャプターメニューのデザインは以下のようなものを作ります。

左からページ1、2、3 です。
選択されたチャプターが半透明にハイライトされます。下のナビゲーションボタンも選択されるとハイライトされます。
(画像の中の点線は、編集時にボタン等を配置しすくするためのガイドです)
一番右が Button_mask レイヤーです。背景を描いた後 "レイヤー、チャネル & パス" で新規レイヤーを作り、"レイヤー塗りつぶし種" で "透明" を選びましょう。そして、ボタンの範囲で長方形を書きましょう。dvdauthor 0.5 と違ってここで付けた色が完成 DVD にも反映されます。
そして、ハイライトを半透明にします。"レイヤー、チャネル & パス" で "Button_mask" レイヤーを選び、"不透明度" を変更し半透明にします。私は 60% ぐらいが好きです。
そして、各レイヤーを保存します。レイヤーの設定で該当レイヤーのみ表示し背景レイヤーは JPEG (vmgm.jpg) で、Button Mask レイヤーは PNG (vmgm_mask.png) で保存します。Button Mask レイヤーは dvdauthor 0.5 と違いインデックスカラーにはしません (RGB のまま)。インデックスカラーにすると不透明度情報が消えてしまいます。
次に、チャプターメニューも GIMP で背景とボタンのマスクのレイヤーを作ります。やり方はいろいろでしょうが、ボタンなどのパーツを共有するためここでは複数ページを一つの GIMP ファイルに入れています。
同様にページ2, ページ3も背景とボタンマスク画像を保存します。
ページ1だったら背景は vtsm1.jpg, ボタンマスクは vtsm1_mask.png の様にファイル名を付けます。
参考にトップメニューとチャプターメニューの GIMP ファイルを置いておきます。
あらかじめメニューの BGM となる MP2 ファイルを用意しておきます (audio.mp2)。(無音でも可能) 手順は以下の通りです。
<subpictures>
<stream>
<spu start="00:00:00.00" end="00:00:00.00"
highlight="vmgm_mask.png"
force="yes"
autooutline="infer" autoorder="columns">
</spu>
</stream>
</subpictures>
ボタンのイメージの記述は <spu> タグでします。次に JPEG ファイルから MPEG エレメンタリーストリームを作り、続いてそのファイルに音声とボタンのハイライトを合体させます。
$ jpeg2yuv -n 1 -I t -L 1 -f 29.97 -j vmgm.jpg | mpeg2enc -n n -f 8 -o vtsm1.m2v $ mplex -f 8 -o /dev/stdout vmgm.m2v audio.mp2 | spumux vmgm_sub.xml > vmgm.mpgオプションの詳細については各コマンドの man page を参照してください。 二行目のコマンドを実行したところで以下のメッセージを確認し、ボタンのサブタイトルが正しく追加されたことを確認しましょう。
INFO: PNG had 2 colors INFO: Constructing blank img INFO: Constructing blank sel INFO: Autodetect 0 = 125x225-485x286 INFO: Autodetect 1 = 125x307-485x367 INFO: Pickbuttongroups, success with 1 groups, useimg=1 (この間にたくさんのメッセージ) INFO: 1 subtitles added, 0 subtitles skipped, stream: 32, offset: 0.18"1 subtitles added" とあれば OK です。上記では Autodetect 0 = 125x225-485x286 と Autodetect 1 = 125x307-485x367 で二つボタンが追加されたことが分かります。気を付けなければならないのは、Autodetect 0 の方にボタンのラベル名 1 が付けられると言うことです。(ひとつずれている)
WARN: no subtitles added
チャプターメニューの各ページについても同様に設定ファイルを記述し、MPEG ファイルを作成してください。設定ファイルは、highlight の PNG ファイルを変更するだけです。
これにより、トップメニューの vmgm.mpg、チャプターメニューの各ページ vtsm1.mpg、vtsm2.mpg、vtsm3.mpg が作成された事とします。
もし、spumux コマンドでボタンが追加されない場合は色々な理由が考えられますが、設定ファイルでボタン位置を手動で追加すると解決する場合があります。追加の方法は man spumux で見てみてください。また、PNG 画像に意図しない位置にゴミがないか確認しましょう。また、PNG 画像の色数を必要最低限に抑えるといいかも知れません。ボタンの周辺でアンチエイリアスがかかっているとまずいかも知れません。この場合は一旦 PNG を使っている最低限の色数でインデックス画像にし、RGB に戻して再度不透明度を設定しましょう。
chapter1.mpg chapter2.mpg chapter3.mpg chapter4.mpg chapter5.mpg chapter6.mpg手順は以下の通りです。
<dvdauthor dest="dvd" jumppad="1" >
<titleset>
<menus>
<video format="ntsc" aspect="4:3"
resolution="720x480" />
<audio format="mp2" channels="1"
quant="24bps"
lang="en" />
<pgc entry="root"
pause="inf">
<vob file="vtsm1.mpg"
pause="inf" />
<button name="1"> jump titleset 1 title 1 chapter 1; </button>
<button name="2"> jump titleset 1 title 1 chapter 2; </button>
<button name="3"> jump vmgm menu 1; </button>
<button name="4"> jump titleset 1 menu 2; </button>
</pgc>
<pgc
pause="inf">
<vob file="vtsm2.mpg"
pause="inf" />
<button name="1"> jump titleset 1 title 1 chapter 3; </button>
<button name="2"> jump titleset 1 title 1 chapter 4; </button>
<button name="3"> jump titleset 1 menu 1; </button>
<button name="4"> jump vmgm menu 1; </button>
<button name="5"> jump titleset 1 menu 3; </button>
</pgc>
<pgc
pause="inf">
<vob file="vtsm3.mpg"
pause="inf" />
<button name="1"> jump titleset 1 title 1 chapter 5; </button>
<button name="2"> jump titleset 1 title 1 chapter 6; </button>
<button name="3"> jump titleset 1 menu 2; </button>
<button name="4"> jump vmgm menu 1; </button>
</pgc>
</menus>
<titles>
<video format="ntsc" aspect="4:3"
resolution="720x480" />
<audio format="mp2" channels="1"
quant="24bps"
lang="en" />
<pgc>
<vob file="chapter1.mpg" />
<vob file="chapter2.mpg" />
<vob file="chapter3.mpg" />
<vob file="chapter4.mpg" />
<vob file="chapter5.mpg" />
<vob file="chapter6.mpg" />
<post> call vmgm menu 1; </post>
</pgc>
</titles>
</titleset>
</dvdauthor>
以下にタグの解説をします (dvdauthor の man page からの抜粋)。
<dvdauthor dest="dvd" jumppad="1" >
<vmgm>
<menus>
<video format="ntsc" aspect="4:3"
resolution="720x480" />
<audio format="mp2" channels="1"
quant="24bps"
lang="en" />
<pgc entry="title">
<vob file="vmgm.mpg"
pause="inf" />
<button name="1"> jump title 1 chapter 1; </button>
<button name="2"> jump titleset 1 menu 1; </button>
</pgc>
</menus>
</vmgm>
</dvdauthor>
全て設定ファイルを記述したら、以下のように dvdauthor コマンドを実行します。
$ dvdauthor -x vtsm_author.xml $ dvdauthor -x vmgm_author.xml-x で設定ファイルを指定します。
$ mkisofs -dvd-video -o dvd.img dvd/ $ dvdrecord -v dev=1,0,0 speed=4 -dao dvd.imgここで作った dvd ディレクトリを tar, gz でまとめたものを置いておきます。イメージファイルを置いておきます。dvd.tar.gz (37MB)。展開して、XINE で読み込めば実際にプレーできます。/tmp/ に展開したとすると /tmp/dvd/ というディレクトリができるので以下のようにします。
$ xine dvd:/tmp/dvd/以上で終了です。