Linux ムービー・動画環境

DVD ビデオ作成 その3:DVD メニューを作る dvdauthor-0.6

2004年1月12日

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. 構成とデザインを考える

前回はチャプター選択メニューは1ページのみでしたが、今回は前回の最後で紹介した dvd2.img の様に 1 ページに 2 チャプターのサムネイル表示をして、ページ間を "次へ" や "前へ" ボタンで移動する様な構成にします。また、ボタンがセレクトされた際に半透明にハイライトされる様にします。まとめると以下のようになります。

トップメニューのデザインは以下のようなものを作ってみます。

VMGM
Sample

チャプターメニューのデザインは以下のようなものを作ります。

VTSM Page1 Sample VTSM Page2 Sample VTSM Page3 Sample
左からページ1、2、3 です。
選択されたチャプターが半透明にハイライトされます。下のナビゲーションボタンも選択されるとハイライトされます。

2. GIMP でメニュー画面・ボタンの作成

前回と同じように GIMP で 720x480 (81dpi x 72dpi) の画像を作成します。レイヤー機能を使い、背景 (Background レイヤー) とボタンのマスク (Button_mask レイヤー) で別々のレイヤーを作ります。

レイヤー、チャネル & パス Background レイヤー Button_mask レイヤー

(画像の中の点線は、編集時にボタン等を配置しすくするためのガイドです)
一番右が Button_mask レイヤーです。背景を描いた後 "レイヤー、チャネル & パス" で新規レイヤーを作り、"レイヤー塗りつぶし種" で "透明" を選びましょう。そして、ボタンの範囲で長方形を書きましょう。dvdauthor 0.5 と違ってここで付けた色が完成 DVD にも反映されます。
そして、ハイライトを半透明にします。"レイヤー、チャネル & パス" で "Button_mask" レイヤーを選び、"不透明度" を変更し半透明にします。私は 60% ぐらいが好きです。

レイヤー、チャネル & パス で不透明度変更 Button_mask レイヤー が不透明になったところ

そして、各レイヤーを保存します。レイヤーの設定で該当レイヤーのみ表示し背景レイヤーは JPEG (vmgm.jpg) で、Button Mask レイヤーは PNG (vmgm_mask.png) で保存します。Button Mask レイヤーは dvdauthor 0.5 と違いインデックスカラーにはしません (RGB のまま)。インデックスカラーにすると不透明度情報が消えてしまいます。

次に、チャプターメニューも GIMP で背景とボタンのマスクのレイヤーを作ります。やり方はいろいろでしょうが、ボタンなどのパーツを共有するためここでは複数ページを一つの GIMP ファイルに入れています。

チャプタメニューの レイヤー、チャネル & パス

そして各ページの背景、ボタンマスクをページに応じたレイヤーを表示してから保存します。たとえば、ページ1は以下のようにします。

レイヤー、チャネル & パス でページ1の背景を表示した ページ1の背景 レイヤー、チャネル & パス でページ1のハイライトを表示した ページ1のハイライト

同様にページ2, ページ3も背景とボタンマスク画像を保存します。
ページ1だったら背景は vtsm1.jpg, ボタンマスクは vtsm1_mask.png の様にファイル名を付けます。 参考にトップメニューとチャプターメニューの GIMP ファイルを置いておきます。

3. メニューの MPEG ファイル作成

次にメニューの MPEG2 ファイルを作成します。

あらかじめメニューの BGM となる MP2 ファイルを用意しておきます (audio.mp2)。(無音でも可能) 手順は以下の通りです。

トップメニューの spumux の設定ファイル (vmgm_sub.xml) は以下のように記述します。
<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> タグでします。
その他いろいろ設定項目がありますが、今回は必要ないので割愛します。spumux の man page を参照願います。(まだ意味が分からないものもあるし)

次に 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 が付けられると言うことです。(ひとつずれている)
次のように表示された場合は、サブタイトルは正しく追加されていません。設定を確認しましょう。Autodetect されていても追加されていない場合もあります。
WARN: no subtitles added

チャプターメニューの各ページについても同様に設定ファイルを記述し、MPEG ファイルを作成してください。設定ファイルは、highlight の PNG ファイルを変更するだけです。

これにより、トップメニューの vmgm.mpg、チャプターメニューの各ページ vtsm1.mpg、vtsm2.mpg、vtsm3.mpg が作成された事とします。

もし、spumux コマンドでボタンが追加されない場合は色々な理由が考えられますが、設定ファイルでボタン位置を手動で追加すると解決する場合があります。追加の方法は man spumux で見てみてください。また、PNG 画像に意図しない位置にゴミがないか確認しましょう。また、PNG 画像の色数を必要最低限に抑えるといいかも知れません。ボタンの周辺でアンチエイリアスがかかっているとまずいかも知れません。この場合は一旦 PNG を使っている最低限の色数でインデックス画像にし、RGB に戻して再度不透明度を設定しましょう。

4. オーサリング

いよいよオーサリングです。ここでは前回と同じチャプター毎に分かれた以下のような DVD 対応の MPEG2 ファイル 6本があるものとします。DVD 用 MPEG2 のエンコード方 法に関しては DVD ビデオ作成を参照してく ださい。

chapter1.mpg
chapter2.mpg
chapter3.mpg
chapter4.mpg
chapter5.mpg
chapter6.mpg
手順は以下の通りです。 まずはタイトルセットの設定ファイル (vtsm_author.xml) です。
<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 からの抜粋)。 次に <post> タグや <button> タグで記述する動作の記述方法を述べます。 ビデオマネージャの設定ファイル (vmgm_author.xml) は以下の通りです。
<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 で設定ファイルを指定します。

5. DVD イメージ作成、書き込み

エラーが表示されずに完了したらあとは前回と同じようにイメージファイルを作成し、書き込むだけです。

$ 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/
以上で終了です。
どうでしょう。かなり面倒でしょう?それでも Linux で行う意味と言うのはあまりないですが (笑) 。しかし要は Linux だってできるんだ、と言うことです。設定ファイルを一度書いちゃえばそれほど面倒ではないですし、GUI を開発しようとしている人もいるみたいです (POLIDORI) 。
次の課題は、 です。今の dvdauthor でできるかは不明。

関連リンク:


戻る | real-baishi に戻る