2.2 支持的编码格式

2.2.1 视频编码格式

编码格式状态表格来了解完整的,每日更新的列表。

所有之中最重要的:

如果你有一个Win32解码器没有列出来而且目前没有被支持,请读取解码器导入HOWTO并且帮助我们添加对它的支持。

2.2.1.1 DivX4与DivX5

这部分包含关于Mayo工程的DivX4和DivX5编码格式的信息,他们的第一个可用的alpha版本是 OpenDivX 4.0 alpha 47和48。 对它们的支持以前包括仔MPlayer中,并且是默认编译的。 我们也使用其后处理代码来有选择地提高MPEG1/2电影的视觉质量。 现在我们使用我们自己的,对于所有文件类型。

这个解码器的新一代产品称为DivX4,它甚至能解码以声名狼籍的DivX编码格式制作的电影! 此外,它比本地的Win32 DivX DLL快得多比但是比libavcodec慢。 因此,不鼓励把它当解码器用。 然而,它对编码有用。 这个编码格式的缺点之一是它目前不开放源代码。

解码器可以从下列URLs之一下载:

    http://avifile.sourceforge.net
    http://divx.com

解开它,然后以root身份运行./install.sh

注意:一定不要忘记在你的/etc/ld.so.conf里添加/usr/local/lib然后运行ldconfig

如果安装正确MPlayer会自动检测到DivX4/DivX5,然后按通常方法编译。如果没有找到,那么你没有正确地安装或配制它。

DivX4Linux有两种工作方式:

-vc odivx
以OpenDivX方式使用解码器。在这种情况下,它在自己的缓冲中产生YV12图象,然后由MPlayer通过libvo做色彩空间转换。(推荐,快!)
-vc divx4
使用解码器的色彩空间转换。以这种方式你也能使用YUY2与UYVY。()

-vc odivx方式通常更快,因为它以YV12(planar YUV 4:2:0)格式传输图象数据,这样占用少的多的总线带宽。对于packed YUV方式 (YUY2,UYVY)使用-vc divx4方式。对于RGB模式两者速度是相同的,差别最多是你当前的色彩深度。

注意:如果你的-vo驱动支持直接渲染,那么-vc divx4可以是很快甚至最快的解决方案。

2.2.1.2 FFmpeg DivX/libavcodec

FFmpeg包括一组开源的解码器包,能够以兼容方式解码以 H263/MJPEG/RV10/DivX3/DivX4/DivX5/MP41/MP42/WMV1编码格式编码的视频流。它不仅能对其中一些进行编码, 同时提供比Win32解码器或Mayo工程的DivX4/5库更高的速度!

它包含很多不错的解码器,尤其重要的是MPEG4的几个变种:DivX 3,DivX 4,DivX 5,Windows Media Video 7 (WMV1)

如果你使用MPlayer发行版,在你的源码包里就有libavcodec,正常编译。如果你使用CVS的MPlayer 那么你必须从FFmpeg的CVS树中提取libavcodec因为FFmpeg 0.4.5不能用于MPlayer。你应该这样来完成:

OL>
  • cvs -d:pserver:anonymous@cvs.ffmpeg.sourceforge.net:/cvsroot/ffmpeg login
  • cvs -d:pserver:anonymous@cvs.ffmpeg.sourceforge.net:/cvsroot/ffmpeg co ffmpeg
  • libavcodec目录从FFmpeg的源代码里移到MPlayer的CVS树的根部。应该看起来象这样:

        main/libavcodec

    符号链接是够的,你必须复制或移动它!
  • 编译。Configure应该在编译之前发现可能的问题。
  • 注意:CVS的MPlayer确实有libavcodec子目录,但是它确实没有包含libavcodec的源代码!你必须按照上述的步骤来得到这个库的源代码。

    用FFmpeg和我的Matrox G400,我甚至能在我的K6/2 500上无掉帧的观看最高分辨率的DivX电影。

    2.2.1.3 XAnim解码器

    前言:
    XAnim的二进制的解码器包里面有一份关于合法捆绑软件许可的声明,除其它限制之外,禁止用户用除XAnim外的任何程序使用其解码器。然而, XAnim的作者到目前为止没有就解码器有关的问题对着任何人采取法律行动。

    MPlayer可以使用XAnim的解码器解码。按照下列指令来开启它:

    1. XAnim的站点下载你想要的解码器。3ivx的解码器不在那里,在 3ivx的站点
    2. 使用--with-xanimlibdir选项来告诉configure在何处可以找到XAnim的解码器。缺省的话,它在 /usr/local/lib/xanim/mods, /usr/lib/xanim/mods and /usr/lib/xanim里寻找。或者你可以把XANIM_MOD_DIR环境变量 设置为XAnim解码器所在的目录。
    3. 给文件改名/做符号链接,去掉代表平台构架之类的东西,让他们看起来像这样:vid_cvid.xa, vid_h263.xa, vid_iv50.xa

    XAnim的视频解码器族号码是10,因此你可以使用-vfm 10选项让MPlayer尽可能的使用他们。

    测试过的解码器包括:Indeo 3.24.15.0CVID3ivXh263

    2.2.1.4 VIVO视频

    MPlayer能播放Vivo(1.0和2.0)视频。对于1.0的文件最适合的解码器是FFmpeg的H263解码器,你可以用-vc ffh263选项 (默认的)来使用它(需要最新的libavcodec)。对于2.0个文件,使用 ivvideo.dll这个Win32 DLL文件,将它安装在/usr/lib/win32或者你放Win32解码器的那个什么地方。后面这个解码器不支持YV12或YUY2, 只使用BGR,只能限定在X11和OpenGL输出方式。希望ffh263将来支持VIVO 2.0的文件。

    2.2.1.5 MPEG 1/2视频

    MPEG1和MPEG2用本地的多平台的libmpeg2库解码,其源代码被包括在MPlayer中。对于buggy的MPEG 1/2视频文件我们通过截获sig11 (segmentation fault),然后迅速再次初始化解码器,从失败的地方继续。这种恢复技术会带来无法估量的速度损失。

    2.2.1.6 MS Video1

    这是微软的又旧又差的编码格式。过去它用msvidc32.dll的Win32解码器解码,现在我们有我们自己的开源的实现(由 Mike Melanson提供)。

    2.2.1.7 Cinepak CVID

    MPlayer默认将使用自己的开源的,多平台的Cinepak解码器。它支持YUV输出,所以只要硬件驱动允许它将使用硬件缩放。

    2.2.1.8 RealVideo

    MPlayer支持所有版本的RealVideo的解码:

    推荐下载并安装RealPlayer8或者RealONE,因为MPlayer能使用他们的库来解码RealVideo 2.0或者RealVideo 3.0的视频文件。 MPlayer的配置脚本应该在一个完全安装的RealPlayer的标准位置找到它的库。如果它没找到,用--with-reallibdir 选项告诉configure到哪里去找。

    注意:RealPlayer库目前只能用于x86平台上的Linux,FreeBSD,NetBSD和Cygwin。

    注意:我们不能分发RealPlayer库,它的许可证不允许这样。你必须自己搞到他们。

    2.2.1.9 XViD

    XViDOpenDivX编码格式的开发分支。故事发生在Mayo工程把OpenDivX变成封闭源码的DivX4的时候,那些从事于OpenDivX的非Mayo工程 的人们感到愤怒,于是开始了XViD。所以两个项目有相同的起源。

    优点:

    缺点:

    XViD目前只能从CVS中得到。这是下载和安装的指令:

    1. cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login
    2. cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore
    3. cd xvidcore/build/generic
    4. 按照你的需要编辑Makefile.linux
    5. make -f Makefile.linux
    6. 从DivX4Linux包中找出encore2.h decore.h ,把它们复制到/usr/local/include/
    7. 加上--with-xvidcore=/path/to/libcore.a选项重新编译MPlayer

    2.2.1.10 Sorenson

    Sorenson 是苹果开发的视频编码格式。目前我们能用本地解码器解码第一个版本(SVQ1)。

    优点:

    缺点:

    Sorenson解码器是默认编译使用的。

    2.2.2 音频编码格式

    所有音频编码中最重要的是:

    2.2.2.1 软件AC3解码

    这是含有AC3音频的文件的默认解码器。

    AC3解码器能为了2,4或者6个扬声器创建音频混合输出。当配置为6个扬声器时,这个解码器向声卡驱动提供所有AC3通道的单独的输出, 允许彻底的“环绕立体声”感受而不需要使用需要hwac3解码器的外部AC3解码器。

    使用-channels选项可以选择输出的通道数。使用-channels 2获得立体声的降混频。 对于4通道的降混频(左前,右前,左环绕和右环绕),使用-channels 4。在这种情况下,中心通道的任何输出将与前通道均匀混合。 -channels 6将按照编码时的形式输出所有AC3通道-- 依次为左,右,左环绕,右环绕,中间和低频效果。

    默认的输出通道数是2。

    为使用超过2个通道的输出,你需要使用OSS,和一块能通过SNDCTL_DSP_CHANNELS ioctl支持适当输出通道数的声卡。合适的驱动的一个例子是 2001年8月的或者更新的emu10k1(用于Soundblaster Live!卡)(ALSA的CVS应该也能工作)。

    2.2.2.2 硬件AC3解码

    你需要一个AC3兼容声卡,加上数字输出(SP/DIF)。声卡的驱动必须正确地支持AFMT_AC3格式(C-Media就支持)。把你的AC3解码器连接到SP/DIF输出, 然后使用-ac hwac3选项。这还在试验阶段但已经知道能用于C-Media声卡,使用ALSA驱动(但不能是OSS)的Soundblaster Live! 还有DXR3/Hollywood+ MPEG译码卡。

    2.2.2.3 libmad支持

    libmad是多平台的MPEG音频解码库。它不能很好的处理损坏的文件,而且有时候搜索也有问题。

    为了支持它,加上--enable-mad配置选项编译。

    2.2.2.4 VIVO音频

    VIVO文件的使用的音频编码取决于它是VIVO/1.0还是VIVO/2.0。VIVO/1.0文件使用g.723音频,而VIVO/2.0文件使用Vivo Siren音频。 他们两个都支持。你能从MPlayer站点下载g.723/Siren的Win32 DLL, 然后把它复制到/usr/lib/win32目录下。

    2.2.2.5 RealAudio

    MPlayer支持解码几乎所有版本的RealAudio:

    至于如何安装RealPlayer库,参见RealMedia文件格式部分。

    2.2.3 Win32解码器导入HOWTO

    2.2.3.1 VFW codecs

    VFW(Video for Windows)是Windows的老的视频API。它的解码器以.DLL或者(很少的).DRV为扩展名。 如果MPlayer无法播放你的AVI并显示这种信息:

        UNKNOWN video codec: HFYU (0x55594648)

    它意味着你的AVI在编码时使用了HFYU fourcc(HFYU = HuffYUV codec,DIV3 = DivX Low Motion,等等...) 的编码格式。现在你知道了,你必须查明Windows为了播放这个文件装载了哪一个DLL。在我们的情况下, system.ini在这样的一行上包含这个信息:

        VIDC.HFYU=huffyuv.dll

    因此,你需要huffyuv.dll文件。注意,音频解码器通过MSACM前缀指定:

        msacm.l3acm=L3codeca.acm

    这是MP3编码格式。现在你有了所有必要的信息(fourcc,解码器文件,AVI样本),把你的解码器支持要求通过邮件提交, 并把相关文件上载到我们的FTP站点:

        ftp://ftp.mplayerhq.hu/MPlayer/incoming/[codecname]/

    2.2.3.2 DirectShow codecs

    DirectShow是较新的视频API,比它的前辈更恶劣。对于DirectShow事情变的困难了,

    新方法:使用微软的GraphEdit(快速)

    1. 从DirecX SDK或者Doom9中取得GraphEdit
    2. 运行graphedit.exe
    3. 从菜单中选择Graph -> Insert Filters
    4. 展开DirectShow Filters项目
    5. 选择正确的解码器名称然后展开项目
    6. DisplayName一项中看反斜杠后面花括号里面的文字并把它记下来(小短横分隔开的五块,就是GUID)
    7. 解码器的二进制文件是Filename项里指定的文件

    注意:如果没有Filename项而DisplayName中包含类似device:dmo的东西, 那么这是一个DMO-Codec,MPlayer目前不支持

    老方法:做个深呼吸然后开始搜索注册表...

    1. 运行regedit
    2. Ctrl-f,禁用头两个复选框,填写解码器的fourcc(例如TM20)。
    3. 你应该看见一个包含路径和文件名的域(例如C:\WINDOWS\SYSTEM\TM20DEC.AX)。
    4. 现在你找到了文件,我们需要GUID。尝试再次搜索,但现在搜索解码器的名称,fourcc。用媒体播放器播放文件时, 察看File -> Properties -> Advanced可以获得解码器名。如果没有,你真不走运。猜猜看吧(例如搜索TrueMotion)。
    5. 如果找到GUID你将看见FriendlyName和CLSID域。写出16字节CLSID,这就是我们需要的GUID。

    注意:如果搜索失败,试试选上所有的复选框。你可能找到错误的内容,不过说不定你会走运...

    现在你有所有必要的信息(fourcc,GUID,解码器文件,AVI样本),把你的解码器支持要求通过邮件提交,并把相关文件上载到我们的FTP站点

        ftp://ftp.mplayerhq.hu/MPlayer/incoming/[codecname]/