DVD Structure / Metadata
- Video Manager Group (VMG)
- Video Manager Group Menu (VMGM):
VIDEO_TS.VOB
(optional)
- Video Title Set (VTS)
- Video Title Set Menu (VTSM):
VTS_01_0.VOB
Cosmic Voyage
-
-
- VIDEO_TS.BUP
- VIDEO_TS.IFO
-
- None
-
-
-
- VTS_01_0.BUP
- VTS_01_0.IFO
-
- VTS_01_0.VOB
-
- VTS_01_1.VOB
- VTS_01_2.VOB
-
DVD Specifications
dvdnav
Taken from libdvdnav
documentation:
This is some rather basic information on the organizational structures of a DVD. I collected this info over time from various sources, the most valuable being an article in the German c't computer magazine. Some of the info might be wrong according to the DVD standard (which I do not know), but they are practically proven in libdvdnav. Michael Roitzsch 0. storage structure - sector * smallest addressable unit on disc * data is stored on disc with a Reed-Solomon error correction - file * the storage entity in the underlying filesystem (usually UDF) * on DVD-Video, files are stored consecutively 1. MPEG stream structure - blocks * a file system driver (usually UDF) is needed to map the VOBS-local block numbers to global disc sectors - GOP (group of pictures) * contains multiple sectors * smallest self-contained MPEG unit - VOBU (video object unit) * contains multiple GOPs + audio and SPU blocks + NAV packet * smallest unit in seek and resume operations, always starts with a NAV packet used for menu button highlight and command information and to detect PTS discontinuities - ILVU (interleaved video unit) * contains multiple VOBUs (ususally only one) * blocking multiple VOBUs of multiple interleaved MPEG streams for multiangle features - VOB (video object) * contains multiple ILVUs (usually quite a lot) * each NAV packet has a CellID, so VOBs are divided into stream Cells which do not necessarily correspond to the navigation Cells below - VOBS (video object set) * contains multiple VOBs (addressed by VOB_ID) * a VOBS is the storage analogy to the playback domains below, therefore, a VMGM_VOBS, a VTSM_VOBS and a VTS_VOBS exist * all block addressing is done within the scope of the VOBS 2. navigational structure - logical playback control - Cell * smallest unit which is layed out in sequence * points to a first and last VOBU (by sector) * also points to the corresponding CellID and VOB_ID * smallest unit to execute VM commands (cell_post commands) * smallest unit accesible by VM commands (apart from LinkRSM) - PG (program) * points to a Cell * usually the mapping between PG and Cells is 1:1, but not always (multiple Cells inside one PG can occur when special VM commands have to be executed in the middle of a PG, for example to switch SPU channels or to provide a branching target for special features that need access to parts of the movie) * unit for user skip operations * libdvdnav's default unit for seeking - PGC (program chain) * contains multiple programs and cells * logical playback chain * VM commands at start and stop (PGC_pre and PGC_post commands) * might be used for seeking (see dvdnav_set_PGC_positioning()) 3. title structure - high level navigation - PTT (part of title track) * points to a PG in a PGC * usually what you select in a "chapter menu" are parts * usually the mapping between PTT and PG is 1:1, but not always (this is similar to the distinction between track and index marks on audio CDs: PTT = track mark, PG = index mark) - TT (title track) * contains multiple PTTs * logical partitioning of the content (multiple episodes of a TV series on one DVD: one TT per episode) * the display of DVD players show title and part number - VTS (video title set) * contains multiple TTs with a local numbering (to emphasize the local scope of the number, these are also called VTS_TT) * high level partitioning of the content (movie / bonus material) * video, audio and spu attributes are common inside a whole VTS 4. domain structure - bringing it all together - FP (first play) * one special PGC in the VMGM domain run on start of the disc - VMGM (video manager menu) - files video_ts.{vob,ifo,bup} * the menu which allows you to select between title sets * corresponds to the VMGM_VOBS (video_ts.vob) and the VMGI (video_ts.ifo) * contains sets of PGCs, differentiated by language * contains a global table of TTs each pointing to a VTS and a local VTS_TT * contains parental management information * contains attribute lists for the VTS'es * contains text data (?) * contains a Cell and a VOBU lists with local sector info (for seeking) - VTSM (video title set menu) - files vts_<vtsN>_0.{vob,ifo,bup} * the menu which allows you to select between the TTs of a VTS * corresponds to the VTSM_VOBS (vts_<vtsN>_0.vob) and the VTSI (vts_<vtsN>_0.ifo) * contains sets of PGCs, differentiated by language * contains a Cell and a VOBU lists with local sector info (for seeking) - VTS (video title set) - files vts_<vtsN>_[1-x].vob, vts_<vtsN>_0.{ifo,bup} * regular playback domain * corresponds to the VTS_VOBS (vts_<vtsN>_[1-x].vob) and the VTSI (vts_<vtsN>_0.ifo) * contains one VTS with its VTS_TTs and PGCs * contains a time map (for time-based seeking) * contains a Cell and a VOBU lists with local sector info (for seeking) - STOP * 'nuff said
lsdvd
If looking at a DVD in a hierarchy viewset from the output of lsdvd XML, here is the structure it would follow, using lsdvd output (mostly) as a schema template:
- DVD
- VMG ID (“DVDVIDEO-VMG”)
- Provider ID (“NEW_LINE”, “WARNER_BROS”, etc.)
- Disc ID - see libdvdread
-
- Index (integer; starting at 1)
- Length (float; value in seconds)
- VTS ID (string; “DVDVIDEO-VTS”)
- VTS (integer)
- TTN (integer)
- FPS (float; “29.97” for NTFS, “25” for PAL)
- Format (string; “NTSC” or “PAL”)
- Aspect Ratio (string; “4/3” or “16/9”)
- Video Width (integer; “720” for NTSC, “704” for PAL)
- Height (integer; “480” for NTSC, “576” for PAL)
- DF (string, “Letterbox”, “Pan&Scan”)
- Palettes
- Colors (string)
- Angles (integer; usually just “1”)
-
- Index (integer; starting at “1”)
- Langcode (string; “en”, “es”, “de”, etc.)
- Language (string; “English”, “Espanol”, “Deutsch”, etc.)
- Format (string; “ac3” for Dolby Digital, “dts” for DTS, “lpcm” for PCM)
- Frequency (integer; “48000”)
- Quantization (string; “drc”, “16bit”)
- Channels (integer; number of audio channels, “1” for mono, “2” for stereo, “6” for surround sound, etc.)
- AP Mode (integer; “0”, “1”, “2”)
- Content (string)
- Stream ID (string, starting at “0x80”)
-
- Index (integer; starting at “1”)
- Length (float; number of seconds)
- Starting Cell (integer)
- Cells
- Index (integer; starting at “1”)
- Length (float; number of seconds)
-
- Index (integer; starting at “1”)
- Language Code (string, “en”)
- Language (string, “English”)
- Content (string)
- Stream ID (string, starting at “0x20”)