DVDShrink.info Chetwood's DVD Snippets guides downloads  
back to previous page next page

Importing selfmade menus to episode DVDs done with DVD Shrink

This guide covers three steps:

  1. creating assets to use for a dummy menu in DVD-lab Pro
  2. creating a dummy menu in DVD-lab Pro
  3. using PgcEdit to import the menu

1. Creating assets to use for a dummy menu in DVD-lab Pro

There are several ways to do this and so I'm only explaining a straightforward way doing it with DVD Shrink. However, first you gotta make up your mind concerning the structure of your menu. I for one am perfectly happy with a simple menu that only allows me to jump to each ep since I can switch languages and jump chapters during playback with my remote more conveniently. If you do fancy language and chapter selection menus you must generate more complex dummy assets instead. I might cover this in a future guide, in this one I'm dealing only with a simple menu.

Please note that the dummy assets used for our menu do not necessarily have to be composed of the same streams as the episodes themselves that one has ripped with DVD Shrink! This is because all the info on the composition of said streams is saved to the corresponding vobs during the ripping process by DVD Shrink and these vobs are left completely untouched when importing your DVD-lab dummy menu in PgcEdit. So if you rip a 4 episode DVD in DVD Shrink with each ep running approx. 43 minutes consisting of 1 video stream and 3 audio as well as subtitle streams you can use a single dummy asset of 1 frame length that has no audio or subtitle streams!

Don't get confused by the 4 different still images I'm using instead in my step-by-step guide below. I did so to be sure that the different buttons linked to the corresponding eps. However, you can verify this by taking a look at the title number display of your favourite software DVD player just as easily so you don't need to create as many assets but can use a single video file. Here's what to do to create a suitable asset consisting of 1 video and 1 audio stream only with DVD Shrink:

  1. re-author a single titleset from whatever DVD you happen to have at hand and cut it to 1 min with 'Set Start/End Frames' in the DVD compilation window
  2. select 1 audio and no subtitle stream in the compression settings tab
  3. backup to iso and generate an mds-file for it with DVD Decrypter
  4. mount this mds-file in Alcohol 120% or Daemon Tools
  5. demux audio and video stream using DVD Decrypter in ifo mode (enable Stream Processing and check 'demux')
  6. import your dummy assets in DVD-lab.

2. Creating a dummy menu in DVD-lab Pro

I've used Wink to do a step-by-step guide (686 KB) which will open in a new browser window when you click the link. You need to have Shockwave Flash installed in your browser to watch it.

3. Using PgcEdit to import the menu

The following code snippets come courtesy of r0lZ (creator of PgcEdit) who posted them as a reply to a thread I started over at Doom9. Before going into details on this, here's a summary of what kinda behaviour I'm aiming at:

  • as usual you can use the next/previous buttons on the remote to jump between chapters
  • selecting 'previous' during the first chapter of an ep will return you to the first (!) chapter of the previous ep thus effectively allowing you to jump back and forth between eps
  • when an ep is finished we'll return to the menu where the next ep's button is highlighted
  • depressing the 'menu' button on the remote returns to the menu also with next ep's button being highlighted
  • depressing the 'title' button on the remote jumps to the next ep (exept when used during the last ep, pressing title here will return to the menu).

I'm using this last option because most of my friends do own a cheap no-name (or do you say 'brandless'?) DVD player like Redstar 230G most of which use a Mediatek chipset which do miss some digits on their display. So when you playback a DVD all you see is:
12 00:00
|  |  |
|  |  |- seconds
|  |
|  |---- minutes
|   
|------- chapters
as opposed to my player which displays:
01 12 0:00:00
|  |  | |  |
|  |  | |  |- seconds
|  |  | |  
|  |  | |---- minutes  
|  |  |   
|  |  |------ hours
|  |  
|  | -------- chapters
| 
|------------ title sets
So if you jump between titlesets the display won't help you to see which titleset (read episode) you're currently watching. And since the title button function 'loops' through the eps, counting those episode jumps you already did gets a bit difficult especially as sometimes there's a lot of stuff happening on such an evening with friends so it's easy to forget which ep you stopped at last time as well as which position on the DVD you are at.

And since episode DVDs tend to start with summaries of previous eps they quite often start with the same scenes so it can take a while to realize which ep it is you're watching, which sometimes happens too late so you see some scenes of an ep you hadn't even watched before. Thus I'm in favour of not looping throught the titles, if you however do, you can skip adding this command later in the process. In case you haven't been working with PgcEdit so far you can check out my other step-by-step guide (329 KB) first in which I'm showing all the steps explained below. Once you've got yourself familiar with editing ifos in PgcEdit you can read on and simply copy & paste the code you need.

Ok, here we go: open up your episode DVD re-authored with DVD Shrink in PgcEdit, it will automatically do a backup of your ifos so you can switch back easily in case you mess something up. Now go to Macros | DVD Shrink Remote Buttons and select all but first and last checkboxes (of course you select according to you preferences however, to get the results I'm aiming at with this guide you should at least select "Always allow the 'Title Menu' button to skip to the next title").

This will create a VMGM dummy TitleMenu right under VMG, First-Play PGC. Now right-click on it and select 'Import Menu' chosing your dummy menu you've created in DVD-lab Pro, it will appear below 'VMGM / LU 1 (en) / 1'. Answer 'yes' to copy the menu VOB file as well and reload the DVD. Now this is what you should have:

PgcEdit

Now we gonna change some values, to do so simply do a double-click on a command. You can then either select the command from the menu bar (Alphabetically, numerically and so on) or simply copy and paste from the code example below. Simply mark the hex bytes between (but not including) the [ and ] brackets and do a left click in the byte line in PgcEdit and press CTRL+V to paste the code.

  1. We need to recreate a Title menu to be able to call the next title with the Title Menu button of the remote: Right-click on any PGC in the VMGM domain, and select "New PGC". A new PGC is created. Right click on the new PGC (PGC 3), and select the "Set Menu Type" function, and choose "Title menu". Then, double-click on the pre command of this new PGC, and change it to

    [30 06 00 00 00 00 00 00] 1 (JumpSS) Jump to First Play PGC


  2. We need also the Root menus for all titles: Right click on the Title 1 entry, and select "New Menu". Then, change the default command to

    [30 06 00 02 00 C0 00 00] 1 (JumpSS) Jump to VMGM PGC 2

    Repeat this point for Titles 2, 3 and 4. The root menus are now calling the PGC 2 of the VMGM menu, which is the real menu, with the buttons. So, calling the Root Menu when playing an episode will actually display your menu.


  3. We need to add the commands to automatically select the button that jumps to the next ep: Select Title 1, and add a pre-command 1. Change the NOP to

    [71 00 00 0B 00 05 00 00] 1 Set gprm(11) =(mov) 5 ".."

    Repeat this step for titles 2, 3 and 4, but with the values 7, 9 and 11 respectively:

    [71 00 00 0B 00 07 00 00] 1 Set gprm(11) =(mov) 7 ".."
    [71 00 00 0B 00 09 00 00] 1 Set gprm(11) =(mov) 9 ".."
    [71 00 00 0B 00 0B 00 00] 1 Set gprm(11) =(mov) 11 ".."


  4. OPTIONAL: If you want the menu to be displayed upon DVD insert, then go to the First-Play PGC, and change the "Jump to Title 1" command to

    [30 06 00 02 00 C0 00 00] 4 (JumpSS) Jump to VMGM PGC 2


  5. OPTIONAL: If you want to display the menu at the end of each episode (instead of playing the next episode automatically), then select Title 1 and change the last post-command to

    [30 08 00 02 01 C0 00 00] 2 (CallSS) Call the VMGM PGC 2, resume cell 1

    Repeat this step for Title 2, 3 and 4. However, if you prefer to exit at the end of the last title, leave the 'Exit' command untouched.


  6. OPTIONAL: In case all your episodes do consist of the same streams (e.g. audio/subtitle 0 = english, audio/subtitle 1 = german) you can set the default audio and subtitle language once so you don't have to rely on your standalone's default settings. The default streams will be played back throughout all episodes no matter which one you start with and when switched during playback will stay at the newly selected stream throughout all eps.

    To achieve this behaviour we need to do two things: first, add a dummy menu by right-clicking on the RootMenu in VTSM 1 and adding a new dummy PGC which will be set to angle menu (set it to another type if you already do have an angle menu). This menu will set the desired audio and subtitle stream and then return to the First-Play PGC. Since we are adding several lines at once I'll use a different notation for the commands to take advantage of PgcEdit's multi-line paste feature:

    {51 00 00 81 00 00 00 00} {51 00 00 00 81 00 00 00} {30 06 00 00 00 00 00 00}


    Copy the whole line above including brackets, mark the first line in your new angle menu and press paste replace (CTRL-V), the pasted code will come out like this:

    [51 00 00 81 00 00 00 00] 1 (SetSTN) Set Audio stream = 1
    [51 00 00 00 81 00 00 00] 2 (SetSTN) Set Sub-picture stream = 1, off
    [30 06 00 00 00 00 00 00] 3 (JumpSS) Jump to First Play PGC


    By double-clicking on any of the first lines you can set the streams according to your liking.

    Now before we can add 4 new lines to the First-Play PGC we have to use Info > Find Unused GPRMs in PgcEdit to check for free GPRMs, we should have plenty since we're dealing with a re-authored DVD. Copy the line below (again including the brackets)

    {00 A1 00 01 00 01 00 04} {71 00 00 01 00 01 00 00} {30 06 00 01 01 86 00 00} {00 00 00 00 00 00 00 00}


    mark line 1 of your First-Play PGC and paste before (Shift-V), the pasted code will come out like this:

    [00 A1 00 01 00 01 00 04] 1 if ( gprm(1) == 1 ) then { Goto line 4 }
    [71 00 00 01 00 01 00 00] 2 Set gprm(1) =(mov) 1
    [30 06 00 01 01 86 00 00] 3 (JumpSS) Jump to VTSM 1, Angle menu (TTN 1)
    [00 00 00 00 00 00 00 00] 4 NOP


    Now all you gotta do is change the GPRM in lines 1 and 2 to an unused one and we're done. Upon insertion of the DVD the angle menu will be called once to set the default streams which will be used on all episodes except of course you switch using your remote.

    After having made all these changes your code should look like you see below. The following example includes all optional settings so it might differ from what you see on your system; PgcEdit will automatically adjust Goto-commands when pasting or deleting pre commands:

    VMG (VIDEO_TS.IFO)
    ------------------
    
      VMG / First-Play PGC
            ********** pre commands:
    
            [00 A1 00 01 00 01 00 04]   1  if ( gprm(1) == 1 ) then { Goto line 4 }
            [71 00 00 01 00 01 00 00]   2  Set gprm(1) =(mov) 1
            [30 06 00 01 01 86 00 00]   3  (JumpSS) Jump to VTSM 1, Angle menu (TTN 1)
            [00 00 00 00 00 00 00 00]   4  NOP
            [00 A1 00 00 00 01 00 05]   5  if ( gprm(0) == 1 ".." ) then { Goto line 9 } 
            [00 A1 00 00 00 02 00 06]   6  if ( gprm(0) == 2 ".." ) then { Goto line 10 } 
            [00 A1 00 00 00 03 00 07]   7  if ( gprm(0) == 3 ".." ) then { Goto line 11 } 
            [30 06 00 02 00 C0 00 00]   8  (JumpSS) Jump to VMGM PGC 2
            [30 02 00 00 00 02 00 00]   9  (JumpTT) Jump to Title 2 
            [30 02 00 00 00 03 00 00]  10  (JumpTT) Jump to Title 3 
            [30 02 00 00 00 04 00 00]  11  (JumpTT) Jump to Title 4 
            ********** post commands:
            ********** cell commands:
    
    
      VMGM / LU 1 (en):
    
        VMGM / LU 1 (en) / 1  Title
            ********** pre commands:
            [71 00 00 0B 00 00 00 00]   1  Set gprm(11) =(mov) 0 ".." 
            [71 00 00 0D 00 00 00 00]   2  Set gprm(13) =(mov) 0 ".." 
            [30 06 00 02 00 C0 00 00]   3  (JumpSS) Jump to VMGM PGC 2 
            ********** post commands:
            ********** cell commands:
    
    
        VMGM / LU 1 (en) / 2  (0:00)
            ********** pre commands:
            [71 00 00 0C 04 00 00 00]   1  Set gprm(12) =(mov) 1024 ".." 
            [71 A0 0B 0C 08 00 00 05]   2  if ( gprm(11) == 5 ".." ) then { Set gprm(12) =(mov) 2048 ".." }
            [71 A0 0B 0C 0C 00 00 07]   3  if ( gprm(11) == 7 ".." ) then { Set gprm(12) =(mov) 3072 ".." }
            [71 A0 0B 0C 10 00 00 09]   4  if ( gprm(11) == 9 ".." ) then { Set gprm(12) =(mov) 4096 ".." }
            [71 A0 0B 0C 04 00 00 0B]   5  if ( gprm(11) == 11 ".." ) then { Set gprm(12) =(mov) 1024 ".." }
            [71 A0 0B 0C 00 00 00 03]   6  if ( gprm(11) == 3 ".." ) then { Set gprm(12) =(mov) 0 ".." }
            [00 A1 00 0C 00 00 00 09]   7  if ( gprm(12) == 0 ".." ) then { Goto line 9 } 
            [46 00 00 00 00 0C 00 00]   8  (SetHL_BTN) Set Highlighted Button =(mov) gprm(12) 
            [71 00 00 0B 00 02 00 00]   9  Set gprm(11) =(mov) 2 ".." 
            [71 00 00 0F 00 02 00 00]  10  Set gprm(15) =(mov) 2 ".." 
            ********** post commands:
            [71 00 00 0B 00 03 00 00]  12  Set gprm(11) =(mov) 3 ".." 
            [20 04 00 00 00 00 00 02]  13  LinkPGCN PGC 2 
            ********** cell commands:
            ********** menu buttons commands:
            VOB ID 1,  Cell ID 1  (First NAV pack=0)
            1 Group,  Start button=0,  Select button=0,  Action button=0
            button  1: [30 02 00 00 00 01 00 00]  (JumpTT) Jump to Title 1 
            button  2: [30 02 00 00 00 02 00 00]  (JumpTT) Jump to Title 2 
            button  3: [30 02 00 00 00 03 00 00]  (JumpTT) Jump to Title 3 
            button  4: [30 02 00 00 00 04 00 00]  (JumpTT) Jump to Title 4 
    
    
    
        VMGM / LU 1 (en) / 3 (dummy)  (Title) - Chapters: n/a,  Programs: 0,  Cells: 0 
            ********** pre commands:
            [30 06 00 00 00 00 00 00]   1  (JumpSS) Jump to First Play PGC 
            ********** post commands:
            ********** cell commands:
    
    
    VTS 1 (VTS_01_0.IFO)
    --------------------
    
      VTSM 1 / LU 1 (en):
    
        VTSM 1 / LU 1 (en) / 1 (dummy)  Root - Chapters: n/a,  Programs: 0,  Cells: 0 
            ********** pre commands:
            [30 06 00 02 00 C0 00 00]   1  (JumpSS) Jump to VMGM PGC 2 
            ********** post commands:
            ********** cell commands:
    
    
        VTSM 1 , LU 1 (en) , 2  (dummy)  AngleM - Chapters: n/a,  Programs: 0,  Cells: 0 
            ********** pre commands:
            [51 00 00 81 00 00 00 00]   1  (SetSTN) Set Audio stream = 1 
            [51 00 00 00 81 00 00 00]   2  (SetSTN) Set Sub-picture stream = 1, off 
            [30 06 00 00 00 00 00 00]   3  (JumpSS) Jump to First Play PGC 
            ********** post commands:
            ********** cell commands:
    
        VTST 1 / TTN 1  (6:41)  Title 1 - Chapters: 2,  Programs: 2,  Cells: 2 
            ********** pre commands:
            [71 00 00 0B 00 05 00 00]   1  Set gprm(11) =(mov) 5 ".." 
            [71 00 00 00 00 01 00 00]   1  Set gprm(0) =(mov) 1 ".." 
            ********** post commands:
            [71 00 00 00 00 01 00 00]   1  Set gprm(0) =(mov) 1 ".." 
            [30 08 00 02 01 C0 00 00]   2  (CallSS) Call the VMGM PGC 2, resume cell 1
            ********** cell commands:
    
    
    VTS 2 (VTS_02_0.IFO)
    --------------------
    
      VTSM 2 / LU 1 (en):
    
        VTSM 2 / LU 1 (en) / 1 (dummy)  Root - Chapters: n/a,  Programs: 0,  Cells: 0 
            ********** pre commands:
            [30 06 00 02 00 C0 00 00]   1  (JumpSS) Jump to VMGM PGC 2 
            ********** post commands:
            ********** cell commands:
    
      VTST 2 / TTN 1  (6:41)  Title 2 - Chapters: 2,  Programs: 2,  Cells: 2 
            ********** pre commands:
            [71 00 00 0B 00 07 00 00]   1  Set gprm(11) =(mov) 7 ".."
            [71 00 00 00 00 02 00 00]   1  Set gprm(0) =(mov) 2 ".." 
            ********** post commands:
            [71 00 00 00 00 02 00 00]   1  Set gprm(0) =(mov) 2 ".." 
            [30 08 00 02 01 C0 00 00]   2  (CallSS) Call the VMGM PGC 2, resume cell 1
            ********** cell commands:
    
    
    VTS 3 (VTS_03_0.IFO)
    --------------------
    
      VTSM 3 / LU 1 (en):
    
        VTSM 3 / LU 1 (en) / 1 (dummy)  Root - Chapters: n/a,  Programs: 0,  Cells: 0 
            ********** pre commands:
            [30 06 00 02 00 C0 00 00]   1  (JumpSS) Jump to VMGM PGC 2 
            ********** post commands:
            ********** cell commands:
    
      VTST 3 / TTN 1  (8:00)  Title 3 - Chapters: 2,  Programs: 2,  Cells: 3 
            ********** pre commands:
            [71 00 00 0B 00 09 00 00]   1  Set gprm(11) =(mov) 9 ".."
            [71 00 00 00 00 03 00 00]   1  Set gprm(0) =(mov) 3 ".." 
            ********** post commands:
            [71 00 00 00 00 03 00 00]   1  Set gprm(0) =(mov) 3 ".." 
            [30 08 00 02 01 C0 00 00]   2  (CallSS) Call the VMGM PGC 2, resume cell 1
            ********** cell commands:
    
    
    VTS 4 (VTS_04_0.IFO)
    --------------------
    
      VTSM 4 / LU 1 (en):
    
        VTSM 4 / LU 1 (en) / 1 (dummy)  Root - Chapters: n/a,  Programs: 0,  Cells: 0 
            ********** pre commands:
            [30 06 00 02 00 C0 00 00]   1  (JumpSS) Jump to VMGM PGC 2 
            ********** post commands:
            ********** cell commands:
    
    
      VTST 4 / TTN 1  (0:04)  Title 4 - Chapters: 1,  Programs: 1,  Cells: 1 
            ********** pre commands:
            [71 00 00 0B 00 0B 00 00]   1  Set gprm(11) =(mov) 11 ".."
            [71 00 00 00 00 00 00 00]   1  Set gprm(0) =(mov) 0 ".." 
            ********** post commands:
            [30 08 00 00 01 00 00 00]   1  (CallSS) Call the First Play PGC, resume cell 1   ### or Exit!
            ********** cell commands:
    

    You can now save the DVD in PgcEdit and try the new menu with your favourite software DVD player. This should always be done! Sometimes you might forget to add a certain command or paste to the wrong lines or something. Or something unexpected might happen. While the commands used in this guide work fine as tested on several standalones there's one glitch: whenever you use a number key on your remote to jump to a certain chapter instead of using the next button several times to skip to it, the next time you return to the menu the first button instead of the one following the ep you were just watching is highlighted. According to r0lZ this might be caused by the way a standalone handles the GPRM 11 command which is unpredictable. However, since this is only a minor flaw I can live with it.

    In case you messed up your DVD don't worry. Simply delete all ifos, bups and the 'video_ts.vob' from the directory and copy over all files from the 'PgcEdit_backup'-folder.

    Please note that even if your menu works fine on your computer it does not necessarily have to do so on your standalone(s). In some cases depending on those commands you used an on the standalone you're playing it back from it might not work flawlessly. So your best bet is to burn your DVD to a rewritable DVD first and give it a try. Once you've practiced a bit with PgcEdit and tested the results with your standalone you'll get the hang of it what is possible and can stop using rewritables.

    I hope this guide helped a little with that.