VOB file format overview

本文並未一對一將原文翻過來, 請自行參照:
VOB 是加上限制後的 (MPEG 還有 用在沒有明顯結束時間如 video broadcasting 的場合), 再加上小部份的延伸.

一個 VOB 檔中存放著 n 個 pack, 一個 pack 的大小等同於 DVD 上的一個 sector 的大小 - 2048 bytes. 在 MPEG-2 中 pack 的做用是將同時間呈現的內容如 video 及 audio group 在一塊, 以 pack header 中帶的 timing information 同步.

每個 pack 以 pack header 開頭, 並包含了 1 or 2 個 packet. 同一個 pack 中帶的資料都是同樣類型的 - 可能是 navigation, video, audio 或是 subpicture (字幕). NAV 類型的 pack 包含了 system header 及兩個固定長度的 packet 稱為 Presentation Control Information (PCI) 及 Data Search Information (DSI). Video, audio, subpicture 類型的 pack 則只包含了 Packetized Elementary Stream (PES) 用來放內容, 如果有必要, 還會再帶上 padding packet.

MPEG-2 為非標準資料型態定義了兩種 private stream, 其中一種帶了 Presentation Time Stamps (PTS, 供 player 看的時間資訊) 及 Decoder Time Stamps (DTS, 供 decoder 看的時間資訊. 請參考) 時間資訊, 不過實際 stream 內容則是以應用來決定, 以我們的例子而言就是 DVD-Video.

Private stream 1 中帶了 timing information, DVD-Video 將它用於 subpicture 及其他非 MPEG 標準的 audio system (AC3, DTS, LPCM 之類的). 實際內容的解讀還要看 sub-stream number 來決定.

Private stream 2 則用於 NAV pack 中帶的 navigation packets.

接下來介紹一個比較高階的邏輯資料結構 - Video OBject Unit, 或稱做 VOBU. 以 NAV pack 開頭, 包含了大約半秒的內容量. VOBU 的大小由 Group Of Pictures (GOP) 所決定, 一個 VOBU 視需要可包含一到多個完整的 GOP. 最後一個 GOP 可視需要以 padding stream 或是 stuffing bytes 來填補 (填到剛好 pack 大小為 2048 bytes). Audio and subpictures with DTS values within the same range of values as the video are included in each VOBU. Audio is not padded until the end of the cell, therefore audio frames can span VOBUs.

Cell 是另一個更高階的邏輯資料結構, 可包含任意數量完整的 VOBU. 它的長度及放置方式完全視內容需求完成. Chapters, multiple angles, title 甚至遙控器上的 prev 及 next 動作都是放置時的考量依據.

所以, VOB 是一到多個 cell 的集合, 整部影片可以完全放在同一個 VOB 中, 不過一般來說不會這麼做. 切分的方式可以很隨意, 不過通常會視 chapter 分 VOB, 在 VOB 中為每個場景再分 cell, 不過這不是絕對必要的. 事實上, 只有用上 multiple angles 的地方才會有切分 VOB 的需求.

整部影片 (title set) 在 DVD 上的放置是連續的, 但表現成多個 1G 的檔案以便於相容於各種 OS. 要確定這點, 可檢視第二個或之後的檔案中 NAV pack 的 Logical Block Address (LBA).

檔案的切分實際上並未以其中的內容做為考量, 這造了成除第一個檔之外的其他檔案都不是那麼好處理, 因為它們以 VOBU (還記得嗎? VOBU 以 NAV pack 開頭) 開頭的機會很低. 切分的位置通常在 524,287 sector (1,048,574 KB, 1,073,739,776 bytes) 處, 以 16 進位表示就是 7FFFF sector (219-1) 或 3FFFF800 bytes.

有了概念後, 來看實際的 DVD 內容就會比較容易理解了
這篇