DVD-Video/MPEG 格式内部
MPEG(运动图像专家组)是一系列用于数字视频的格式规范的名称。DVD-Video 主要基于 MPEG-2,尽管它也允许 MPEG-1 视频。本书不会深入探讨 MPEG 的所有细节;它只涵盖足够的知识,以便理解它在 DVD-Video 中的使用方式。
MPEG 文件中的信息被分成流:视频图像形成一个流,而音频音轨保存在另一个流中。DVD-Video 允许使用多个音频流,例如,可以用于不同语言的音轨(一次只能播放一个音频流)。每个流都由一个数字标识,其中不同的范围分配给不同的流类型。MPEG 还允许使用两个私有流,其格式在 MPEG 中未进一步定义;DVD-Video 将这些用于各种目的
- MPEG 未定义的额外音频格式(AC-3、DTS、LPCM)(私有流 1)
- 字幕(私有流 1)
- 菜单按钮、时间显示信息(演示控制信息(PCI),私有流 2)
- 用于快进快退和多角度模式的导航信息(数据搜索信息(DSI),私有流 2)
DVD-Video 光盘有两种主要类型,对应于世界各地用于模拟视频的主要格式:NTSC 和 PAL。NTSC 是第一个彩色电视系统,由美国开发,并用于北美、日本和少数其他地方。PAL 是一种后来的德国开发,用于欧洲和世界大部分地区。(还有一种由法国开发的广播格式称为 SECAM,但用于录制媒体的格式与 PAL 相同。)
在 NTSC 格式中,每个视频帧为 720*480 像素,以每秒 29.97 帧的速度显示。在 PAL 格式中,每个帧为 720*576 像素,显示速率为 25fps。帧可以以长宽比 4:3 显示窄屏画面,或以 16:9 显示宽屏画面。请注意,窄屏画面和宽屏画面每帧的像素数没有区别;图像只是为了宽屏而被拉伸(这被称为变形宽屏)。
DVD-Video 中允许的分辨率为
- 对于 NTSC:720*480、704*480、352*480 或 352*240
- 对于 PAL:720*576、704*576、352*576 或 352*288
不幸的是,DVD-Video 必须从广播电视中继承隔行扫描功能。这意味着每个视频帧被分成两个场,一个包含奇数扫描线,另一个包含偶数扫描线,它们一个接一个地显示。
每个流的内容被分成数据包,它们被复用—一个流的数据包紧跟着另一个流的数据包,这两个流在几乎相同的时间内被呈现—允许播放器按顺序读取和解码文件。你会遇到打包基本流(PES)的术语来表示这种方式。特别是,每个数据包都以一个头部开头,头部包含一个标识代码,用于指示数据包的类型,后面跟着一个两位字节的字段,用于指示数据包内容的长度。
还有其他额外的“头部”,它们具有不同的标识代码,用于指定各种其他信息
- 系统头部提供有关电影文件中的流数量的信息。文件开头必须至少有一个这样的头部。
- PACK 头部提供有关解码电影文件所需的数据速率的信息,以及一个高精度时钟参考(以 27MHz 时钟为单位)。其中一个头部的存在指示一个“PACK”的开始,它基本上由头部加上所有后续的 PES 数据包组成,直到下一个 PACK 头部。DVD-Video 要求每个 PACK 的大小为 2048 字节。
大多数视频编解码器严重依赖帧间压缩和帧内压缩来减小数据大小。I 帧是单独压缩的视频帧,不考虑其他帧。使用的编码方案类似于 JPEG 压缩。但是,后续帧很可能看起来相似(想想某物或某人移动到静止背景中的常见情况);因此,与其将它们单独压缩为额外的 I 帧,不如将它们编码为P 帧,它们是相对于前一个参考帧(可以是 I 帧或 P 帧)的差异,或者编码为B 帧,它们是相对于前一个和后一个 I 帧或 P 帧的差异。
这样做的缺点是,如果你试图从不是文件开头的某个任意点开始播放,播放器必须向后搜索,直到找到一个 I 帧,然后才能开始合理地解码视频。因此,使用更少的 I 帧可以提高压缩率,但会牺牲对视频流的快速随机访问。DVD-Video 规范要求每 36 个 NTSC 场或每 30 个 PAL 场(即至少每 0.6 秒)至少有一个 I 帧。
从 I 帧开始直到下一个 I 帧之前的最后一个帧(换句话说,包含所有以某种方式依赖于起始 I 帧的帧)的帧序列称为图像组(GOP)。
如前所述,DVD-Video 预计每 2048 字节看到一个 PACK 头部。第一个 PACK 的内容必须是一个 PCI 数据包和一个 DSI 数据包;这被称为“NAV PACK”。接下来将是其他 PACK,包含视频、音频或字幕流数据包,按适当的顺序排列,但 NAV 信息必须排在最前面,视频数据包应该包含一个或多个完整的 GOP。NAV 和后面的 PACK(直到下一个 NAV PACK)构成了一个视频对象单元(VOBU),它是解码器可以处理的最小单元。VOBU 的持续时间必须在 0.4 到 1.0 秒之间。
DVD-Video 定义了超出此范围的额外分组级别;一个或多个 VOBU 构成了一个单元;一个或多个单元构成了一个程序,一个或多个程序构成了一个程序链(PGC)。特定的程序可以在文件结构中被标识为标题的一部分(PTT),对于普通人来说,这被称为章节。光盘上的实际标题由一个或多个 PGC 组成,而菜单是单个 PGC。
分组的额外意义如下
- 单元是跳转可以定位到的最小单位。
- 单元可以有一个单一的 VM 指令附加,当单元播放完毕时执行。
- 使用播放器遥控器上的下一个/上一个按钮跳过是按照程序单位进行的,不一定按照章节进行。
- 只有 PTT(章节)可以是从包含 PGC 外部进行跳转的目标;对单元和(非章节)程序的跳转只能从包含 PGC 内部进行。
- PGC 可以有一系列 VM 命令,在播放之前执行,以及另一个在播放结束时执行。PGC 还定义了 16 个条目的颜色表,PGC 中的字幕可以从中选择 4 个以供显示。
VMG 中有一个特殊的“首次播放”PGC(FPC),当将光盘放入播放器时自动进入;它没有 MPEG 数据,但它是这里执行的命令,负责跳转到初始菜单(如果有),播放所有序言序列等等。
有一些单独的控制转移命令,用于通过编号定位 PGC,而不是通过编号定位标题。
菜单和标题非常相似;两者都是(由)PGC 组成,两者都可以有交互式按钮。但是,只有标题可以有章节,只有标题可以跨多个 VOB 文件分割(这限制了菜单持续时间的最大长度)。此外,只有标题可以有多个音频和字幕轨道以供不同语言使用,因为菜单已经是特定语言的菜单组的一部分。
某些菜单可以被标记为条目,可以通过播放器遥控器上的专用按钮直接调用。
在 VMG 中,一个菜单可以被标记为标题条目,这意味着它可以通过遥控器上的“顶层菜单”按钮调用。
在一个标题集中,每个菜单都可以被标记为root、PTT(章节)、audio、subtitle 和 angle;“菜单”按钮会显示根条目,其他条目则由遥控器上的相应按钮显示。