Xvid(旧称为XviD)是一个开放源代码的MPEG-4视频编解码器,它是基于OpenDivX而编写的。Xvid是由一群原OpenDivX义务开发者在OpenDivX于2001年7月停止开发后自行开发的。Xvid支持多种编码模式,量化(Quantization)方式和范围控,运动侦测(Motion Search)和曲线平衡分配(Curve)等众多编码技术,对用户来说功能十分强大。Xvid的主要竞争对手是DivX。但Xvid是开放源代码的,而DivX则只有免费(不是自由)的版本和商用版本。
divx和xvid_XviD -简介
XviD是最新的MPEG-4 codec,而且是第一个真正开放源代码的,一旦完成就会通过GPL协议发布。在最近的codec比较中,我发现XviD的表现令人惊奇的好,尽管在Alpha版本中不尽人意。若作为一个beta版的测试者不会吓到你的话,XviD也许正是你所需要的。
DivX 跟 XviD 采用不定时设立关键画面来改善原先固定时间关键画面所造成的动态画面画质不佳的情形, 而 2 PASS 的压缩模式使画质更加滑顺, 基本上两种编码的效果差别不大, 不过就同画质的档案大小来说 XviD 更省容量, 这也就是网络上流传的影片, DivX 编码的大多为两片 CD, 而 XviD 编码的大多仅需一片 CD容量即可!
DivX 的版本从 2,3,4 一直跳到 5, 本来是非营利提供网友使用, 后来自 DivX 后开始当成商业软件, 其中有一部份就离开再行开发出非营利的译码程序, 那就是XViD。(大概这也就是为何要把 DivX 倒过来写的原因!)
divx和xvid_XviD -几经波折的诞生记
4 年以前, 在 PC 上能用的唯一 MPEG-4 编码器就是由微软所开发的, 包括 MS MPEG4 V1、MS MPEG4 V2、MS MPEG4 V3 的系列编码核心。其中前面两种都可以用来制作 AVI 档案, 至今都作为 Windows 的默认组件。不过 V1 和 V2 的编码质量都还不太好, 直到 MS MPEG4 V3 开始, 画面质量有了显着的进步。不过微软却决定仅将这个 MS MPEG4 V3 的视频编码核心封闭在 Windows Media 流媒体技术, 也就是我们熟知的 ASF 档案之中, 不再能用于 AVI 档案。ASF 档案当然有一些好处, 但是过于封闭甚至不能被编辑, 惹恼了天不怕地不怕的电影骇客。很快便有小组修改了微软的 MS MPEG4 V3, 解除了不能用于 AVI 档案的限制, 并开放了其中一些压缩参数,由此, 也就诞生了我们今天所熟悉的 MPEG4 编码器 DivX 3.11。DivX广泛流行, 成为 DVDRip 的标准, 问题是, 它的基础技术是非法盗用微软的,只能在地下里流传却上不了台面, 无法进行更广泛的产品化, 更无法生产硬件播放机。在这种情况下, 一些精通视频编码的工程师 (包括原 DivX 3.11 的开发者) 成立了一家名为 DivX Networks Inc. 的公司, 简称 DXN。DXN 发起一个开放原始码项目 Project Mayo, 目标是开发一套全新的、开放原始码的 MPEG4 编码软件。特别是完全符合 ISO MPEG4 标准的 Open DivX CODEC 吸引了许多软件高手参与, 并很快开发出Open DivX 编码器和译码器原型, 之后又开发出更高性能的编码器 Encore 2 等等。这一时期, 主要编码工作是 DXN 的人在做, 而许多技术难关的解决得力于来自开放原始码社会的帮助。
就在一切都看起来进展顺利的时候,好戏上演了。Project Mayo 当然是开放原始码, 但不是依据 GPL (通用公共许可证, 一种开放原始码项目中常用的保障自由使用和修改的软件或原始码的协议) 。DXN 在设计授权协议时留了一手, 2001 年 7 月, 就在 Encore 2 基本成型, 差不多可以产品化的时候, DXN 另搞了一个 DIVX.COM 网站, 封闭了原始码, 发布了他们自己的 DivX 4。DivX 4 的基础就是 Open DivX中的 Encore 2, 但利用了 DivX 的牌号, 可以说出乎意料的摆了所有人一道。由于DXN 不再参与, Project Mayo 陷于停顿, Encore 2 的原始码也被 DXN 从服务器上撤下。经过激烈的争论, DXN 当然承认 Encore 2 在法律上是开放的, 但仍然拒绝把它放回服务器。开放原始码社会就这样被狠狠地涮了一回。
Open DivX 尚不能实际使用, 而 DivX 4 (以及后续的收费版本 - DivX 5) 等等都成了私有财产, 许多人为打破微软垄断而无偿付出的智能和劳动仅仅是帮助了 DXN发财, 这种结果当然是不能被接受的。为此, 整个 0dayz 组织永远的拒绝了 DXN 公司的 DivX45, 而原 Open DivX 开发组中的幸存者, 逐渐重新聚拢开发力量, 在最后一个 Open DivX 版本的基础上, 发展出了 XviD。
劫后余生的 XviD 到线在又度过了近 1 年时间, 它继承并发展了 Open DivX Encore 2, 性能得到极大提高, 被认为目前世界上速度最快的 MPEG4 CODEC。XviD重写了所有代码, 并吸取前车之鉴依照 GPL 发布 (注意不再是 LGPL, 所以谁要是想用它做成产品而不开放原始码是非法的) 。不过, 因为 MPEG4 还存在专利权的问题, 所以 XviD 只能仿照 LAME 的做法, 仅仅作为对如何实现 ISO MPEG-4 标准的一种研究交流, 网站上只提供原始码, 如果要使用就要自己编译原始码或者到第三方网站下载编译好的可运行版本。
想当初 Gaj 之流的几个家伙搞 Open DivX 的时候, 一开始是很像一个像模象样的开放原始码项目, 很多人都被吸引过去一起开发, 测试。直到后来, 那几个家伙一夜之间露出骗子的本来面目了, 把 Open DivX 的成果一股脑带走, 变成了封闭原始码的 DivX4, 而后进一步变成现在的收费的 DivX 5 了。本来很好的 Open DivX 被逼流产, 不过也就促成了今天 XviD 的诞生、发展和壮大。现在的 XviD 更可以说超越了 DivX 5, 以更好的质量, 更强的功能挑战着新一代的 MPEG4 应用战场。
丰富多彩的技术特性
不仅 XviD 的出线本身就是开放原始码社会中典型的一部教科书, 它在技术上的各种新特性也都是货真价实、童叟无欺的。对于一个第二代的 MPEG4 视频编码核心来说, XviD 的各种算法设计都有代表性的先进意义。
多种编码模式:
除了最原始单重估定码流压缩 (1-pass CBR) 之外, XviD 提供了包括 : 单重质量模式动态码流压缩、单重量化 (Quantization) 模式动态码流压缩、和包括外部控制和内部控制的两种双重 (2-pass) 动态码流压缩模式。XviD 显然是目前 PC 上的MPEG4 编码核心中, 可选模式最多的视频编码。
其中特别是双重 (2-pass) 动态码流压缩模式, 通过检测画面运动幅度以最优化的方式曲线分配画面量化幅度, 使充满活性元素的视频影片可以在占用空间和画面质量之间获得最佳的平衡。而单重量化Quantization) 模式动态码流压缩, 可以高速地一次性生成可控画面细节的动态码流视频档案, 在较少的压缩时间代价之下, 可以获得较稳定的画面细节质量, 这都是单纯的 DivX 3.11 所不具有的优秀功能。
量化 (Quantization) 方式和范围控制
量化 (Quantization) , 简单的说就是在编码时通过对时间或空间上相邻的画面单元进行同化、模糊细节的程度, 是对画面质量最基本的控制因素。XviD 不仅提供了标准的 MPEG 量化方式, 还特地提供了更适合低码流压缩的 .h263 量化方式。并且XviD 还可以在双重 (2-pass) 运算时, 根据对画面信息的综合分析, 动态的决定某段场景的画面量化方式, 真可以说是为网络媒体档案传播中, 空间与画质的平衡而考虑, 设计贴心得到家了。
除了量化方式选择, XviD 还提供了强大的对压缩过程中的量化幅度的范围控制。用户可以选定压缩时允许使用的量化幅度范围。例如设定一个量化的上限, 就可以避免可能出线的画质大幅下降的情况。
运动侦测(Motion Search) 和曲线平衡分配 (Curve)
对画面逐帧进行运动侦测, 以及对全片段的运动侦测结果进行分析后, 重新以曲线平衡分配每一帧的量化幅度, 以做到 : 需要高码流的运动画面可以分配更多空间、更高的码流、更低的量化幅度来保持画面的细节; 而对于不包含太多运动信息的静态画面, 则消减分配预算。这种把好钢用在刀刃上的做法, 是 XviD 做为第二代MPEG4 编码的核心内容。
XviD提供了多极运动侦测精度, 包括半像素插值 (half pixel interpolation) 的技术以 16x16 像素的微区块为单元标示上运动向量; 以及 4 分运动向量 (inter4v motion vectors) 的方式, 以 8x8 的像素区块为单元更细致的纪录运动向量以供二重分析。
动态关键帧距 (I-frame interval)
动态关键帧距是另一个 XviD 所具有的, 在空间和画面之间获得最大平衡的技术。我们知道在视频压缩中不是每一帧都记录着全部的画面信息, 事实上只有关键帧记录着完整的画面信息, 而后续的 P 帧 (P-Frame) 仅仅是纪录下与之前一帧的差值。如果关键帧之间的画面变化很大, 则会浪费宝贵的空间在 P-Frame 上; 而加入把变化很大的那一帧记录在关键帧里, 那幺由于后续的帧不再有更大的变化, 就可以节省P 帧所需的空间。因此, 根据画面镜头切换和运动幅度来变换关键帧的位置, 对于视频压缩下的画面质量提高, 就有着事半功倍的效果。
心理视觉亮度修正
除了基本的 MPEG4 编码外, XviD 还提供了不少附加功能。其中典型的就是心理视觉亮度修正。这个功能可能通过去除肉眼不能分辨的亮度信号和亮度差异, 来提高压缩效率。遗憾的尽管这个设计非常的有创意, 但是目前的实际应用中却会导致肉眼可见的画面质量下降, 还期待在日后的版本中可以有所改进。
演职员表选项
另外一个贴心的设计是电影专用的"演职员表选项"。这个功能可以在用户指定的某些不必要保留细节的段落处 (例如电影的演职员表) , 设定下极低的码流。甚至压缩到正片码流的10%以下, 可以节省不少空间, 设计的也非常的贴心。
外部自定义控制
除了 XivD 自己的内部曲线分配控制方式外, XviD 也提供了外部的开放接口。允许使用者略过 XviD 本身的编码分析核心, 利用第三方提供的外部分析工具, 例如GordianKnot, 生成的分配好的控制档案, 再交还 XviD 做最终的二重运算压缩。这种方式扩展了 XviD 的可用性和用户控制程度, 因为像 Gordian Knot 这种软件甚至可以做到由用户控制每一帧的量化幅度和码流分配额度, 可以为高级应用提供更多的可能性。
运动向量加速 (Hinted Me) 编码
XviD 还有专为提高编码效率而开发的设计, 就是纪录下画面的运动向量信息至一个 Log 档案中。再在二重运算压缩时通过直接读取该档案中的信息, 节省下对运动向量信息的重复运算, 大幅提高编码速度。
画面优化译码
不仅在编码上 XivD 拥有强大的功能, 在译码时的画面优化方面, XviD 也有很多新的建树。例如 "Horizontal deblock (Y)" 可以柔化水平方向的亮度马赛克; "Horizontal deblock (C)" 可以柔化水平相的色度马赛克; "Deringing(Y)" 可以柔化环状亮度色斑; "Deinging (C)" 可以柔化环状色度色斑; "mosquito" 可以减少画面中的蚊状噪斑。并且, 这些 XviD 的画面优化手段都是可选的, 因此只要关闭
几个不是那幺必要的选项, 就可以在低配置的PC机上播放。
正在开发的 B 影格
另一个 XviD 中引人注目的技术发展, 就是 B 影格。我们知道 I 影格就是关键影格, P 影格在关键影格之间, 只储存与之前一幅已解压画面的差值。B 影格与 P 影格的原理一样, 但除了三者之前解压了的画面外, 亦会参考后面一影格中的画面信息。因此 B 影格解压出来的画面比P影格就要来的好。
之前的 MPEG4 编码核心都仅仅使用了 I 影格和 P 影格存储画面。如果能在此基础上使用 B 影格技术, 自然可以在画质和压缩比上更上一层楼。目前 XviD 已经为开发人员提供了测试性质 B 影格体验版的 XviD 编码核心, 相信不久的将来, XviD 就可以把 MPEG4 编码的优势发挥到极致, 成为网上视频记录格式的盟主。