格式 -- MPlayer -- Linux下的电影播放器

## 2.1 支持的格式

首先澄清一个普遍的错误是非常重要的。 当人们看到以.AVI为扩展名的文件时，他们立即得出结论，认定它不是MPEG文件。 那种看法是不对的。至少不完全对。与一般人的看法相反这种文件能包含MPEG1视频。

如你所见，一种编码方式与一种文件格式是不一样的。
视频编码格式的例子有：MPEG1，MPEG2，DivX，Indeo5，3ivx。
文件格式的例子有：MPG，AVI，ASF。

在理论上，你能把OpenDivX视频和MP3音频放到MPG格式的文件中。然而，大多数播放器将无法播放它， 由于他们期待的是MPEG1视频和MP2音频(不同于AVI格式，MPG没有必要的区域来描述其视频和音频流)。 或者你可以把MPEG1视频放到AVI文件中。FFmpeg和MEncoder就能制作这样的文件。

### 2.1.1 视频格式

#### 2.1.1.1 MPEG文件

MPEG文件会以不同的形式出现：

- MPG：这是MPEG文件格式的最基本形式。它包含MPEG1视频和MP2(MPEG-1 layer 2)或者极少数是MP1音频。
- DAT：这是与MPG完全相同的格式，只是换了扩展名。它在Video CD上使用。因为制作VCD的方法和Linux的设计， DAT文件不能直接播放也不能作为普通的文件从VCD上复制下来。你必须使用`-vcd`选项来播放Video CD。
- VOB：这是用在DVD上的MPEG文件格式。它与MPG一样，加上能包含字幕或者非MPEG(AC3)音频的能力。 它包含编码的MPEG2视频和通常是AC3的音频，但是，MP2和非压缩的LPCM DTS音频也被允许使用。
  参见DVD一节！

MPEG文件中的帧序列组成独立的组。这意味着你能用标准的文件工具(像`dd`，`cut`)切割和合并MPEG文件， 并且得到的文件还是完全可用的。

MPG的一个重要的特性是它们有一个描述视频流长宽比的区域。例如SVCD有480x480的分辨率的视频，而在文件头中的那个区域被置为4:3， 这样它以640x480的分辨率被播放。AVI文件没有这个区域，因此他们必须在编码或者播放时用`-aspect`重新缩放。

#### 2.1.1.2 AVI文件

由微软设计，AVI(Audio Video Interleaved)是一种普遍的多用途格式，目前被大多数DivX和DivX4视频所使用。 它有许多已知的弊端和缺点(比如在流播放时)。它支持1个视频流和0到99个音频流。文件大小限制是2GB，但是现在存在一种扩展格式 称为OpenDML允许更大的文件。微软目前强烈反对使用它并鼓励使用ASF与WMV。不是所有人都在乎这一点。

有一个hack允许AVI文件包含Ogg Vorbis音频流的，但这使他们与标准的AVI不兼容。MPlayer支持播放这种文件。 搜索功能也被植入，但由于编码低劣的文件的混乱的文件头使这项功能被严重限制了。遗憾地是，目前唯一能建立这种文件的编码器， NanDub，就存在这个问题。

注意：DV照相机建立的未经加工的DV流被DV grabbing utilities转换成两种不同类型的AVI文件。所以AVI将或者包含 MPlayer可以播放的分离的音频与视频流，或者是未经加工的DV流，它的支持正在开发中的。

有两种类型的AVI文件：

- 交错的：音频和视频内容是交错的。这是标准使用方法。被推荐且多半都使用。一些工具以错误的同步方式建立交错的AVI。 MPlayer认为这些文件是交错的，这会导致A/V不同步，在搜索时最为明显。这些文件应该被当作非交错的文件来播放 (使用`-ni`选项)。
- 非交错的：首先是整个视频流，然后是整个音频流。因此这需要大量的搜索，使用网络或者CD-ROM播放变的困难。

MPlayer支持两种AVI文件的计时方式：

- 基于bps： 它基于视频与音频流的比特率/采样率。这种方法被大多数播放器使用，包括avifile和Windows的媒体播放器。这种方法在遇到文件头损坏的文件， 以及文件创建时使用VBR音频却没有使用VBR兼容的编码器的情况时将导致A/V不同步(多半在搜索时)。
- 基于交错方式： 它不使用文件头的比特率，而是使用交错的音频和视频块的相关位置，使VBR音频的编码低劣的文件可以播放。

任何视频和音频的编码格式都允许使用，但注意大多数播放器对VBR音频的支持都不好。文件格式允许使用VBR音频，但是大多数播放器期待CBR音频， 这样它们无法播放VBR。VBR是不常见的而且微软的AVI规格仅描述了CBR音频。大多数AVI编码器/多路编排器在使用VBR音频时会创建坏的文件。目前已知的 只有两个例外：NanDub和MEncoder。

#### 2.1.1.3 ASF/WMV文件

ASF(active streaming format)格式来自微软。他们开发了ASF的两个变种，v1.0和v2.0. v1.0被他们的媒体工具(Windows媒体播放器和 Windows媒体编码器)使用并且是保密的. v2.0被公开并申请专利:)。当然，他们是不同的，完全没有任何兼容性(这只是又一个法律游戏)。 MPlayer>只支持v1.0格式因为没有任何人见过v2.0格式的文件:)。注意，ASF文件现在常以.WMA或者.WMV的扩展名出现。

#### 2.1.1.4 QuickTime/MOV文件

这些格式是由苹果设计的，能包含任何编码格式，CBR或者VBR。他们通常使用.QT或者.MOV的扩展名。自从MPEG4组织选择QuickTime作为 MPEG4的推荐文件格式后，他们的MOV文件以.MPG或.MP4的扩展名(有趣的是这些文件的视频和音频流是真正的MPG和AAC文件。你甚至能用 `-dumpvideo`和`-dumpaudio`选项提取他们。)。

注意：大多数新的QuickTime文件使用Sorenson的视频和QDesign Music的音频。参见我们的Sorenson编解码器部分。

#### 2.1.1.5 VIVO文件

MPlayer乐于解码VIVO文件格式。这个格式的最大缺陷在于它没有索引块，也没有一个固定的包大小或者同步字节和大多数文件 甚至缺乏关键帧，所以别想着搜索了！

VIVO/1.0文件的视频编码格式是标准的h.263。VIVO/2.0文件的视频编码格式是一个经过修改的，非标准的h.263v2。 音频也使一样，它可以是g.723(标准的)，或Vivo Siren。

关于安装指导参见VIVO视频编码格式和VIVO音频编码格式部分。

#### 2.1.1.6 FLI文件

FLI被Autodesk Animator使用的一种很老的文件格式，但是它是网上小动画普遍使用的一种文件格式。MPlayer 能读取并解码FLI电影寻求在它们中搜索(当使用`-loop`选项循环播放时有用)。FLI文件没有关键帧， 因此图画在搜索后短时间内将是混乱的。

#### 2.1.1.7 RealMedia(RM)文件

是的，MPlayer能读取(demux)RealMedia(.rm)文件。搜索功能能工作，但是你必须明确地指定`-forceidx`选项 (这种格式支持关键帧)。这里是被支持的RealVideo和RealAudio编解码器的列表。

#### 2.1.1.8 NuppelVideo文件

NuppelVideo是电视截取工具(据我所知:)。MPlayer 能读取它的.NUV文件(只能是NuppelVideo 5.0)。那些文件能包含未压缩的YV12，压缩的YV12+RTJpeg，压缩的YV12+lzo和压缩的YV12 RTJpeg+lzo帧。 MPlayer能解码所有这些格式(并且用MPlayer把它们编码成DivX/etc!)。搜索功能能工作。

#### 2.1.1.9 yuv4mpeg文件

yuv4mpeg/yuv4mpeg2是用于mjpegtools programs 的文件格式。你能用这些工具进行这种格式的视频截取，制作，过滤或编码。这种文件格式是一个非压缩的YUV 4:2:0图象序列。

#### 2.1.1.10 FILM文件

这种格式用于老的世嘉土星CD-Rom游戏。

#### 2.1.1.11 RoQ文件

RoQ文件是用于ID的一些游戏例如Quake III和Return to Castle Wolfenstein的多媒体文件。

#### 2.1.1.12 OGG/OGM文件

这是Xiphophorus的一个新的文件格式。它能包含任何视频或者音频编码格式， CBR或者VBR。要想播放它，你需要在编译MPlayer之前安装`libogg`和`libvorbis`。

#### 2.1.1.13 SDP文件

SDP是一个IETF标准格式，用来描述视频和/或者音频的RTP流。 (需要"LIVE.COM Streaming Media"库)。

#### 2.1.1.14 PVA文件

PVA是DVB电视附带的Windows下面的软件(比如：MultiDec，WinTV)使用的类似MPEG的格式。

PVA规格的描述可以在下面地址下载http://www.technotrend.de/download/av_format_v1.pdf

#### 2.1.1.15 GIF files

GIF格式是网页图象的普遍格式，有两种版本的GIF规格，GIF87a和GIF89a。主要的区别在于GIF89a允许动画。MPlayer通过 使用libungif库或者另一个libgif-compatible的库支持这两种规格。非动画的GIF显示为单帧的视频。(使 用`-loop`和`-fixed-vo`选项来显示更长的时间。)

MPlayer目前不支持在GIF文件中搜索。GIF文件并不一定有一个固定的帧大小，或者帧速率。而且，每一帧都有独立的大小并且 应该被放在一个固定的地方并且有固定的尺寸。帧速率是通过使用每一帧前面的一个控制块以百分之一秒为单位控制这一帧显示 的时间长短来实现的。

标准的GIF文件包含24-bit的RGB帧和最多8-bit的索引调色板。这些帧大多以LZW格式压缩，但有些GIF编码器生成未压缩的 帧以避免LZW压缩的专利问题。

如果你的发行版没有包含libungif，可以从libungif主页 下载。技术细节你可以参考GIF89a规格.

### 2.1.2 音频格式

MPlayer是一个电影播放器而不是媒体播放器，虽然它能播放一些音频文件(他们将在下面的 部分中列出)。不推荐这种使用MPlayer的方法，你最好使用xmms。

#### 2.1.2.1 MP3文件

你可能在播放有些MP3文件时遇到问题，MPlayer将它们错误的检测为MPEG文件并且不能正常播放或者完全不能播放。 如果要修正这个问题就必须放弃对有些被破坏的MPEG文件的支持，所以在可以预见的将来仍然会是这样。man page中描述的 `-demuxer`标签在这些情况下可能会帮助你。

#### 2.1.2.2 WAV文件

#### 2.1.2.3 OGG/OGM文件(Vorbis)

要求正确的安装`libogg`和`libvorbis`。

#### 2.1.2.4 WMA与ASF文件

#### 2.1.2.5 MP4文件

#### 2.1.2.6 CD音频

MPlayer可以使用cdparanoia(的库)播放CDDA(音频CD)。在这部分没有包含cdparanoia的特性的列表。

看man page了解如何通过`-cdda`选项向cdparanoia传递参数。

#### 2.1.2.7 XMMS

MPlayer可以使用XMMS的输入插件来播放各种格式。现在有用于SNES game tunes, SID tunes(from Commodore 64), 很多Amiga 格式, .xm, .it, VQF, musepack, Bonk, shorten和大量别的插件。你可以在XMMS的输入插件页找到它们。

要使用这个特性你必须安装了XMMS并在编译MPlayer的时候使用`./configure --enable-xmms`。 如果这样不起作用，你可能需要用`--with-xmmsplugindir`和`--withxmmslibdir` 开关显式指定XMMS的插件和库的路径。