BBRK 10-03-26
[分類] ビデコ(笑)
# ほっとんどの人には興味ないネタだと思いますので、スルーしちゃってください(苦笑)
BBRK 08-10-31「TD3D & PgcEdit で DVDオーサリング」の続編です。
BBRK には書いていませんでしたが、BDオーサリングのために「TMPGEnc Authoring Works 4」(略称 TAW4)を買ったんですな。
TD3D がなかなか使いやすかったので、その後継として出たソフトなので、まぁハズレはないだろうということで(笑)
で、BDオーサリング以外にも進化している部分があって、この記事に関連することだと、「DVD再生中にメニューボタンを押したときに対応するチャプターの位置にハイライトを表示してメニューが立ち上がる機能」が追加になっていました。
DVDレコーダ等では普通に実現できている機能なのですが、なぜか TD3D にはこのようにオーサリングする機能がありませんでした。メニューボタンを押すと、常に 1枚目のメニュー画面のデフォルトの位置(例えば全トラック再生など)にハイライト(カーソル)が表示されてメニューが立ち上がります。
さっそく、この機能を使って(メニュー作成時に機能の ON/OFF が選択できます)DVD-VIDEO を制作してみたのですが、これがいまいちなんですよねぇ…(苦笑)
例えば、ディスクにタイトルは 1つだけ存在し、その中をいくつかのチャプターで切ってあって、トラックメニューがあって、ディスク挿入時と全再生後に自動的にメニューが立ち上がるように作った場合。
(1) ディスクを入れると チャプター1 にハイライトが表示されてメニューが出る
(2) 最後まで再生が終わると最終チャプターにハイライトが表示されてメニューが出る
(1)、(2)どちらのケースも、こちらの希望はチャプター上ではなくて、全再生の PLAYボタン上にハイライトが表示されて欲しいんですよねぇ。
そんなわけで、またしても PgcEdit を使って細工しちゃいました。
TAW4 の吐き出すコードですが、TD3D に比べると複雑になってます。
まともに解析していませんが、字幕処理関係が強化されているようです。
私が作る DVD には字幕ストリームも入っていなけりゃ音声ストリームの切り替えもないので、ほとんどは不要なコードだと思いますが(苦笑)
でもって修正ですが、ソフトウェアが機械的に出力しているコードなので、明らかに不要な部分もあり、それを残しつつ、所望のことをしようとすると効率が悪いので、明らかに不要な部分をカットしてから修正しました。
■RootM の修正
変更前
VTSM 1 , LU 1 (--) , 1 (dummy) RootM - チャプター: なし, プログラム: 0, セル: 0 ********** pre commands: 1 Set gprm(9) =(mov) 0 2 Set gprm(9) |=(or) 32768 3 Set gprm(1) =(mov) sprm(1:音声ストリーム ナンバー) 4 Set gprm(4) =(mov) gprm(9) 5 Set gprm(4) /=(div) 256 6 Set gprm(4) &=(and) 127 7 if ( gprm(9) & 32768 ) then { Goto line 9 } 8 Goto line 11 9 if ( gprm(15) == 0 ) then { Goto line 11 } 10 if ( gprm(15) != 32768 ) then { Set gprm(1) =(mov) gprm(4) } 11 Set gprm(0) =(mov) gprm(12) 12 Set gprm(0) /=(div) 256 13 Set gprm(0) &=(and) 127 14 if ( gprm(12) & 32768 ) then { Set gprm(1) =(mov) gprm(0) } 15 Set gprm(1) &=(and) 15 16 if ( gprm(9) & 32768 ) then { Goto line 18 } 17 Goto line 21 18 Set gprm(0) =(mov) gprm(1) 19 if ( gprm(0) < 0 ) then { Set gprm(1) =(mov) gprm(4) } 20 if ( gprm(0) > 0 ) then { Set gprm(1) =(mov) gprm(4) } 21 Set gprm(2) =(mov) sprm(2:字幕ストリーム ナンバー) 22 Set gprm(4) =(mov) gprm(9) 23 Set gprm(4) &=(and) 127 24 if ( gprm(9) & 128 ) then { Goto line 26 } 25 Goto line 28 26 if ( gprm(15) == 0 ) then { Goto line 28 } 27 if ( gprm(15) != 32768 ) then { Set gprm(2) =(mov) gprm(4) } 28 Set gprm(0) =(mov) gprm(12) 29 Set gprm(0) &=(and) 127 30 if ( gprm(12) & 128 ) then { Set gprm(2) =(mov) gprm(0) } 31 Set gprm(2) &=(and) 127 32 if ( gprm(9) & 128 ) then { Goto line 34 } 33 Goto line 38 34 Set gprm(0) =(mov) gprm(2) 35 Set gprm(0) &=(and) 63 36 if ( gprm(0) < 0 ) then { Set gprm(2) =(mov) gprm(4) } 37 if ( gprm(0) > 65535 ) then { Set gprm(2) =(mov) gprm(4) } 38 (SetSTN) Set Audio stream = gprm(1) ; Set Sub-picture stream = gprm(2) 39 Set gprm(12) =(mov) 0 40 Set gprm(15) =(mov) 32768 41 Set gprm(10) =(mov) sprm(7:チャプターまたはプログラム ナンバー) 42 Set gprm(10) &=(and) 1023 43 Set gprm(0) =(mov) sprm(4:ボリューム内のタイトル ナンバー) 44 Set gprm(0) &=(and) 127 45 if ( gprm(0) < 1 ) then { Set gprm(10) =(mov) 0 } 46 Set gprm(2) =(mov) sprm(1:音声ストリーム ナンバー) 47 Set gprm(2) &=(and) 15 48 Set gprm(2) +=(add) 1 49 if ( gprm(2) != 1 ) then { Goto line 51 } 50 Set gprm(11) =(mov) 20480 ; LinkPGCN PGC 4 51 Set gprm(11) =(mov) 20480 ; LinkPGCN PGC 4 ********** post commands: ********** cell commands: |
41〜50行は不要なのでカット。
39〜40行は gprm変数の値をジャンプ先で読んでいるので、ちょっと残しておきました。
gprm変数の 0〜4 はワークとして使用しているようです。ジャンプ先まで値を保持しておく必要はなさそうなのでカット。
gprm変数の内容は次の通り。
gprm(5) : 表示させるべきチャプターメニューページ番号-1
gprm(6) : 再生後のメニュー呼び出しかどうか。0:No、1:Yes
gprm(7) : RootMに来たときのチャプター値を保持
gprm(11) : ハイライトボタン情報
gprm変数 5〜8 は、初期化しただけで使用していなかったので、今回の修正では上記のように使いました。
gprm11 には「ボタン番号x1024」の値が入ります。
変更後
VTSM 1 , LU 1 (--) , 1 (dummy) RootM - チャプター: なし, プログラム: 0, セル: 0 ********** pre commands: 1 Set gprm(9) =(mov) 0 2 Set gprm(9) |=(or) 32768 3 Set gprm(1) =(mov) sprm(1:音声ストリーム ナンバー) 4 Set gprm(4) =(mov) gprm(9) 5 Set gprm(4) /=(div) 256 6 Set gprm(4) &=(and) 127 7 if ( gprm(9) & 32768 ) then { Goto line 9 } 8 Goto line 11 9 if ( gprm(15) == 0 ) then { Goto line 11 } 10 if ( gprm(15) != 32768 ) then { Set gprm(1) =(mov) gprm(4) } 11 Set gprm(0) =(mov) gprm(12) 12 Set gprm(0) /=(div) 256 13 Set gprm(0) &=(and) 127 14 if ( gprm(12) & 32768 ) then { Set gprm(1) =(mov) gprm(0) } 15 Set gprm(1) &=(and) 15 16 if ( gprm(9) & 32768 ) then { Goto line 18 } 17 Goto line 21 18 Set gprm(0) =(mov) gprm(1) 19 if ( gprm(0) < 0 ) then { Set gprm(1) =(mov) gprm(4) } 20 if ( gprm(0) > 0 ) then { Set gprm(1) =(mov) gprm(4) } 21 Set gprm(2) =(mov) sprm(2:字幕ストリーム ナンバー) 22 Set gprm(4) =(mov) gprm(9) 23 Set gprm(4) &=(and) 127 24 if ( gprm(9) & 128 ) then { Goto line 26 } 25 Goto line 28 26 if ( gprm(15) == 0 ) then { Goto line 28 } 27 if ( gprm(15) != 32768 ) then { Set gprm(2) =(mov) gprm(4) } 28 Set gprm(0) =(mov) gprm(12) 29 Set gprm(0) &=(and) 127 30 if ( gprm(12) & 128 ) then { Set gprm(2) =(mov) gprm(0) } 31 Set gprm(2) &=(and) 127 32 if ( gprm(9) & 128 ) then { Goto line 34 } 33 Goto line 38 34 Set gprm(0) =(mov) gprm(2) 35 Set gprm(0) &=(and) 63 36 if ( gprm(0) < 0 ) then { Set gprm(2) =(mov) gprm(4) } 37 if ( gprm(0) > 65535 ) then { Set gprm(2) =(mov) gprm(4) } 38 (SetSTN) Set Audio stream = gprm(1) ; Set Sub-picture stream = gprm(2) 39 Set gprm(12) =(mov) 0 40 Set gprm(15) =(mov) 32768 41 if ( gprm(6) != 0 ) then { Goto line 43 } 42 Set gprm(11) =(mov) 20480 ; LinkPGCN PGC 4 43 Set gprm(7) =(mov) sprm(7:チャプターまたはプログラム ナンバー) 44 Set gprm(5) =(mov) gprm(7) 45 Set gprm(5) -=(sub) 1 46 Set gprm(5) /=(div) 18 47 Set gprm(11) =(mov) gprm(7) 48 Set gprm(11) -=(sub) 1 49 Set gprm(11) %=(mod) 18 50 Set gprm(11) +=(add) 1 51 Set gprm(11) *=(mul) 1024 52 if ( gprm(5) == 1 ) then { LinkPGCN PGC 26 } 53 if ( gprm(5) == 2 ) then { LinkPGCN PGC 47 } 54 LinkPGCN PGC 4 ********** post commands: ********** cell commands: |
■TTN の修正
変更前
VTST 1 , 1 TTN 1 (1:30:40) Title 1 - チャプター: 50, プログラム: 50, セル: 51 ********** pre commands: 1 Set gprm(9) =(mov) 0 2 Set gprm(9) |=(or) 32768 3 Set gprm(1) =(mov) sprm(1:音声ストリーム ナンバー) 4 Set gprm(4) =(mov) gprm(9) 5 Set gprm(4) /=(div) 256 6 Set gprm(4) &=(and) 127 7 if ( gprm(9) & 32768 ) then { Goto line 9 } 8 Goto line 11 9 if ( gprm(15) == 0 ) then { Goto line 11 } 10 if ( gprm(15) != 32768 ) then { Set gprm(1) =(mov) gprm(4) } 11 Set gprm(0) =(mov) gprm(12) 12 Set gprm(0) /=(div) 256 13 Set gprm(0) &=(and) 127 14 if ( gprm(12) & 32768 ) then { Set gprm(1) =(mov) gprm(0) } 15 Set gprm(1) &=(and) 15 16 if ( gprm(9) & 32768 ) then { Goto line 18 } 17 Goto line 21 18 Set gprm(0) =(mov) gprm(1) 19 if ( gprm(0) < 0 ) then { Set gprm(1) =(mov) gprm(4) } 20 if ( gprm(0) > 0 ) then { Set gprm(1) =(mov) gprm(4) } 21 Set gprm(2) =(mov) sprm(2:字幕ストリーム ナンバー) 22 Set gprm(4) =(mov) gprm(9) 23 Set gprm(4) &=(and) 127 24 if ( gprm(9) & 128 ) then { Goto line 26 } 25 Goto line 28 26 if ( gprm(15) == 0 ) then { Goto line 28 } 27 if ( gprm(15) != 32768 ) then { Set gprm(2) =(mov) gprm(4) } 28 Set gprm(0) =(mov) gprm(12) 29 Set gprm(0) &=(and) 127 30 if ( gprm(12) & 128 ) then { Set gprm(2) =(mov) gprm(0) } 31 Set gprm(2) &=(and) 127 32 if ( gprm(9) & 128 ) then { Goto line 34 } 33 Goto line 38 34 Set gprm(0) =(mov) gprm(2) 35 Set gprm(0) &=(and) 63 36 if ( gprm(0) < 0 ) then { Set gprm(2) =(mov) gprm(4) } 37 if ( gprm(0) > 65535 ) then { Set gprm(2) =(mov) gprm(4) } 38 (SetSTN) Set Audio stream = gprm(1) ; Set Sub-picture stream = gprm(2) 39 Set gprm(12) =(mov) 0 40 Set gprm(15) =(mov) 32768 41 Set gprm(10) =(mov) sprm(7:チャプターまたはプログラム ナンバー) 42 Set gprm(10) &=(and) 1023 43 Set gprm(0) =(mov) sprm(4:ボリューム内のタイトル ナンバー) 44 Set gprm(0) &=(and) 127 45 if ( gprm(0) < 1 ) then { Set gprm(10) =(mov) 0 } ********** post commands: 1 if ( gprm(14) & gprm(14) ) then { (CallSS) Call the VMGM PGC 4, resume cell 1 } 2 Set gprm(14) =(mov) 0 3 Set gprm(13) =(mov) 0 4 Set gprm(12) =(mov) 0 5 Set gprm(11) =(mov) 0 6 (CallSS) Call the VTSM Root menu of the current VTS, resume cell 1 ********** cell commands: |
変更後
VTST 1 , 1 TTN 1 (1:30:40) Title 1 - チャプター: 50, プログラム: 50, セル: 51 ********** pre commands: 1 Set gprm(6) =(mov) 1 2 Set gprm(9) =(mov) 0 3 Set gprm(9) |=(or) 32768 4 Set gprm(1) =(mov) sprm(1:音声ストリーム ナンバー) 5 Set gprm(4) =(mov) gprm(9) 6 Set gprm(4) /=(div) 256 7 Set gprm(4) &=(and) 127 8 if ( gprm(9) & 32768 ) then { Goto line 10 } 9 Goto line 12 10 if ( gprm(15) == 0 ) then { Goto line 12 } 11 if ( gprm(15) != 32768 ) then { Set gprm(1) =(mov) gprm(4) } 12 Set gprm(0) =(mov) gprm(12) 13 Set gprm(0) /=(div) 256 14 Set gprm(0) &=(and) 127 15 if ( gprm(12) & 32768 ) then { Set gprm(1) =(mov) gprm(0) } 16 Set gprm(1) &=(and) 15 17 if ( gprm(9) & 32768 ) then { Goto line 19 } 18 Goto line 22 19 Set gprm(0) =(mov) gprm(1) 20 if ( gprm(0) < 0 ) then { Set gprm(1) =(mov) gprm(4) } 21 if ( gprm(0) > 0 ) then { Set gprm(1) =(mov) gprm(4) } 22 Set gprm(2) =(mov) sprm(2:字幕ストリーム ナンバー) 23 Set gprm(4) =(mov) gprm(9) 24 Set gprm(4) &=(and) 127 25 if ( gprm(9) & 128 ) then { Goto line 27 } 26 Goto line 29 27 if ( gprm(15) == 0 ) then { Goto line 29 } 28 if ( gprm(15) != 32768 ) then { Set gprm(2) =(mov) gprm(4) } 29 Set gprm(0) =(mov) gprm(12) 30 Set gprm(0) &=(and) 127 31 if ( gprm(12) & 128 ) then { Set gprm(2) =(mov) gprm(0) } 32 Set gprm(2) &=(and) 127 33 if ( gprm(9) & 128 ) then { Goto line 35 } 34 Goto line 39 35 Set gprm(0) =(mov) gprm(2) 36 Set gprm(0) &=(and) 63 37 if ( gprm(0) < 0 ) then { Set gprm(2) =(mov) gprm(4) } 38 if ( gprm(0) > 65535 ) then { Set gprm(2) =(mov) gprm(4) } 39 (SetSTN) Set Audio stream = gprm(1) ; Set Sub-picture stream = gprm(2) 40 Set gprm(12) =(mov) 0 41 Set gprm(15) =(mov) 32768 42 Set gprm(10) =(mov) sprm(7:チャプターまたはプログラム ナンバー) 43 Set gprm(10) &=(and) 1023 44 Set gprm(0) =(mov) sprm(4:ボリューム内のタイトル ナンバー) 45 Set gprm(0) &=(and) 127 46 if ( gprm(0) < 1 ) then { Set gprm(10) =(mov) 0 } ********** post commands: 1 Set gprm(6) =(mov) 0 2 if ( gprm(14) & gprm(14) ) then { (CallSS) Call the VMGM PGC 4, resume cell 1 } 3 Set gprm(14) =(mov) 0 4 Set gprm(13) =(mov) 0 5 Set gprm(12) =(mov) 0 6 Set gprm(11) =(mov) 0 7 (CallSS) Call the VTSM Root menu of the current VTS, resume cell 1 ********** cell commands: |
修正は二ヶ所、pre commands の 1行目と、post commands の 1行目を追加です。
post commands の追加は、映像を最後まで再生後メニューが自動表示されるときに、1ページ目の「ALL PLAY」のボタンにハイライトを表示させるためです。
# たいしたこと書いてないんだけど、こんなに長い記事になっちゃうんだよなぁ(苦笑)