Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
dvd_structure [2013/08/01 13:40] beandog |
dvd_structure [2014/09/23 13:34] beandog [DVD Structure / Metadata] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== DVD Structure / Metadata ====== | ====== DVD Structure / Metadata ====== | ||
- | * [[DVD Audio]] | + | * [[libdvdread]] |
- | * [[DVD Tracks]] | + | |
- | * [[DVD Title]] | + | |
- | * [[DVD Video]] | + | |
- | If looking at a DVD in a hierarchy viewset, here is the structure it would follow, using lsdvd output (mostly) as a schema template: | + | * [[http://stnsoft.com/DVD/ifo.html|Video Manager and Video Title Set IFO file headers]] - data in both VMG and VTS IFOs |
+ | * [[http://stnsoft.com/DVD/ifo_vmg.html|Video Manager IFO]] - data specific **to the one** VMG IFO | ||
+ | |||
+ | * [[VMG|Video Manager Group]] (VMG) | ||
+ | * [[VMGI|Video Manager Group IFO]] (VMGI): ''VIDEO_TS.IFO'', ''VIDEO_TS.BUP'' | ||
+ | * [[VMGM|Video Manager Group Menu]] (VMGM): ''VIDEO_TS.VOB'' (optional) | ||
+ | * [[VTS|Video Title Set]] (VTS) | ||
+ | * [[VTSI|Video Title Set IFO]] (VTSI): ''VTS_01_0.IFO'', ''VTS_01_0.BUP'' | ||
+ | * [[VTSM|Video Title Set Menu]] (VTSM): ''VTS_01_0.VOB'' | ||
+ | ==== Cosmic Voyage ==== | ||
+ | |||
+ | * [[VMG]] | ||
+ | * [[VMGI]] | ||
+ | * VIDEO_TS.BUP | ||
+ | * VIDEO_TS.IFO | ||
+ | * [[VMGM]] | ||
+ | * None | ||
+ | * [[VTS]] | ||
+ | * [[VTSI]] | ||
+ | * VTS_01_0.BUP | ||
+ | * VTS_01_0.IFO | ||
+ | * [[VTSM]] | ||
+ | * VTS_01_0.VOB | ||
+ | * [[VOB|VOBs]] | ||
+ | * VTS_01_1.VOB | ||
+ | * VTS_01_2.VOB | ||
+ | |||
+ | |||
+ | === DVD Specifications === | ||
+ | |||
+ | * [[http://en.wikipedia.org/wiki/DVD-Video|Wikipedia: DVD-Video]] | ||
+ | * [[http://www.doom9.org/index.html?/dvd-structure.htm|doom9: DVD Structure]] | ||
+ | |||
+ | {{::dvd-video_layout.jpg|}} | ||
+ | |||
+ | === dvdnav === | ||
+ | |||
+ | Taken from ''libdvdnav'' documentation: | ||
+ | |||
+ | <code text>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</code> | ||
+ | |||
+ | === 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 | * DVD | ||
* [[DVD Title|Title]] | * [[DVD Title|Title]] | ||
- | * VMG ID | + | * VMG ID ("DVDVIDEO-VMG") |
- | * Provider ID | + | * Provider ID ("NEW_LINE", "WARNER_BROS", etc.) |
* Disc ID - see [[libdvdread]] | * Disc ID - see [[libdvdread]] | ||
* [[DVD Serial ID|Serial ID]] | * [[DVD Serial ID|Serial ID]] | ||
Line 17: | Line 163: | ||
* Index (integer; starting at 1) | * Index (integer; starting at 1) | ||
* Length (float; value in seconds) | * Length (float; value in seconds) | ||
- | * VTS ID (integer) | + | * VTS ID (string; "DVDVIDEO-VTS") |
+ | * VTS (integer) | ||
* TTN (integer) | * TTN (integer) | ||
* FPS (float; "29.97" for NTFS, "25" for PAL) | * FPS (float; "29.97" for NTFS, "25" for PAL) | ||
* Format (string; "NTSC" or "PAL") | * Format (string; "NTSC" or "PAL") | ||
* Aspect Ratio (string; "4/3" or "16/9") | * Aspect Ratio (string; "4/3" or "16/9") | ||
- | * Video Width (integer; "720" for NTSC) | + | * Video Width (integer; "720" for NTSC, "704" for PAL) |
- | * Height (integer; "480" for NTSC) | + | * Height (integer; "480" for NTSC, "576" for PAL) |
- | * DF (string) | + | * DF (string, "Letterbox", "Pan&Scan") |
* Palettes | * Palettes | ||
* Colors (string) | * Colors (string) | ||
Line 31: | Line 178: | ||
* Index (integer; starting at "1") | * Index (integer; starting at "1") | ||
* Langcode (string; "en", "es", "de", etc.) | * Langcode (string; "en", "es", "de", etc.) | ||
- | * Language (string; "English") | + | * Language (string; "English", "Espanol", "Deutsch", etc.) |
* Format (string; "ac3" for Dolby Digital, "dts" for DTS, "lpcm" for PCM) | * Format (string; "ac3" for Dolby Digital, "dts" for DTS, "lpcm" for PCM) | ||
* Frequency (integer; "48000") | * Frequency (integer; "48000") | ||
* Quantization (string; "drc", "16bit") | * Quantization (string; "drc", "16bit") | ||
* Channels (integer; number of audio channels, "1" for mono, "2" for stereo, "6" for surround sound, etc.) | * Channels (integer; number of audio channels, "1" for mono, "2" for stereo, "6" for surround sound, etc.) | ||
- | * AP Mode | + | * AP Mode (integer; "0", "1", "2") |
* Content (string) | * Content (string) | ||
* Stream ID (string, starting at "0x80") | * Stream ID (string, starting at "0x80") |