xvid 详解 代码分析 编译等

1. Xvid参数详解


众所周知,Mencoder以其极高的压缩速率和不错的画质赢得了很多朋友的认同!

原来用Mencoder压缩Xvid的AVI都是使用Xvid编码器的默认设置,现在我来给大家冲冲电,讲解一下怎样使用Mencoder命令行高级参数制作Xvid编码格式AVI影片。经过测试,可以毫不夸张的说:在减小50%的文件体积同时能够保持原有画质!

大家平时用WisMencoder压缩电影的时候也许会感觉到虽然它速度飞快,但是关于Xvid编码器的设置却少得可怜!并没有完全发挥出Xvid编码的优势!

这里仅仅讲解WisMncoder的手动参数,其他设置还需大家自己完成。压缩过程中的视频码率建议不要超过192Kbps(因为对于加入了手动参数的Xvid编码器,画质提升是相当明显的),强烈建议用2-Pass压缩!

首先介绍一下这些高级参数的作用:

cartoon——卡通模式
vhq=4——VHQ MODE,有0-4五个值,越大画质越好,但是编码速度越慢
chroma_me——动态检索
max_key_interval——最大关键帧距离
Quant_type=mpeg——量化矩阵,Mpeg模式,如果压缩时去掉这段就默认量化矩阵为H.263
trellis——高质量量化模式
GMC——全域动态补偿
qpel——四分之一像素精确动态补偿(如果使用了该功能则可能降低解码速率,建议不用)
bvhq=1——在B帧上启用VHQ
lumi_mask——加大画面明暗部分压缩率(一般不用,有时会导致画面失真)
greyscale——使用灰度,但是便出来的画面是黑白的(一般不使用)
interlacing——隔行处理,适用于交错片源(一般不使用)
chroma_opt——色度优化

Quantization量化选项(关键的关键就在这里!)
量化器级别(quantizer level)即Q值越高画面细节越丰富,但是在低码率下越高的量化器级别,会带来越低的画面质量,Q 值越小,质量越好,码率越大;Q 值越大,质量越差,码率越小。(实际上,它的原始概念更复杂,我们干脆简单地认为1就是100%原质量,31就是1/31的原质量好了)。P-frame(即未来单项预测帧)建议设置在1--15之间,(它的作用是只储存与之前一个已解压画面的差值。即仅仅描述它与前一帧的区别)。I -frame(即关键帧)的Q值只用能作用于2pass-second压制上,在VirtualDub被标示为 [K],关键帧是构成一个帧组(GOP, Group of Picture)的第一个帧。I-Frame 保留了一个场景的所有信息(Keyframe原意是指可以单独解码、用于同步的 frame,不过在MPEG系统中只有I-frame有这个特性,因为BF和PF都是预测帧,要靠I-Frame来还原)。B-frame(即双向预测帧)除了参考之前解压过了的画面外,亦会参考后面一帧中的画面信息。这三个设置的范围都是1-31,应该注意的是在场景昏暗的条件下不要让B-frame 过低。

min_iquant=1——IF的量化最低值(取值范围在1-31之间)
max_iquant=10——IF的量化最高值(取值范围在1-31之间)
min_pquant=1——PF的量化最低值(取值范围在1-31之间)
max_pquant=10——PF的量化最高值(取值范围在1-31之间)
min_bquant=1——BF的量化最低值(取值范围在1-31之间)
max_bquant=30——BF的量化最低值(取值范围在1-31之间)

-sws 9 取值范围在(0-9)之间,不同值代表不同的Resize算法!建议用 -sws 9
0 快速二次线性(默认)(速度较快)
1 二次线性
2 二次立方(质量很好)
3 实验中
4 最短距离 (bad quality)
5 区域
6 亮度二次立方 度二次线性
7 高斯
8 sincR
9 lanczos(速度较快,而且画面锐利)
10 双三次样条曲线



实际应用举例:


vhq=4:cartoon:chroma_me:min_iquant=1:chroma_opt:min_iquant=1:max_iquant=12:min_pquant=1:max_pquant=12:bvhq=1:min_bquant=1
添加到WisMencoder的手动参数中的视频编码处,如本楼底部图片:

然后再把 -sws 9 参数添加到视频滤镜处即可!记得-sws 9前一定加个空格,要不编码器不会启动!

当然你也可以自己摸索适合的方案,做出效果更佳的方案!

Xvid大概介绍:(个人认为XVID编码比DIVX编码的画质更好,故只讲XVID的参数。了解以下内容对转换影片有一定帮助,尤其是要放在硬盘上用PC观看的视频,当然对转换成手机观看的影片也是有好处的,使你不至于盲目的转换)
(此文是参照电脑杂志上的介绍而写,在此感谢写出那篇文章的作者。所涉及到的图片是自己抓的,文字也是一个一个字打出来的,并非从网上转抄,我无非是想让有兴趣于此道的朋友更多的了解xvid这个编码器)
如果在网页上看不太清楚的图片,请下载到个人电脑上查看
xvid有两种编码方式:single pass和twopass
single pass模式编码简单,速度也快,但最终效果不如twopass。
twopass就是视频压制需要经过两次编码,分别为twopass-1st pass(简称1pass)和twopass-2nd pass(简称2pass)
1pass时,编码器会用最高质量编码采集可供第2次运算参考的画面信息,而在2 pass时。编码器会根据第一次压缩获得的信息和用户指定的文件大小,自动分配比特率,使需要高流量的运动画面分配到更多的空间,更高的比特率来保证画面质量。相对的,对于那些不包含太多运动信息的静态画面则用较低的比特率。追求画质的朋友当然会选择这种方式,但运算比single pass更费时。

接下来介绍一些基本概念:
Q值——量化值,它被用来描述1帧的质量,每帧都有一个Q值,取值范围在1-31之间。Q值越小,画质越好,比特率越大
I-frame——关键帧,常被缩写为IF。关键帧是构成一个帧组的第一帧。IF保留了一个场景的所有信息
P-frame——未来单项预测帧,缩写为PF,只储存与之前一个已解压画面的差值
B-frame——双向预测帧,缩写为BF,除了参考之前解压的画面以外,也会参考后一帧的画面信息


第一步:Profile@Level(框架级别)设置
选择Profile@Level旁的more按钮来进行框架设置。Profile@Level里方案的层级越低,编码的比特率及分辨率限制的越多。在制作 DVDrip时一般选择AS@L5或者unrestricted(不限定比特率,让编码器自行分配)。我在制作手机影片时通常选用AS@L5,因为可选择的方案更多,而且比特率可自己随意调节,只要手机能跑的动就行!!
(注意:在single pass模式下,Profile@Level的设定无效,由编码器自行分配比特率)



第二步:Encoding type(编码类型)设置 (这里是重中之重)
第1种方式:
single pass,求快可以用这种一次性编码来压缩视频。但因为每帧的压缩率相同,流量自行分配,所以压缩后的视频容量无法控制。 single pass有Target quantizer和Target bitrate两种模式,在主界面的Encoding type里先选择 single pass,再点击左下方的Target XXX按钮在两种模式中进行切换
名词解释:
Target bitrate——目标比特率模式。选择平均比特率编码,相对容易控制文件大小。
Target quantizer——目标Q值模式,采用动态比特率编码。设置为“1”是最高质量,31是最低质量。设置为2是容量与效果的最佳比,但文件体积很大,可以设置小一点的数值,例如2.5,如果不确定,可以按主界面上的“calc”按钮计算目标容量大小(详细的计算方法请看下一节)






如何用calc计算容量:
Target size:目标容量的大小,举例来说,如果我们想将视频容量控制在1CD以内,由于1M等于1024KB,所以其值不能高于716800KB。
subtitles:选择此项能将外挂字幕的大小纳入计算
container:按照你想制作的最终视频格式选择
video:设定视频长度及fps
Audio:设定音频格式


第2种方式:
为了保证视频的质量,很多时候我们会选择twopass模式来压缩视频
step 1:
在主窗口的“Encoding type”下拉菜单中选择1pass模式,再点击旁边的more按钮。在弹出的窗口中勾选 “Discard first pass”(不输出第一次运算结果)否则可能生成一个高达几GB的无用文件。 “full quality first pass”是指优质进行1pass,通常这是没必要的,这样反而会降低1pass的编码速度






step 2:
再返回到主窗口,在“Encoding type”下拉菜单中选择2pass模式,点击旁边的more按钮进行设置。
首先点击“stats filename”这一栏的按钮,选择在1pass编码时生成的*.pass文件。
其余讲解请看图






以上介绍了两种编码方式,现在讲一下视频的优化:
01.Advanced Options:
Motion search Precision(运动检索精确度):设定运动检测的精密度,数值越高,文件转换时间越长,建议选用“6-ultra High”
VHQ mode(VHQ模式):根据人类视觉特性进行建模,可以使肉眼可分辨的区域压缩的好一点,从而提升肉眼所见部分的视频质量。若想效率与质量兼顾,可以将VHQ设置为1,若想求得最佳画质则可以将VHQ设置为4
Use VHQ for bframes too:对BF也使用VHQ模式
Use chroma motion:使用chroma(色度)信息来动态计算,虽然会增加编码时间,但可以有效地防止色块和亮块,建议选择
Turbo:开启BF时可以提高编码速度,但会降低一点画质,不建议选取
Frame drop ratio(丢帧率):保持为0,因为我们希望每一帧都被编码
Maximum I-frame interval:最大IF帧距,一般为帧率的10倍。例如一段视频的帧率为24,则该处就填写240,最好是维持为240,这样可确保每240帧就会有一个IF。如果场景变换侦测出需要插入IF的帧数小于这个值的话,它就会重新计算




02.Quantization(量化)设置:
设定IF/PF/BF最小及最大Q值,从XVID1.1开始,它的流量控制做的很好,在比特率足够的情形下,不会出现过高的Q值,保持默认可防止目标容量超出或者小于设置的情况。但在single pass模式下设定Q值是无效的
Trellis quantization:在2pass模式下可以提升画质,但在single pass模式则会使画质有一些下降,容量也有所减少




03.Debug设置:
Performance optimizations:性能优化,可以选择特定的cpu指令集优化,建议选择第一项
Fourcc used:默认值是xvid,改变此设定可以让你使用divx等其他播放filter来播放,但有时会不兼容,建议不修改此项设置



04.Zone options设置:
zone其实就是将影片划分为几段,分别为这些片断定制一些设置(此项设置用于转换pc上观看的影片较多,在此不作细讲)
小提示:如果在片头之类非重要片段使用Quantizer模式,应该在1pass中也使用相同的设置。而若要用Weight模式则只需要在2pass中设置即可



至此,xvid的参数设置已讲解完了,有兴趣于此道的朋友可以多作尝试,找出适合你的具体参数。
我先献丑了,把自己的参数设置提供给大家
手机机型:QD
片源:一般都是网上下载的AVI文件
转换软件:TMPGEnc3XP
视频编码器:xvid
编码参数:帧率:15fps ,码率:128-160kbps(动画片的码率有时更小) 编码方式:single pass(上传到论坛的视频都是用的 single pass,主要是为了节省时间,而且手机不能支持较高的码率,故个人感觉在此single pass和twopass差别不大。如果用于 pc上,还是建议用twopass) 其余的设置均是参照上文
音频编码:MPEG Layer-3 32000hz ,48kbps CBR ,Mono
滤镜:只在加字幕文件的时候用到,一般是制作的SRT字幕,滤镜是Text Sub2.23
如果有朋友经常用DIVX编码,请发个帖子作一下详细的介绍,大家交流一下经验!!!


2.

Xvid命令行高级参数详解

Xvid编码高级参数:
压缩过程中的视频码率建议不要超过192Kbps(因为对于加入了手动参数的Xvid编码器,画质提升是相当明显的),强烈建议用2-Pass压缩!
首先介绍一下这些高级参数的作用:
cartoon:卡通模式,非卡通则去掉此参数
vhq=4:VHQ MODE(动态搜索算法),有0-4五个值,越大画质越好,但是编码速度越慢
me_quality=6: 动态搜索精度(6为精度最大值)
chroma_me:动态检索 ,色彩动态评估
max_bframes=0 :B帧最大间距,设为0表示关闭B帧功能
profile=XXX :小于等于15fps设置为sp3,大于15fps设置为asp3
max_key_interval=XXX :最大I帧(关键帧)间隔,一般设置成帧数的10倍
Quant_type=mpeg:量化矩阵,Mpeg模式,如果压缩时去掉这段就默认量化矩阵为H.263
trellis:高质量量化模式
GMC:全域动态补偿
qpel:四分之一像素精确动态补偿(如果使用了该功能则可能降低解码速率,建议不用)
bvhq=1:在B帧上启用VHQ
lumi_mask:加大画面明暗部分压缩率(一般不用,有时会导致画面失真)
greyscale:使用灰度,但是便出来的画面是黑白的(一般不使用)
interlacing:隔行处理,适用于交错片源(一般不使用)
chroma_opt:色度优化 ,色彩最佳化

Quantization量化选项(关键的关键就在这里!)
   量化器级别(quantizer level)即Q值越高画面细节越丰富,但是在低码率下越高的量化器级别,会带来越低的画面质量,Q 值越小,质量越好,码率越大;Q 值越大,质量越差,码率越小。(实际上,它的原始概念更复杂,我们干脆简单地认为1就是100%原质量,31就是1/31的原质量好了)。P- frame(即未来单项预测帧)建议设置在1--15之间,(它的作用是只储存与之前一个已解压画面的差值。即仅仅描述它与前一帧的区别)。I- frame(即关键帧)的Q值只用能作用于2pass-second压制上,在VirtualDub被标示为 [K],关键帧是构成一个帧组(GOP,Group of Picture)的第一个帧。I-Frame 保留了一个场景的所有信息(Keyframe原意是指可以单独解码、用于同步的frame,不过在MPEG系统中只有I-frame有这个特性,因为BF 和PF都是预测帧,要靠I-Frame来还原)。B-frame(即双向预测帧)除了参考之前解压过了的画面外,亦会参考后面一帧中的画面信息。这三个设 置的范围都是1-31,应该注意的是在场景昏暗的条件下不要让B-frame过低。
min_iquant=1——IF的量化最低值(取值范围在1-31之间)
max_iquant=10——IF的量化最高值(取值范围在1-31之间)
min_pquant=1——PF的量化最低值(取值范围在1-31之间)
max_pquant=10——PF的量化最高值(取值范围在1-31之间)
min_bquant=1——BF的量化最低值(取值范围在1-31之间)
max_bquant=30——BF的量化最低值(取值范围在1-31之间)

-sws 9 取值范围在(0-9)之间,不同值代表不同的Resize算法!建议用 -sws 9
0 快速二次线性(默认)(速度较快)
1 二次线性
2 二次立方(质量很好)
3 实验中
4 最短距离 (bad quality)
5 区域
6 亮度二次立方 度二次线性
7 高斯
8 sincR
9 lanczos(速度较快,而且画面锐利)
10 双三次样条曲线

实际应用举例:
vhq=4:cartoon:chroma_me:chroma_opt:min_iquant=1:max_iquant=12:min_pquant=1:max_pquant=12:bvhq=1:min_bquant=1

添加到WisMencoder的手动参数中的 视频编码处,然后再把 -sws 9 参数添加到 视频滤镜处即可!记得-sws 9前一定加个空格,要不编码器不会启动!当然你也可以自己摸索适合的方案,做出效果更佳的方案!


3.

详解Xvid编码格式

XviD简介  XviD是当宿世界上最常用的视频编码解码器(codec),而且是第一个真正开放源代码的,经由过程GPL协
  议发布。在良多次的codec斗劲中,XviD的默示令人诧异的好,总体来说是当前最优异、最万能的codec。
  编纂本段XviD的主要性  近五年来,XviD一向是世界上最风行的视频编码器。估量在BT(BitTorrent)和eMule上至少90%的片子、电视剧是用XviD压制的。可是在中国的情形有些特殊,因为中国的影视发布者喜欢用RMVB名目。
  编纂本段文件扩展名  XviD的文件扩展名可所以AVI、MKV、MP4等。需要声名的是,仅从扩展名并不能看出这个视频的编码名目。好比说一部片子是.avi名目,可是实际上的视频编码名目可所以DV Code,也可所以XviD或者其他的;音频编码名目可所以PCM、AC3或者MP3。
    MP4和MKV名目比AVI更前进前辈,支持更多的功能,好比字幕。AVI视频的字幕需要另外的SRT文件。当前国外绝大大都的影视资源都是AVI名目。
  编纂本段XviD文件的大小  网上的视频资源大都采用固定码率(CBR),所以文件大小很不变,并不会因为资源发布者的差异而改变。
    1. 一集43分钟的剧集,文件大小为350MB左右。按照每季22集计较,一季美剧需要7.5 GB的硬盘空间。
    2. 一集22分钟的剧集,文件大小为175MB左右。
    3. 片子文件的大小由片子的长度抉择。
  编纂本段XviD影视资源的文件名寄义诠释  国外电视剧建造组发布的欧美电视剧,其文件名的具体寄义
    剧名.S季数E集数.集名(有的没有标).旌旗灯号采集源.音频编码(默认的MP3可以不标).视频编码-建造组
    例如:
    Prison.Break.S02E01.Manhunt.HR.HDTV.AC3.5.1.XviD-DiMENSION
    剧名 - Prison Break
    S季数 - S02
    E集数 - E01
    集名 - Manhunt
    旌旗灯号采集源 - HDTV
    音频编码 - AC3.5.1
    视频编码 - XviD
    建造组 - DiMENSION
  编纂本段XviD技术的降生过程  在1998年以前,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 (通用公共许可证,一种开放源代码项目中常用的保障自由使用和自由改削软件权力的和谈)而是LGPL和谈(LGPL和谈:次级GPL(Lesser GPL),与GPL一样,是一种公共许可证。与GPL的最大差异是它许可私有。)。DXN 在设计授权和谈时留了一手,2001 年 7 月,就在 Encore 2 基本成型,差不多可以产物化的时辰,DXN 另搞了一个 DIVX 网站,封锁了原始代码,发布了他们自己的 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 企业的 DivX4/5,而原 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版本的历史  1.0 2002年2月17日 第一版 ,初度发布
    1.0 2002年2月28日 大量的改进和更切确地诠释
    1.1 2002年3月2日 剖析澄清了良多概念
    1.2 2002年3月4日 加进量化矩阵(quantization matrix),移去量(removed quant). 柔和(smoothing) 技术
    1.3 2002年3月8日 关于 Nic's XviD Directshow Filter 的详释
    1.3+ 2002年7月23日 按照Nic's XVID Codec校正填补部分内容
  编纂本段丰硕多彩的技术特征  DivX 跟 XviD 采用不按时设立关头画面来改进原先固按时刻关头画面所造成的动态画面画质欠安的气象,而 2 PASS 的压缩模式使画质加倍滑顺,基本上两种编码的下场差异不大,可是就同画质的文件大小来说 XviD 更省容量,一部1.5小时的片子,DivX 编码的大多为两片 CD,而 XviD 编码的大多仅需一片 CD 容量即可!
    DivX 的版本从 2,3,4 一向跳到 5,原本长短盈利供给网友使用,后来自 DivX 后预备当成商业软件,其中有一部份就分开再行开发出非盈利的译码轨范,那就是XViD。(概略这也就是为何要把 DivX 倒过来写的原因!)
    不仅 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 还供给了壮大的对压缩过程中的量化幅度的规模节制。用户可以选定压缩时许可使用的量化幅度规模。例如设定一个量化的上限,就可以避免可能出线的画质大幅下降的情形。 行为侦测和曲线平衡分配  对画面逐帧进行行为侦测,以及对全片段的行为侦测功效进行剖析后,从头以曲线平衡分配每一帧的量化幅度,以做到 : 需要高码流的行为画面可以分配更多空间、更高的码流、更低的量化幅度来连结画面的细节; 而对于不包含太多行为信息的静态画面,则消减分配预算。这种把好钢用在刀刃上的做法,是 XviD 做为第二代MPEG4 编码的焦点内容。
    XviD供给了多极行为侦测精度,搜罗半像素插值 (half pixel interpolation) 的技术以 16x16 像素的微区块为单元标示上行为向量; 以及 4 分行为向量 (inter4v motion vectors) 的体例,以 8x8 的像素区块为单元更详尽的记载行为向量以供二重剖析。 动态关头帧距  动态关头帧距是另一个 XviD 所具有的,在空间和画面之间获得最大平衡的技术。我们知道在视频压缩中不是每一帧都记实着全数的画面信息,事实上只有关头帧记实着完整的画面信息,尔后续的 P 帧 (P-Frame) 仅仅是记载下与之前一帧的差值。若是关头帧之间的画面转变很大,则会华侈珍贵的空间在 P-Frame 上; 而加进把转变很大的那一帧记其实关头帧里,那么因为后续的帧不再有更大的转变,就可以节约P 帧所需的空间。是以,按照画面镜头切换和行为幅度来变换关头帧的位置,对于视频压缩下的画面质量提高,就有着事半功倍的下场。 心理视觉亮度改进  除了基本的 MPEG4 编码外,XviD 还供给了不少附加功能。其中典型的就是心理视觉亮度改进。这个功能可能经由过程去除肉眼不能分辩的亮度旌旗灯号和亮度差异,来提高压缩效率。遗憾的尽管这个设计很是的有创意,可是当前的实际应用中却会导致肉眼可见的画面质量下降,还等候在日后的版本中可以有所改良。 演人员表选项  另外一个贴心的设计是片子专用的"演人员表选项"。这个功能可以在用户指定的某些不需要保留细节的段落处 (例如片子的演人员表),设定下极低的码流。甚至压缩到正片码流的10%以下,可以节约不少空间,设计的也很是的贴心。 外部自界说节制  除了 XivD 自己的内部曲线分配节制体例外,XviD 也供给了外部的开放接口。许可使用者略过 XviD 自己的编码剖析焦点,操作第三方供给的外部剖析对象,例如Gordian Knot,生成的分配好的节制档案,再交还 XviD 做最终的二重运算压缩。这种体例扩展了 XviD 的可用性和用户节制水平,因为像 Gordian Knot 这种软件甚至可以做到由用户节制每一帧的量化幅度和码流分配额度,可觉得高级应用供给更多的可能性。 行为向量加速编码  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 编码的优势阐扬到极致,成为网上视频记实名目的牛耳。 关于DivX发源的小知识  这种名为DivX 的技术,由一个27岁的法籍影音发烧友罗达(Rota)及电脑黑客基尔(Gej)缔造出来得。
    原本DivX所采的技术并非这两位仁兄发现的,他们只可是是个**天才。跟着Windows的大行其道,微软开发了MPEG-4技术,能够将视频影像文件容量压缩到很小。罗达与基尔将程式重写一遍,但将其更名为DivX,且放在网上随意任人下载。
    微软声称将对所有敦促DivX成长的人、企业作出究查。可是罗达正周全申请将他们的DivX正当化。因为DivX虽然是从Windows的发现出来的,但却没有用过任何微软的技术。而且,他更与美国一些技术人士及财经人员开会,和组新企业 ProjectMayo全力推广DivX。
    其实,DivX是视频DVD的另一种保留体例,要靠DeCSS轨范(注)才能做到。因为DVD自己有防复制的标识表记标帜,让DVD不能随便复制到电脑里,但DeCSS能将它解码,令其可以复制,压缩成DivX片子。针对这一做法,各大片子商当即采纳步履,防止DeCSS外流及散播,但为时已晚,DeCSS在Yahoo!、Google上都能找到。
  若何播放XviD视频  对于大大都用户来说,只要安装暴风影音或者K-Lite Codec Pack就可以顺遂地播放XviD视频了。其实这些播放软件大都是用ffdshow来解码的,所以在播放视频的时辰,Windows义务栏会呈现ffdshow的图标。


4.

XVID内嵌时的参数测试

这是一个XVID编码测试,主要为RAW为AVI的内嵌使用。目标是个头小而画质好。缺一不可。针对其中比较重要的Q值、B值、single pass与Twopass做了较为密集的测试,其他选项尽可能采用了默认值,以便结果更为客观。另比如“Begin with keyframe”等几个少数主要是为修正兼容性的或者色彩优化的选项则被勾选。 概念部分主要参考并拷贝了《[SilkyBible] 视频知识系列》与《XVID 1.0参数详解21b.pdf》。说实话,我看的好痛苦@0@,而且为了便于理解。因此,下面说明或推测时都会以比较极端的例子来说明。如果有理解偏差的地方,大家请无视而pass。然后顺带转告一下偶吧。

  先了解一些必要的概念。看完概念后可以直接看绿色字体的结论。然后反过来看分析。这样思路会较为清晰。

  Q 值——Q 值是指量化值。顾名思义,Q 值用来描述一个帧的质量,每个帧都有Q 值。该值取值范围是1~31。Q 值越小,质量越好,码率越大;Q 值越大,质量越差,码率越小。(实际上,它的原始概念更复杂,我们干脆简单地认为1就是100%原质量,31就是1/31的原质量好了)。具体到一个片子的某一个帧的Q的取值:该值由编码器编码的时候根据该帧的颜色、与跟前/后帧的动态关系等自动确定,例如如果编码器认为该帧很重要,就会提高Q值来压制,以获得更高的质量。当然我们也可以指定它的取值。

  IF——I-frame 的缩写,即关键帧,在VirtualDubMod被标示为 [K] 。关键帧是构成一个帧组(GOP,Group of Picture)的第一个帧。IF 保留了一个场景的所有信息(Keyframe原意是指可以单独解码、用于同步的frame,不过在MPEG系统中只有I-frame有这个特性,因为BF和PF都是预测帧,要靠IF来还原)。具体例子:电影通常1秒钟播放24帧,所以它1秒钟有24幅不同图象。设想有24幅鸟的图象,在第一幅里鸟在图的左侧,然后它逐渐向右移动。在第24帧鸟已经在图象的最右侧了。设想这24幅图象以足够快的速度按顺序播放,那么人眼看来就好象这鸟从屏幕的左侧飞到了右侧。

  PF——P-frame 的缩写,即未来单项预测帧,只储存与之前一个已解压画面的差值。即仅仅描述它与前一帧的区别(虽然描述的不甚准确但相信理解含义并非难事)。比如说有一幅一只小鸟飞过一片有云彩天空的图象,这是个关键帧(keyframe)。然后我们可以使用I帧来这样描述P帧:将小鸟向左和下方各移动一英寸。

  BF——B-frame 的缩写,即双向预测帧,除了参考之前解压过了的画面外,亦会参考后面一帧中的画面信息。B 帧具体怎样描述预测变化很复杂,下面以一个不很恰当的动画例子来说明一下它最主要的存在效果:

  如果一个片子是24fps的,总长度为25分钟、那么它的总帧数为25min*60s/min*24fps=36000帧。这个是固定值。可以全是IF,也可以是IF混合着PF,或者IF、PF、BF都有。但是IF不能没有,都靠它还原呢。哪个个数增多,另外两个就要相应减少。因此,多使用PF可以不减画质下减小体积,加入BF会进一步减小体积。至少理论上是这样的。(BF是双向预测,主要记录变化值,因此可以少记录信息(事实虽并非如此,但就通常的效果来说记录量会减少,而PF是单向,因此记录量通常来说会多些))。除了压缩率以外,B 帧对画质的影响也是有的,因为 B 帧这种参考前后画面的特性,等于有内插(interpolation)的效果,所以可以减少噪讯。

  概念部分终于说完了。OK,下面测试数据正式粉墨登场。请看分析所用的截图:这是内嵌时的状态图。当内嵌完成后把这个最终状态截取。片长1分32秒,30.303 fps,共计2815帧。内嵌所用的AVS脚本为 :==================================================================
LoadPlugin(“D:\Program Files\AviSynth 2.5\plugins\VSFilter.dll”)
AVISource(“D:\Downloads\100\100R.avi”)
textsub(“D:\Downloads\100\100R.ass”)
Tweak(0,1,18,1)
##亮度滤镜(色度,饱和度,亮度,对比度),一般把亮度设为16-18就很亮了##==================================================================

  测试用源文件相关信息(草莓100%的OP),个人认为它各方面比如动态、画面清晰度等均属中等:

     文件 : 39 Mb (39 Mb), 总长度 0:01:32, 类型为 AVI, 1 音频流, 品质 100 %
     视频 : 22 Mb, 2041 Kbps, 30.303 fps, 清晰度: 640*448 (4:3),?DX50 = DivXNetworks Divx v5, 支持
     音频 : 16.86 Mb, 1536 Kbps, 48000 Hz, 2 声道, 0×1 = PCM, 支持

====== 插入一点说明: =====

  常见的DVD影碟的数据流的速率(bitrate)能够达到5000Kbps~10000Kbps,而目前常见的DVDRip通常具有1200Kbps~2000Kbps的速率,此时DVDRip的视觉效果与AVI文件的压缩比能够达到比较理想的平衡状态。如果追求优秀的视觉效果,我们可以将速率提高到2000Kbps;如果希望得到体积更小的AVI文件,可以使用小于等于1000Kbps的速率。另外DVDRip通常采用的采样率为48kHz,音频速率为96Kbps或128Kbps的MP3音频。

  笼统地说,XVID比DIVX的压缩率更高,因此,同样质量的帧,XVID可以用更小的体积来达到。另外,无论DIVX也好, XVID也好,它们原本的用途是把DVD压缩成DVDrip。当我们拿到AVI时,已经是压缩过的啦。那些所谓的2pass/1pass比值等其实是针对DVD to DVDrip而考虑,为了提高2pass/1pass比值而缩小画面大小也是为了DVD to DVDrip而考虑。因此当我们内嵌AVI时,非特殊目的,以拿到与原AVI文件同样画质为最好。低了其实是再压缩,除非你要求更小的体积。因此,用XVID重编码时,强烈建议把目标码率尽可能设置成原文件码率。

  这一段不太容易理解目的所在,我再笼统地进一步说明:假如现在有个DVD需要压缩,我们首先用XVID的Twopass的Twopass – 1st pass高质量预设采样量化值“w1”跑一遍,看看最大能做成多大的。一般在媲美原画质的情况下, XVID可以把DVDrip压到原DVD的1/5至1/10的(大致符合5000Kbps压到1000 Kbps)。如果1pass的结果认为最大能做到688M,那么,在压制700M的光盘时,我们就可以把这个结果做成1CD,就把它压到最大值。但是,有些人就不太方便了,他想得到更小的体积以节省刻盘成本。比如压成344M的2张1CD的文件,此时2pass/1pass=344m/688M=50%(呵呵,这里为了叙述方便,数字很特别),按照大多数人的画质要求,太低了,看过原DVD的人会明显感觉到画质降低了,因此,我们要提高这个比值,但是,作成80%的550M更是浪费。所以,此时,我们可以把画面大小缩小一点,以降低每一帧所占的体积。缩小画面尺寸,使画面的精密程度提高,使整体的大小下降。假如1个象素点占1K,那么720*680肯定比640*480画面来的大。再次1pass得到了可以作成最大430M的结果,然后2pass/1pass=344m/430M=80%,较高的比值。该压缩率下的画质降低已经很难觉察啦。具体换算我就不说了,这里主要是为AVI的内嵌做解说。(因此,这里给我们的片源同志提个醒,靠内嵌来修饰缺陷并不完全可取,为了保证内嵌质量,请大家尽可能的找些高画质的AVI片源吧。)

  下面是1pass的结果截图,这里并不需要看那个1pass状态文件的——video.pass。(注意一下:这里1pass认为最大值为17M,但设成85%原码率或者称为85%原大小后,目标文件的大小变大了,这是因为在Twopass模式下2pass认为以Q3为预设采样量化值采样,达到这个码率才足够;我们再看2pass-q3-21m-2086kb-b2.jpg的截图,虽然设置为理论上的原码率,但结果变小了,同样压成了1530fbps的。可见这里2pass优先了预设采样量化Q=3值,这里只说Q值,是因为后面有其他的情况出现)


  当2pass/1pass的比值低于65%的话,画质损失会比较容易看出来(尽管这一点不是100%正确)。因此,2pass测试中,对于这个好画质的临界值85%特别照顾了一下,虽然它是为了DVD to DVDri而存在,这里也给予一些测试好了。而21M的设定则是因为它理论上的帧速近似等于原文件帧速2041 Kbps,故此也特别给予照顾。

文件命名格式及由来(不标明2 pass的均为single pass模式):

1、2pass-q3-17.8m(85%max)-1661kb.avi
依次为:Twopass – 2nd pass、预设采样量化值、2pass/1pass比值85%的理论大小、理论帧速

2、2pass-q3-14.5m(85%max)-1343kb-b2.avi
依次为:Twopass – 2nd pass、预设采样量化值、2pass/1pass比值85%的理论大小、理论帧速、使用BF=2

3、2pass-q3-21m-2086kb.avi
依次为:Twopass – 2nd pass、预设采样量化值、与原文件同样帧速的理论大小、理论帧速

4、2pass-q3-21m-2086kb-b2.avi
依次为:Twopass – 2nd pass、预设采样量化值、与原文件同样帧速的理论大小、理论帧速、使用BF=2

5、q2-q3.avi
依次为:目标采样量化值、预设采样量化值。

  另外要说明的是所有不加BF=2的文件的帧个数比大致均为:IF:PF =72: 2743(72+2743=2815); 所有BF=2的文件的帧个数比大致均为:IF:PF:BF=70:1172:1573(70+1172+1573=2815)。有变化也是几个到十几个帧的变动,可以忽略不记。这估计是原文件帧结构和XVID的“帧类别使用与压缩”判断机制所引起的。 以下测试均BF=2。原因是有效降低了大小,并可能增进了一点点的画质,如果使用BF后的文件与不使用BF的文件同样码率,想必使用BF的总平均帧质量要比不使用的高,总体质量也就要高。不过是不是属于无效增大质量呢?很有可能的。那么就看看q2-q3-b2与q2-q3的区别:IF单帧最大提高从44273B提高到了44290B,平均大小从20272提高到了20332;PF的单帧最大没有变化,但分析q2-q4-b2与q2-q4时也提升,所以可以认为是软件误差,单帧最小也从148提高到了154,平均大小从7432提高到了11768。而且,IF的帧个数并没有被改变。这里的2帧同样应该是软件误差。而发生改变的只有PF的个数。所以可以认为使用BF后,IF、PF被整体提升了质量,以保护BF的质量。顺带也就提升了整体质量。

  至于在同样码率下,是不是出现无效增大质量呢?如果XVID确实比DIVX的压缩更具效率,那么,就确实可能存在很少的无效质量。不过,两个家伙能力应该比较接近。那么也可大致认为需要码率接近。虽然其BF威力比DIVX的貌似更大一些。如果原文件也是XVID编码,那么就更可认为码率要接近。又因为前面的分析,压缩比是针对DVD to DVDrip的,因此,当前考虑的首要不是再次降低块头。而且BF的前后参考性又可以某种程度上降低噪音。所以就这样认为吧。对于这一点,我想还应该有更强的分析工具来确定判断,很抱歉,限于能力,不能进一步分析了。如果有哪位朋友知道还请赐教一下。

  以下均以不二次压缩为根本。即是码率保持不变。全部靠拢原帧速:2041kbps。

1、 在single pass模式下:

  当以Q3为为预设采样量化值, BF=2时:目标采样量化值为Q值时,q2、q3、q4截图一模一样,IF、PF的结果Q值都等于预设采样量化Q值,BF则还要低2个数量级左右;目标采样量化值为目标指定帧速(设为原帧速)时,2056kb-q3-b2的实际帧速为1531kbps,比q3-q3-b2的1530kbps仅仅提升了1kbps。看来是“以Q3为预设采样量化值”限制了了目标采样量化值的设定。预设采样值为Q3的质量弱于原帧速采样。

  当以Q2为为预设采样量化值,BF=2时:目标采样量化值为Q值时,q2、q3、q4截图一模一样,IF、PF的结果Q值都等于预设采样量化Q值, BF则还要低2个数量级左右;目标采样量化值为目标指定帧速(设为原帧速)时,2056kb-q2-b2的实际帧速为2072kbps,与q2-q2-b2帧速以及截图都一模一样。证实了“以Q2为预设采样量化值”则充分满足甚至超过了目标采样量化值的设定。预设采样值为Q2的质量强于原帧速采样。

  另外从XVID的压缩算法本质上高于DIVX上来看,高于原帧速的采样应该属于无效。所以本轮由2056kb-q2-b2参加半决赛。


  当以W1为预设采样量化值时, BF=2时:目标采样量化值为Q值时,结果文件的IF、PF、BF的Q值随Q值增大而成比例增大,因此就以q2-w1-b2(实际帧速为2072kbps)参赛;目标采样量化值为目标指定帧速(设为原帧速)时,结果文件的实际帧速是1951kbps。两个比较后,2056kb-w1-b2的IF单帧最大质量(65313B)比q2-w1-b2(63368B)提高了近200B,PF单帧最大质量(87371B)比(70758B)提高了近1300B,BF单帧最大质量(34570)比(24871B)提高了约1000B,另外,无论IF、PF、BF其平均大小却均下降,说明目标采样量化值为Q值限制了XVID的动态压缩能力发挥。故此预设采样为Q2的质量的有效率弱于原帧速采样。应该属于无效增大。

  所以更好的 “2056kb-w1-b2”来参加半决赛。

2、 在Twopass模式下:

  以Q值=2为预设采样量化值时,BF=2:无论是以大小(设成高与原大小或者低于原大小)还是以帧速(设成原帧速)作为目标量化值,状态截图均一模一样,实际帧速均为2072fbps。看来,2pass下,以Q值=2为预设采样量化值时,结果文件实际帧速只与Q值成比例。而且,可以看出Q=2时,达到了原帧速。为了验证这一点,以Q值=3为预设采样量化值时,BF=2再次测试,发现截图同样一模一样,帧速降为1530 fbps。证明猜想成立。那就随便选了“2pass-2056kb-q2-b2.jpg”出局半决赛。


  以W=1为预设采样量化值时,BF=2:无论是以目标大小为目标量化值的提升(从结果看来,其实质还是在提升目标帧速),还是目标帧速的提升,都带来了实际文件帧速的提升。而且IF、PF、BF的实际Q值也在提升,比如IF: 2pass-w1-23.8m(85%)-2298kb-b2比之2pass-w1-21m-2086kb-b2其Q值范围虽然为1-3没变,但平均Q值从2.23提升到2.06;IF单帧最大63372字节虽然没变,但是平均单帧大小从24597字节提升到了25725字节。PF的Q值范围则从2-3提升到了1-3,平均Q值从2.66提升到了2.31;PF单帧最大倒是从68540减小到68472,不过从后面来看,这应该是属于软件计算误差,其平均单帧大小从15119提升到了16828。BF的Q值范围虽然为3-5没变,但平均Q值从4.44提升到4.10;BF单帧最大从21083字节提升到了23319字节,平均单帧大小也从2087字节提升到了2251字节。

  同样:2pass-2056kb-w1-b2比之2pass-w1-23.8m(85%)-2298kb-b2进一步提升。而且是全面提升,另外,其实际帧速为2027 fbps。因此,这里就派2pass-2056kb-w1-b2参加半决赛。


3、 半决赛与决赛:

  上下对比,2056-q2-b2与2pass-2056kb-q2-b1的状态截图是一模一样的。先放弃2056-q2-b2,直接对比2pass-2056kb-q2-b2与2pass-2056kb-w1-b2。比较后:那么以Q2或者W1为预设采样量化值,到底哪一个更好?原则上Q1的比Q2的更好,如果只有少量Q1,似乎我们也注意不到,如果把这部分更高码率的品质稍稍降低一点,补贴给Q2部分,似乎整体质量会有所提高,而局部稍弱。XVID作为第二代MPEG编码技术,它更强的功能就是品质高的给码率多些,低的给少些。看下面的2056kb-w1-b2的截图:甚至出现了BF的Q值低到了11,我认为这是正确的,因为貌似是静止的白屏,就算我们给予它Q2的质量,也纯属浪费。所以,这样就兼顾了品质与大小。仔细对比2056-W1-B2与2pass-2056kb-w1-b2, 2pass-2056kb-w1-b2的IF、PF、BF的单帧大小最大值均有所减小,但是平均大小却都提高了一点。说,说明2pass-2056kb-w1-b2的Q值分布更为平衡。

  DivX DRF AnalyzerV0951的测试也这样认为(看橙色字色处)。所以我的结论是:相对来说,?single pass 模式不够细致。而Twopass模式则可以充分分析原文件,并得出最佳的画面质量。即削减高峰,增益中间。把全片质量从整体上提升。那么为什么BF的Q值在6-11的一段没有了呢?猜测估计是XVID在Twopass后认为该品质的帧可能会造成烂帧(比如马赛克)。所以提高了它的Q值,以防止烂帧的出现。

=== DivX DRF AnalyzerV0951 的一些测试信息=========================
DivX DRF Analyzer v0.9.5 Report!
File Name: E:\temp\100\2pass-2056kb-w1-b2.avi
FourCC: XVID
Codec: XviD0029
The Video has 2815 frames [ 00:01:32 ]

Average Frame quality is?HIGH?[Average DRF/quantizer is 2.74]
Standard Deviation: Quality is MEDIUM [Std. Deviation is 0.95]
Image Resolution is HIGH
=============================================================

DivX DRF Analyzer v0.9.5 Report!
File Name: E:\temp\100\test\2056kb-w1-b2.avi
FourCC: XVID
Codec: XviD0029
The Video has 2815 frames [ 00:01:32 ]

Average Frame quality is?MEDIUM?[Average DRF/quantizer is 3.27]
Standard Deviation: Quality is LOW?[Std. Deviation is 1.72]
Image Resolution is HIGH

=============================================================

  最终结论:在Twopass模式下以W1为预设采样量化值、并且加入BF=2、指定目标帧速为原帧速的情况最为理想。实际上Twopass模式默认的就是以W1为默认预设采样量化值,以指定目标大小为默认值目标大小量化值,因为XVID原本就是为DVD to DVDrip而设计的。所以这里不考虑二次压缩的时候,应该改为指定目标帧速为原AVI即原DVDrip帧速。


问题一:BF的B值设置为多少比较合适?(这里的B值不是指Q值,而是指2个非BF间最多可以连续插入的BF的个数。)

  其实从开头BF的优越性就可以看出一部分原因了,就是如果连续24个持续1秒钟都是BF,播放时会出现什么结果?又因为BF还需要参考后面的一帧,所以画质会特别烂,而且解码时会出现延时。造成影音不同步。所以:

   1、如果你想获得低于帧速率900kbps的文件,你可以把B值设为3或者更大(不推荐)。
   2、如果你想获得900-1400kbps左右的文件,你可以把B值设为2。
   3、如果你想获得更高品质的文件,你可以把B值选项关掉。前提是你的源文件最好静态多,质量也很高。
   4、如果你有着其他要求,那么,没有必要的情况下,请保持2的默认值吧。

  下面是一些相关设置。没有说明的请保持默认。

问题二:下面再回头想想BF的Q 值,XVID是怎么得来的?

  BF 的Q 值由BF 前后的IF/PF 共同决定。BF 的Q 值=BF 前后的IF(或PF)的Q 值的算术平均数* Quantizer ratio+ Quantizer offset。上边的数据貌似也反映了这个情况。

  BF 是一个能有效提高压缩率的功能,是否降低画质,那要看如何设置了。有的设置压出来的部分BF,Q 值比PF 还低。用最恰当的BF 设置来调节码率,提高整体质量,是非常有效的,设置地恰当的话,会令全片的Q 值分布相当平均,可使DRF 测试中的第二项——Standard Deviation 轻易达到“Quality is HIGH [Std. Deviation is 0.50]”,即动、静态场景的画质一致,不会“静态尚可而动态MSK(马赛克)惊人”。通常情况下,全片BF 含量在30%—55%左右,画面效果与只用I、PF+VHQ4 跑出来的画质无显著差别。即省时又保证质量,所以一般应当使用BF。

  随着XviD 的Frame Type 的不断进步(从0624 版开始FrameType 判断较以前版本已经有了相当大的提高),大动态场景BF 滥用现象(可以参看开头BF的图示,如果画面动态强,变换快,不具备连续性,那么BF就作用不大了)已经得到了较好的抑制(经过实测,在码率充足的情况下,大动态场景基本用IF PF PF PF PF… 来压了),所以BF 可以放心使用。

  Twopass——二重运算。这种编码模式分为两步,首先对画面逐帧进行运动侦测,以及对全片段的运动侦测结果进行分析,然后重新以曲线平衡分配每一帧的Q值,以做到:需要高码率的运动画面可以分配更多空间、更高的码率、更低的Q值来保证画面质量;而对于不包含太多运动信息的静态画面,则可以消减分配的码率。这种把好钢用在刀刃上的做法,是XviD作为第二代MPEG4编码的核心内容。可以说,Twopass模式可以在影片容量与画面质量之间找到最佳平衡点,这也是大多数人都乐意花费更多时间采用这种方式的原因。

  Twopass-1st pass——二重运算,第一次运算。这是Twopass 模式的第一步。在这一步中,编码器会用最高质量编码(默认值W=1)(这里要补充的是,Twopass-1st pass的这个值其实可以指定,并且效果并不相同,有高画质的,也有低的,请看下面的1pass截图),同时收集画面信息,并将这些信息记录信息文件(stats)当中提供第二次运算的时候参考。

  Twopass-2nd pass——二重运算,第二次运算。这是Twopass 模式的第二步,编码器会根据第一次压缩时获得的影片的信息和用户指定的最终文件大小,自动分配码率,低动态的分配得少一些、大动态的分配得多一些,总之尽量保证最终文件大小为用户指定的大小。


5.

DivX和XviD

如今的电影是越来越好看,拍摄、制作的特技效果越来越精彩,人们期待的程度越来越高,盗版也越来越多;同时电影制作公司的防盗版技术做的越来越高明。但有句老话叫:"道高一尺,魔高一丈",无论你的电影多精彩、防盗技术多高明,总是有人偏偏能够把你"盗"出来,而且还"盗亦有盗",在保持"原版原味"的条件下,占用的空间变得越来越小,操作越来越灵活、简单,越来越方便传播。而且这种技术随着版本不断更新,画质越来越贴近原版、压缩速度越来越快、压缩/播放进程对计算机的需求越来越低。这就是DivX时代的新生力量――XviD。




   黑格尔说过"存在即合理"

  随着时代的进步,社会的发展,在计算机视频技术方面更是突飞猛进。如今视频的业界标准已经到了DVD时代。主流的DVD光驱的价格已经降到400元人民币以内。DVD播放机的价格最便宜的已经降到了700元。但是这些都是近期发生的事情,目前仍有一大群only CD-ROM群体,他们不愿意再投资去买DVD光驱,有的甚至由于机器无法再扩充而不能购买DVD光驱。这便促使另一个的解决方案的萌发。

  除此之外,互联网宽带的普及,Adsl宽带入户,P2P软件的泛滥,使得650MB的大文件轻松的实现异地传输。还有正版DVD大片的价格居高不下,也是正版DVD普及化的一大障碍。

  基于以上因素的存在,有一种新的视频压缩技术出现,那就是DivX,即"压缩电影"。压缩电影的技术有很多种,但是DivX最为普及,它广泛流传于互联网与盗版盘。

  随着时间的推移DivX再推出刚刚推出不久,就不断推陈出新,从DivX3.11到DivX4 ,目前最新版本为DivX5.02。本来版本越高,技术也就越高、播放的质量应该更好、更清晰。但是事实告诉我们随着版本的提升,压缩后的播放效果提升不明显,压缩所用的时间越来越长,压缩后的体积没有太大的进步,甚至有的使用DivX5.02压缩以后会出现跳帧的问题。这到底是为什么呢?难道视频压缩技术已经达到顶峰不能够再穿越了么?

  目前又出现一种新的压缩技术名为XviD,在视频业界初见端倪,就目前来看它的压缩时间就是一大卖点,它可以在保持DivX5的画质的基础上,大大提高压缩时间。

  光从名字上看就可以看出Xvid与Divx,他们之间肯定有着千丝万缕的联系,大家一定想知道。下面就为大家谈谈关于XviD的故事。

   Long long ago…

  故事的经过是这样的。

  早在1998年微软开发了第一个(也是唯一的)在PC上使用的MPEG-4(注)编码器,它包括MS MPEG4V1、MS MPEG4V2、MS MPEG4V3的系列编码内核。其中的V1和V2用来制作AVI文件,一直到现在它都是作为Windows的默认组件。不过V1和V2的编码质量不是很好,一直到MS MPEG4V3才开始有好转,画质有了显著的进步。但是不知微软出何居心,却将这个MS MPEG4V3 的视频编码内核封闭在仅仅应用于Windows Media流媒体技术上,也就是说,我们经常看到的ASF流媒体文件中。ASF文件虽然有一些优势,但是由于过分的封闭,不能被编辑,未得到广泛的应用。这便惹怒了不怕天不怕地的视频黑客和置于钻研视频编码的高手。后来,这些小组不仅破解了微软的视频编码,而且经过他们的修改,一种新的视频编码诞生了。那就是广为流传的Mpeg4编码器――DivX3.11。



  随后一发不可收拾,DivX被传得红得发紫,很快就成了业界的标准。但是问题同样很快的出现了,DivX的基础技术是非法盗用微软的,只能在地下里流传,却上不了台面,正所谓"名不正,言不顺",无法进行广泛的发展,即产品化,更无法生产硬件播放机。


   "生产力要改变生产关系"

  在这种情况的迫使下,一些视频编码的高级程序员(包括原DivX 的开发者)组建了一家公司,名为DivXNetworks Inc。这家公司发起一个完全开放源码的项目,名为"ProjectMayo",目标是开发一套全新的、开放源码的MPEG4编码软件。由于它完全符合ISO MPEG4标准,又是完全开放源代码(就象linux操作系统),OpenDivX CODEC吸引了很多软件、视频高手参与。人力、物力大大投入,OpenDivX编码器和解码器原型很快便公布于众,之后又开发出具有更高性能的编码器Encore 2等等。这DivX的辉煌时期。

  虽然主要编码工作是DXN的人在做,但许多的技术难关的突破完全得力于来自开放源码社会的帮助。

  DivX的优势被人们所接受,高品质的DVD电影的容量一般为5GB,但经过DivX编码后的大小只有650MB,仅仅为原DVD容量的八分之一,图像品质却与DVD相当。它可以通过互联网相互传输,还可以报存在一张CD光盘(650MB)上。




   DXN的野心:

  DivXNetworks一直希望DivX能成为好莱坞巨头们选择的行业标准,并可以通过互联网进行传输的视频文件,就像唱片发行公司不得不接受MP3格式,并使用它在网上传输音乐文件一样。DXN希望并计划在网上出售视频内容的公司达成技术转让的协议。但是,到目前为止,它尚未和任何一家主要的、甚至具有影响力的电影制片公司达成这类协议。

  很可惜的是想DivX这么好的电影只能在电脑上播放,目前还没有一款播放机能够播放这样的光盘。日前,DXN已经来到了中国,这家公司的负责人表示,目前有许多美国人都希望能买到采用这一技术的DVD播放设备,但全球还没有人能生产,所以他希望能与中国的DVD制造商携手,在年内拿出产品,并且首先在美国推出。


   "天底下真的好人多么?那么小人算好人么?"

  就在DivX顺利发展时期,DivX的技术逐渐成熟,商机无限的时候,一台好戏上演了。由于DivX的技术不是依据GPL协议(通用公共许可证,一种开放源码项目中常用的保障自由使用和修改的软件或源码的协议),而是LGPL协议(注)。这是DXN公司为自己留的后门。

  2001年7月就在Encore2基本成型的时候,DXN公司突然封闭了DivX的原代码,并在此基础上发布了自有产品DivX4。DivX 4的基础就是开放源代码OpenDivX中的Encore 2,DXN利用了DivX的招牌。DNX公司这么做,可以说是初其不备的摆了所有人一刀。开放源码社会就这样被狠狠地涮了一回,他们是那么的无辜。

  DXN公司趁热打铁,很快推出了DivX5,但是DivX5没有比DivX4强到哪里去,甚至有bug,更可气的是这一版本还要收费。可怜阿,有那么多无偿为DivX技术付出的智慧与劳动的人,可悲阿,他们为一值都在无偿的为DNX公司赚钱。这种垄断和一直处于垄断地位的微软来说,DXN要更恨、更毒。


   人世间还是好人多!正义当头!

  首先是全球整个0dayz组织(注)永远的拒绝了DXN公司的DivX45。

  被人"涮"了一把的开源社团决定另起门户,逐渐重新聚拢开发力量,在OpenDivX版本的基础上,再次开发出一种新的MPEG-4编码、解码软件。这就是:XviD。从技术上来说XviD已经基本上与DivX5接近,或者还有所超越;

   春天来了

  近一年来XviD继承并发展了曾经的OpenDIVX Encore 2,并且使其的性能、效率的到了极大的提升,被认为是目前最快的MPEG4编码。这是因为XviD重新改写了所有原代码,焕然一新。除此之外,Xvid还吸收了前车之鉴,依照GPL发布。(不再是以前DivX的LGPL,也就是说:谁要是想用它做成产品而不开放源码是非法的)而且在2002年,也就是今年,TDX2002(全球最著名的地下电影发行组织,每年在网上放出数千部最新而且高品质影片RIP)已经接纳XviD为官方标准。这样TDX2002就有了两个正式标准:DivX 3.11与XviD。而DivX 4、5像其它封闭的商业软件一样,被永远拒绝。

   报应来了!

  对开源软件下毒手的人远不止DXN一家,目前因为一家商业软件公司盗用XviD源代码,而被迫停止开发。具体的情况请参阅: http://www.xvid.org




   XviD使用技巧:

  关于XviD压缩设置的文章很多,XviD可以调节的选项很细,由于篇幅限制,不再本文的讨论之内。在这里,我推荐大家使用"2-Pass"编码, 因为它能给我们更精确的最终文件大小,并且生成最佳质量的编码 (在文件大小相同的情况下)。



  只安装DivX5的编解码器不能播放由Xvid压缩的电影。但是只安装XviD编码,可以顺利播放DivX5压缩的电影。但是在播放DivX5电影的时候,速度不能让人满意。加上ffdshow(注)之后效果明显改善。看来XviD在播放divX5的还不是很完善。

  虽然XviD到目前来讲与DivX5对战,仍有些身单力薄,优势不是很明显。但是笔者很看好XviD。首先,它是绝对开放源代码,这使得有更多的人投入到XviD的研发之中。还有,它完全重写DivX的原代码,让新的XivD去粗取精、焕然一新;目前XviD的开发人员有很多都是当初DivX的研发人员,对DivX的错误了解得很清楚,重写之后,XivD的地层优势可见一斑。另外,DivX4/5虽然版本不断更新,但是功能提升并不高,优势不明显。XviD是新生力量,而且充满了复仇的力量。祝XviD一路走好。


   XviD版本的历史:

  1.0 2002年2月17日 第一版 ,首次发布
  1.0 2002年2月28日 大量的修正和更准确地解释
  1.1 2002年3月2日 分析澄清了很多概念
  1.2 2002年3月4日 加入量化矩阵(quantization matrix), 移去量(removed quant). 柔和(smoothing) 技术
  1.3 2002年3月8日 关于 Nic's XviD Directshow Filter 的详释
  1.3 2002年7月23日 按照Nic's XVID Codec校正补充部分内容(目前最新版本)


   关于DivX起源的小知识

  这种名为DivX 的技术,由一个27岁的法籍影音发烧友罗达(Rota)及电脑黑客基尔(Gej)创造出来得。

  原来DivX所采的技术并非这两位仁兄发明的,他们只不过是个盗版天才。随着Windows的大行其道,微软开发了MPEG-4技术,能够将视频影像文件容量压缩到很小。罗达与基尔将程式重写一遍,但将其改名为DivX,且放在网上随意任人下载。

  微软声称将对所有推动DivX发展的人、企业作出追究。可是罗达正全面申请将他们的DivX合法化。由于DivX虽然是从Windows的发明出来的,但却没有用过任何微软的技术。而且,他更与美国一些技术人士及财经人员开会,和组新公司 ProjectMayo.com全力推广DivX。

  其实,DivX是视频DVD的另一种保存方式,要靠DeCSS程序(注)才能做到。因为DVD本身有防复制的标记,让DVD不能随便复制到电脑里,但DeCSS能将它解码,令其可以复制,压缩成DivX电影。针对这一做法,各大电影商立即采取行动,防止DeCSS外流及散播,但为时已晚,DeCSS在Yahoo!、Google上都能找到。

   名词解释:

  TDX2002组织
:全球最著名的地下电影发行组织,每年在网上放出数千部最新而且高品质影片RIP。

   0day组织:全球著名的破解组织。其意思为在不到一天的时间里破解软件(自然包括游戏,软件,现在还涉及到其他东西),0Day只是一个统称(和WareZ的意思一样)。成为他们旗下的会员就可以获得他们提供给你的帐号,当然由于要求严格,所以一般是很难进入的!!(这里我只提醒一下,多留意NFO文件里的信息).

   DeCSS程序:乔·约翰森编写的小程序,仅有57K,不仅震撼了好莱坞,还引发了无数的法律纠纷。他创造出来的“小魔怪”,如今已经成了好莱坞制片商们最恨之入骨的冤家对头。DeCSS程序能够将正版加密的DVD影片复制到计算机硬盘上。它还可以将这些影片上传到互联网上。

   MPEG-4技术:是一种崭新的低码率、高压缩比的视频编码标准,传输速率为4.8~64kbit/s,使用时占用的存储空间比较小。目前的DivX(最新的XviD)电影都采用的此技术,现在被广泛采用。

   GPL协议:通用公共许可证,一种开放源码项目中常用的保障自由使用和修改的软件或源码的协议。

   LGPL协议:次级GPL(Lesser GPL),与GPL一样,是一种公共许可证。与GPL的最大不同是它允许私有。

   Ffdshow:一个支持 Xvid、MPEG4-V3 MPEG4-V2 以及 DivX 所有版本所制作的视频文件的播放软件,占CPU 资源比较少。


6.XviD配置参考详解【爆详细】

XviD的主界面
[Top]

Profile @ Level
[Top]
这个选项包含一些预设值,与分辨率和码率有关,按旁边的“more...”按钮再切换到Level标签可以看到预设的数值。因为我们制作的视频并不在其它视频播放设备(比如具备MPEG4解码能力的DVD播放机)中播放,无须考虑设备兼容性,所以这个选项一般可选“不限制”(unrestricted)或者默认的“AS @ L5”。
Zones
[Top]
XviD1.0以前的版本都有一个参数叫Credit,Zones继承并加强了以前的Credit功能,使之可以控制片中任意一段视频。大家知道,电影、动画片尾(或片头)都有制作人员名单 (即Credit,下同) ,而且一般没人会看。而老版XviD中Credit选项的作用就是,允许用户使用较低的质量制作Credit部分,让出更多的码率分配给正文部分,以提高正文部分的质量。而在最新的XviD1.0中,这个Credit选项却消失了,取而代之的是一个新的参数——Zones。在这里,我们可以把Zones理解成“区间”、或者说“片断”。也就是说,我们可以在逻辑上将片子分成许多段,并给这些段落一些“特殊待遇”。
Zones的使用例子
[Top]

上图例子中,0~40640帧是正片,按照正常压缩,所以需要设定W1.00。从40641帧开始是长长的黑白滚动字幕的制作人员名单,因为滚动字幕是非常浪费码率的,所以这里我们设定使用Q8来压缩制作人员名单。Zones界面如上图,本部分参数设置仅为例子,具体设置在下面说明。
Zones的设置

Start frame#——该区间的起始帧,用于指定该区间的范围。该区间的范围定义于起始帧开始至下一区间起始帧的前一帧。若没有定义下一区间,则该区间一直定义至影片结束。
Weight——权重。设置该区间的实际应用码率与原码率的比。比如,如果只想使用原码率的85%编码该区间,那么这里可以填写0.85。如果想使用100%码率(即原码率),填写1.00即可。什么是“原码率”呢?即XviD认为应该使用的码率。如果定义了权重,那么XviD在实际压缩的时候,就会将原码率乘以用户指定的权重,作为该处实际的码率。
Quantizer——设置该区间帧的Q值。可以强迫编码器将这段区间使用某一Q值编码(本选项通常用于Credit部分的编码)。
Begin with keyframe——本区间的第一帧强迫使用IF。一般选择此选项。
Greyscale encoding——使用灰度。编码出的画面是黑白的,适合于黑白画面(比如片尾的黑白Credit),可更加降低本区间的码率。
Chroma optimizer enabled——色度优化,可以改善颜色过渡不自然现象。该选项对画面颜色有优化作用,推荐选择。勾选此项会稍微降低编码速度,所以可以选择仅对Weight设置成1的电影正文部分应用此设置。由于Chroma optimizer是在色度上做文章,所以开启了Greyscale encoding的时候可以考虑关掉 Chroma optimizer,可以在一定程度上提高一些编码速度。
Cartoon Mode——卡通模式。这个模式可以让画面显得更干净一些,但这就意味着要抹杀细节。制作动画的时候可以使用。(下面会有一个小结专门讲解Cartoon Mode)
BVOP sensitivity——BF灵敏度。值越大,使用BF的数量越多。如果设定负值,则会减少BF用量。制作CREDIT段落的时候本参数可以适当设置大一点,用更多的高压缩率BF去压Credits,参数可以考虑20或40。
注意:如果要在Credit使用Quantizer模式的话,要在Twopass-1st pass中也使用相同的设置才有效。而若要用Weight模式则只需在Twopass-2nd pass中设定既可(从某种意义上讲,这样可令Weight模式下的Two-pass-1st pass稍微快一点)。
Zones应用于CREDIT的参数设置建议: 演职员名单的Q值可限定为8或者9,这样既可以保证名单上的文字能够分辨出来,也可以大幅降低Credit这部分的视频文件体积。有时,10分钟左右的Credits压出来也只有6、7MB,这对某些拥有5、6分钟以上较长Credit的1CD DVDRip影片制作来说,帮助是较为明显的。
Zones使用上的心得
[Top]
除非出现极端的现象,否则不建议针对正片(即影片中除广告、制作人员名单之外的正文部分)使用Zones。有些用户喜欢自作聪明地指定许多Zones人为地干预码率控制。实践证明,这种行为是非常不明智的,这样会严重干扰XviD对于码率的控制和计算,只会导致容量失控(Oversize或Lowsize)或画质下降。XviD的码率控制几乎是所有编码器中做得最好的,所以不要担心,把一切交给XviD去做吧。
考虑到观众
[Top]
现在不少影片的制作人员名单采用了带有画面的渐变或滚动字幕,画面通常为一些拍摄花絮或影片插图、设定。考虑到观众的观赏需要,这类名单不适合使用Zones来降低码率。所以,压缩的时候应当时刻考虑到观众的心情。
Cartoon Mode
[Top]
(本部分作者:Bopirit,收录时略有修改)
XviD有个动态判断标准值,指判别画面是否有动态的标准。若高于这个值,则判断画面为动,编码时记载动态信息;若低于这个值则判断为画面不动,不记载动态信息。这个通常很低,就是说,很小一点差别都会判断为动态。
打开Cartoon模式后,这个标志的值会加大,相应的,小的动态变化会忽略。对动画来说,最直接的效果就是消除了浮动的细微噪点(特别是在色块和线条之间,这种噪点即使降噪也会出现)。因为用了Cartoon模式,这些噪点造成的小度变化被忽略掉,因此会省出大量码率。在的实验中,多在8%以上。但是,因为画面的变动相对较大,PSNR会降低(虽然对动画来说这算不得降低),而且对于使用H.263量化的动画,还会让画面感觉更加模糊;而对于MPEG量化,这个Cartoon模式可以有效降低MPEG量化编码动画片的副作用,尽管PSNR降低,但实际上画面看起来更好。可以配合MPEG/MPEG Custom量化方式使用。
Q值
[Top]
Q值是指量化值(依据作者个人习惯不同,这个值在不同文章中的叫法有所不同,比如“量化值”、“量化级别”、“Quant”等等,本文统一称作“Q值”)。顾名思义,Q值用来描述一个帧的质量,每个帧都有Q值。该值取值范围是1~31。该值由编码器编码的时候根据该帧的颜色、与跟前/后帧的动态关系等自动确定。Q值越小,质量越好,码率越大;Q值越大,质量越差,码率越小。(本概念在XVID制作中非常重要,Q值直接关系到影片的画面质量。)
Encoding mode
[Top]

Encoding mode即编码模式。XviD一共提供两种编码模式。一种是Single pass,另一种是Twopass。Twopass分两步,分别是1st pass,和2nd pass。下面对这两种编码模式分别进行讲解。
Single pass
[Top]
Single pass即一次运算,Single pass有两种模式(通过Target xxx按钮切换)Target quantizer(目标Q值)和Target bitrate(目标码率)。Single pass模式编码较简单,速度也很快,但是最终质量不如Twopass模式好。可用于实时采集。
Target bitrate(CBR)——目标码率模式,单位kbps。最简单的单线编码,选择平均码率后编码。文件大小相对容易控制。
Target quantizer(VBR)——目标Q值模式,动态码率。
Two pass
[Top]
Two pass即二重运算。这种编码模式分为两步,首先对画面逐帧进行运动侦测,以及对全片段的运动侦测结果进行分析,然后重新以曲线平衡分配每一帧的Q值,以做到:需要高码率的运动画面可以分配更多空间、更高的码率、更低的Q值来保证画面质量;而对于不包含太多运动信息的静态画面,则可以消减分配的码率。这种把好钢用在刀刃上的做法,是XviD作为第二代MPEG4编码的核心内容。可以说,Twopass模式可以在影片容量与画面质量之间找到最佳平衡点,这也是大多数人都乐意花费更多时间采用这种方式的原因。
Twopass-1st pass——二重运算,第一次运算。这是Twopass模式的第一步。在这一步中,编码器会用最高质量编码(量化值2),同时收集画面信息,并将这些信息记录信息文件(stats)当中提供第二次运算的时候参考。
Twopass-2nd pass——二重运算,第二次运算。这是Twopass模式的第二步,编码器会根据第一次压缩时获得的影片的信息和用户指定的最终文件大小,自动分配码率,低动态的分配得少一些、大动态的分配得多一些,总之尽量保证最终文件大小为用户指定的大小。
注1:不要在第一重和第二重运算之间更改XviD设置(某些特殊项除外)、改变AVS脚本(如果用到AVS)或加入、删除滤镜,这些都将会造成不正确的结果。
注2:计算2pass容量的时候,应使用1K=1024Bytes的换算方法。且计算结果不包含音频大小。
Twopass-1st pass面板
[Top]

Full Quality first pass——全质量第一次运算。在 Twopass - 1st pass 时以你当前的设置进行编码,通常是没必要的。会降低1st pass编码速度。
Discard first pass——不输出第一次运算结果。一般都会打开这项,否则你可能会得到一个容量高达几个G的无用的AVI文件。
2nd pass
[Top]

这个对话框只有在2PASS的时候才可用,其的设置比较复杂,建议保留默认设置。
I-frame boost——
额外分配给IF的码率。如果IF的Q值较小(如1或2),此项可以设置为0。
I-frames closer than... (frames) X ...are reduced by (%)Y(X和Y代表所设定的参数)——意思是,若两个IF的距离小于X(通常是连续的闪电效果或者连续大动态动作场面会出现这种情况),则靠后的IF码率减小Y%。如果IF的Q值较小,Y可以稍微设置大一些(可增加5%~8%)。
Overlflow treatment——码率补偿与缩减。Max overflow improvement和Max overflow degradation控制当编码器遇到不足码率或者码率过大的场景时进行修正补偿的阀值,即超码或不足码到达什么程度,编码器会进行修正。值越大,修正速度越快(即需要修正的帧较少,整体编码速度就加快),但是这可能会造成无法为别的更需要码率帧保留码率。如果Q值波动较大,可以将这个值减小到20~30,这样可能会使预测的文件大小受到影响。除非遇到特殊情况,本功能不建议使用!
Overflow control strength %——控制每个需要补偿的码率过大/不足的帧被补偿多少。除非遇到特殊情况,本功能不建议使用。
Curve compression——曲线压缩。曲线压缩的作用就是将码率较高的帧的码率拉下来,将码率较小的帧的码率提上去,让码率曲线平缓一些。此选项不建议使用,也就是保持默认设置“0”。由于现阶段XviD的动态分配(即曲线压缩)做得不是很好,所以直接采用了一种linear scale(即线性压缩)把1pass的码率曲线直接往下调。除遇到特殊情况外,不建议使用曲线压缩功能。
若想了解更多曲线压缩以及线性压缩的细节,请参阅本文附录《曲线压缩与线性压缩》
Profile标签
[Top]

Quantization type
[Top]
量化方式。此处支持三种量化方式。分别是H.263、MPEG、MPEG Custom。应根据影片的特性确定该选项。要了解这三种量化方式的详细信息,请参见附录《三种量化方式解说》。
Adaptive Quantization
[Top]
其实这个选项就是XVID 1.0之前版本中的Lumi masking。加大图像亮/暗部等人眼不容易注意到的部分的压缩率,可能会产生画面扭曲。本选相应当谨慎使用,因为它看起来弊大于利。所以如果不是对缩小文件体积缩小有迫切的需求,最好不要使用。
Interlaced Encoding
[Top]
隔行处理。适用于有交错的片源。一般来说不需要开启。
Top Field First
[Top]
决定场序。如果选中,则为顶场(奇数场)先,否则为底场(偶数场)先。
Quarter Pixel
[Top]
1/4像素(简称QP,下同)。MPEG-4 用的 QPel 即 1/4 Pel,就是再补出1/2像素像素和1/2像素之间的1/4像素。能保留更多的细节(比不用QP多)和得到更精确的动态补偿,适合高2-PASS/1-PASS比值时采用。但会降低损失近1/3的编码速度。
通常情况下,2-PASS/1-PASS比值在50%以下,不推荐使用。800K以下的低码率使用时,部分场景的画面会产生严重的色彩飘逸现象,看上去像粘稠的液体流动(干净、低动态片源除外)。视频码率越高,使用加QP后的效果越好,而且中低码率下去色块的作用也非常明显。
Global Motion Compensation
[Top]
全域动态补偿(简称GMC,下同)。能在缩放(把镜头拉近)以及旋转(转动相机)的情形下有所帮助,尤其是画面中的物体的外型是固定的,仅在尺寸以及位置上有所不同时。若要处理的影片是自然景观或风景片时,可以开启GMC。使用该选项制作的影片可能只有XviD自己的解码器才能正常解码,若使用ffdshow等解码器解码可能存在兼容性问题,用前请考虑。
B-VOPs
[Top]
B-frame
[Top]
B-frame设定。若去掉该选项前面的对勾,则编码中不使用B-Frame(简称BF,下同),只用IF、PF来压。
Max consecutive BVOPs——最大连续BF数量。举个例子,设置2,就是说在两个PF之间(或IF/PF之间)最多会连续插入两个BF,即…IF/PF BF BF PF…;如果设置3,则最多会出现三个连续BF,即…IF/PF BF BF BF PF…。此处,应根据片源具体情况来设定,如果片源动态比较小,则可以适当开大一些,比如3、4;如果码率很充足或片源很复杂,包含大量大动态场景、运动不规则、场景切换频繁等等,则应减少BF用量,甚至不用BF。
请注意:多少个BF连续出现,没有数量限制(你可以设置成1,也可以设置成1000)。具体用多少XVID自行判断,这个地方只设定最大值。
Quantizer ratio——BF的Q值倍数。计算BF的Q值的参数。
Quantizer offset——Q值计算偏移值。计算BF的Q值的参数。(BF的Q值计算方式下面解释)
Packed bitstream——开启BF的XviD制作的avi,在播放时会延迟一帧(就是以前播放时画面第一帧的那个黑色画面,告诉你该视频使用了BF,如下图)(制作成ogm、mkv、mp4则不会)。而Packed bitstream选项的作用是解决这个问题。不过开启2个以上的连续BF并用到了Packed bitstream的时候,只有XviD的解码器可以正常解码。而用老版本的DivX/ffdshow解码,水平移动的画面会不顺畅(画面朝移动方向抖动)(ffdshow-20040225以后的版本解决了这一个问题)。

Closed GOV——在编码新的IF之前插入一个PF来关闭前一个帧组,否则解码时有可能出现问题。此选项要勾选。
BF的Q值的计算:BF的Q值由BF前后的IF/PF共同决定。
代码:
BF的Q值=BF前后的IF(或PF)的Q值的算术平均数* Quantizer ratio+ Quantizer offsetBF是一个能有效提高压缩率的功能,是否降低画质,那要看如何设置了。有的设置压出来的部分BF,Q值比PF还低。用最恰当的BF设置来调节码率,提高整体质量,是非常有效的,设置地恰当的话,会令全片的Q值分布相当平均,可使DRF测试中的第二项——Standard Deviation 轻易达到“Quality is HIGH [Std. Deviation is 0.50]”,即动、静态场景的画质一致,不会“静态尚可而动态MSK惊人”。而且在用VHQ4压片时还能省去不少时间,因为BF不像I、PF那样要作VHQ4处理。通常情况下,全片BF含量在30%—55%左右,画面效果与只用I、PF+VHQ4跑出来的画质无显著差别。即省时又保证质量,所以一般应当使用BF。
随着XviD的Frame Type的不断进步(从0624版开始FrameType判断较以前版本已经有了相当大的提高),大动态场景BF滥用现象已经得到了较好的抑制(经过实测,在码率充足的情况下,大动态场景基本用IF PF PF PF PF… 来压了),所以BF可以放心使用。
有些朋友对本部分设置可能还不是很清楚,的确,BF的设置是XviD中最难掌握的部分,参数需要精心搭配。
针对一些情况,本文给出了参考参数设置,请见附录-BF推荐设置。
Motion标签
[Top]

Motion search precision——运动检测精度,决定着给定码率下的画面质量。等级越高,画质越好,速度越慢。一般选6而不选5,因为选5只快10%。
设置
1 – 3: 基本没有什么区别。
4-high:XVID使用半像素插值(half pixel interpolation=HPel=1/2像素)的技术达到更好的结果,而整个16x16的微区块被标示上两帧之间的运动向量(译者按:ffdshow有显示这个向量的功能,很有趣)
5-very high:XviD 使用4分运动向量(inter4v motion vectors)的方式,即16x16的微区块中的4个8x8区块,被标示各自的运动向量。
6-ultra high:运行更多边的运动检测(会减慢10%的编码速度)。
VHQ mode——搜寻宽度。等级越高,画质越好,速度越慢。这个选项会很大幅度的降低编码速度,若机器够快,可选4。想了解更多VHQ的功能,请参阅本文附录《VHQ模式》。
Use VHQ bframes too——在BF上应用VHQ。在原先版本的XviD中,VHQ Mode是不被应用在BF中的。但是从XviD1.1版本开始,只靠选中本选项,就可以在BF中应用VHQ Mode了!
Use chroma motion——通过颜色信息来判断动态。会降低编码速度5%~10%,但是有利于画面,推荐选择。
Turbo——超级模式。更快的判断BF和QP的动态。
Frame drop ratio——丢帧率,这个参数保持默认值0,并且不要改变。
Maxinum I-frame interval——最大IF帧距。该参数一般为帧率的10倍。比如,一般DVDRIP的帧率为23.976fps,则该处就填写240。有人喜欢认为将这个值调小,以增加IF的数量,达到提高画质的目的。此项可根据片子情况适当减小。但是在200以上为宜,如果太小会适得其反——文件OVERSIZE、IF占用大量码率导致BF/PF质量过低,反而不利于画质。
Quantization标签
[Top]

Quantization标签中的设定非常重要,直接关系到片子的质量。
Min I-frame quantizer——
IF的Q值最低值。
Max I-frame quantizer——IF的Q值最高值。
Min P-frame quantizer——PF的Q值最低值。
Max P-frame quantizer——PF的Q值最高值。
Min B-frame quantizer——BF的Q值最低值。
Max B-frame quantizer——BF的Q值最高值。
Trellis quantization——进阶高质量量化模式。若选择该选项,编码器会选择性的降低某些画面的质量,来达到最大限度的提高片子的整体质量。可配合H.263量化方式使用。
各种类型帧的Q值设定需要注意以下原则
设置时应尽量保证IF质量,因为BF和PF的质量都由IF决定。
由于XVID对于BF质量的把握越来越好,比较黑暗的场面出现烂帧的几率也有所减少,所以BF的Q值上限可以放心的设大一些。
有些朋友提出,不要限制Q值范围,也就是全部都保留1/31的默认值,让XviD自行掌握Q值分配。笔者认为这么讲不无道理,但要看什么情况。在一些情况下,XviD自身的Q值分配算法是不能适应某些影片的(比如通篇画面都很昏暗的影片等等),这个时候,就需要我们手工来限制Q值范围。也就是说,是否限制Q值、限制多少,并没有一个确定的答案,而应当由片子本身的特性。有经验的RIPPER可以迅速的根据影片画面判断应该如何配置,也就是所谓的“经验”。所以,Q值的设定应由影片本身和制作要求灵活应变,不应一味追求所谓“理想值”。笔者认为,这点是应当特别注意的。
综合设置
[Top]
请注意,从xvid1.2开始,Debug功能被安排在了XviD Configuration项目中,按Xvid主窗口下方的Other options按钮即可进入。
Encoder
[Top]

FourCC used——FourCC 用以确定你编码好的电影用什么样的解码器来播放,默认值为"XviD",这意味着将使用"XviD directshow filters",保证了最大的质量和兼容性。你也可以选择使用"DivX 4.x"或"5.x"的解码器来回放你完成的电影,但是它们不一定就能正常播放。
Number of threads——线程数。XviD针对现在逐渐流行起来的支持HT技术或双内核处理器做出了一些优化。若您的处理器支持HT技术或有双内核,请设置为2,否则请保持默认。
Print Debug info on each frame——在每帧上打印debug信息,非专业人员不要选:)
Display encoding status——显示编码状态,就是我们在压制的时候看到的XviD Status窗口。如下图:

Common
[Top]

Performance optimizztions——性能优化。可以选择特定的CPU指令集优化。可以对编码速度的提高起到一定作用。建议选择自动选择指令集优化。
附录
[Top]
如何知道1pass容量
[Top]
获取1pass容量其实很简单。当大家开始用XviD压制1st-pass的时候,XviD会跳出来一个状态窗口,这个窗口会实时显示压制过程中各种各样的信息。当1pass压制完成的时候,这个窗口会显示1pass的最终结果。如下图:

右边红框部分所示的容量即为1pass容量。用计算出来的2pass容量除以这个值,就能计算出来2pass/1pass比值了。
BF参考设置
[Top]
2-PASS/1-PASS比值在70%以上
[Top]
由于容量相对宽松,故限制了IPB的Q值范围。
Max consecutive BVOPs --------- 2
Quantizer ratio --------------------- 1.20
Quantizer offset -------------------- 0.60
Quantization设置:2、2、2、3、2、4
2-PASS/1-PASS比值在60%--70%之间
[Top]
Max consecutive BVOPs --------- 3
Quantizer ratio --------------------- 1.30
Quantizer offset -------------------- 0.80
Quantization设置:2、2、2、4、2、5
2-PASS/1-PASS比值在50%--60%之间
[Top]
通过降低分辨率和/或使用降噪滤镜降低压缩难度,变相提升2-PASS/1-PASS比值。
Max consecutive BVOPs --------- 4
Quantizer ratio --------------------- 1.40
Quantizer offset -------------------- 0.80
Quantization设置:2、3、2、3、2、31
2-PASS/1-PASS比值在50%以下
[Top]
通过降低分辨率和/或使用降噪滤镜降低压缩难度,变相提升2-PASS/1-PASS比值。如果降低分辨率(直到你已不能接受的水平)和/或使用降噪滤镜(画面模糊到你已不能接受的水平)时,仍然不能将2-PASS/1-PASS比值提升到至少55%的水平,则考虑提高视频文件体积,或者换用其它编码器来完成压缩工作(如VP6、RV10)。
这种方法可以保证制作出来的所有视频文件的Average DRF/quantizer控制在2.5-3.5之间(I、PF的Q值为2或3),Std. Deviation控制在0.40-0.60之间。也就是说没有明显的压缩瑕疵,如MSK、噪点等(其它需要配合的设置还包括:VHQ4、hvs系列量化模式)。
基本概念解释
[Top]
本文用到了一些MPEG4中的基本概念,这些概念在本文中会经常提及。所以这里特意为新手准备了概念解释,希望新手朋友在阅读之前掌握这些概念。没有收录进来的一些针对性较强的概念已经在正文中进行重点的解释。
三种帧类型
[Top]
IF——I-frame的缩写,即关键帧。关键帧是构成一个帧组(GOP,Group of Picture)的第一个帧。IF保留了一个场景的所有信息。
PF——P-frame的缩写,即未来单项预测帧,只储存与之前一个已解压画面的差值。
BF——B-frame的缩写,即双向预测帧,除了参考之前解压过了的画面外,亦会参考后面一帧中的画面信息。
量化方式
[Top]
H.263——推荐700~900K的码率(比如1CD制作)时使用。保留画面细节不及MPEG量化方式好,但可以达到较好的画面降噪效果,可以让画面看起来更干净一些。推荐压制动画使用本量化方式。H.263 的量化方法,顾名思义,就是使用 H.263 这个压缩规格所使用的量化方法,量化的时候,8x8 的像素方块内的所有 DCT 系数,全部除以同一个数字。(这个动作就叫做量化)例如全部都除以 32,如果有一个 DCT 系数为 15,小于 32,经过相除之后,会被量化为 0,如此便可以省下很多记录的 bits。当然,除的数字越大,量化的误差也就越大,品质也就越差,但是压缩率会越高,压出来档案会越小。我们会利用另一个参数来调整量化的误差,控制最后量化的品质和档案的大小,这个参数叫做 Quantizer。量化的系数会再乘上这个 Quantizer 的倍数,例如原本要除的量化系数是 32,Quantizer 是 2,对应的放大倍数也是 2,最后真正要除的量化系数就变成 32*2=64。所以 Quantizer 越大,要除的量化系数就越大,量化误差就越大,品质就越差,但是档案也越小。H.263 的量化方法还规定,相邻的两个 MacroBlock 的Quantizer 不能相差超过 2。
MPEG——建议高码率情况下(比如2CD制作)使用,能保留较多细节,但在某些情况下可能造成噪声等副作用。若在制作动画时使用,可能引起色彩过度不自然、颜色边界处出现噪声等副作用,此时,可搭配Cartoon Mode降低这些副作用。MPEG 的量化方法,高低频系数可以除以不同的量化系数,可以视情况将高频削多一点。这个 8x8 的量化系数,也就是 Quantize Matrix(量化矩阵)。
MPEG Custom——可以加载MPEG自定义量化模板。你可以依照影片特性,自订最适当的量化矩阵。比如,压电影的时候常用的hvs-best-picture模板可以兼具MPEG和H.263量化方式的优点,即画面细节和降噪都能得到兼顾。若要采用MPEG Custom量化方式,点击Edit Matrix…按钮加载想要的量化模板即可。本选项只建议对于量化模板有较深研究的专家使用。XviD1.0安装目录下有一个XviD_Quant_Matrices.zip,里面包含了数种常用的量化模板,比如有名的HVS量化系列,在DOOM9网站或论坛上可以找到更多的量化模板。
噪声
[Top]
这里所谓“噪声”,并不是我们能够听到的实际意义上的噪声,而是指的画面上不断闪动的亮斑点或色斑点。画面出现噪声一般有以下几方面原因:1.电影:由于胶片本身的感光性能或采集过程不佳造成(老片尤其严重);2.动画:TVRIP录制时电视信号存在干扰(也就是我们常说的“雪花”);3.采用了VHS或老旧的LD片源;4.由于压制不良,导致色彩之间的边缘处有细小的色斑存在(看起来像“马赛克”)。这些噪声在画面上不停的闪烁、移动,造成惊人的码率浪费。因此需要尽量将这些噪声“过滤”掉,以节省码率,增高片子的整体质量。要想过滤噪声有许多方法,比如在AVS脚本中加入降噪滤镜等,但这不是本文讨论的重点。
Q值(即DRF值)
[Top]
在编码时,为了达到某个码率,mpeg4编解码器会对每一幅画面进行压缩。而压缩程度则取决于码率、图像内容的复杂度及动态大小。对于每一帧,一旦确定怎样去压缩以后,就会产生DRF值。DRF值为2的时候,效果最佳(在XVID中,quantizer还可能达到1)。DRF值等于31时,效果最差。8以上的DRF值,可被认为效果很差。DRF/quantizer实际上代表了编码器在降低帧大小时所丢弃的信息量。
Bits/(Pixel*frame)
[Top]
数据密度。码率并不是视频/音频质量的唯一指标,一个更重要的指标是Bits/(Pixel*frame) (数据密度),它反映了平均记录每象素所用的数据量。如果Bits/(Pixel*frame)比较低,那么DVDrip的视频流中I帧间的预测帧(P帧/B帧)的误差会比较大,视频质量会下降,(MSK等…)。制作DVDRIP的软件(例如GK)都要计算/给出这个Bits/(Pixel*frame)值。一般认为,较好的视频质量需要Bits/(Pixel*frame)>0.2(如左图)。
Video Size/1st Pass Size
[Top]
除了码率和Bits/(Pixel*frame)之外,Video Size/1st Pass Size 也是一个质量指标。DVDRIP压制时,码率的分配不是线性的,变化的(动作)场景的码率将会高,而静态场景的码率低。Twopass-1st pass就是用于确定码率分配。而后,根据设定的最终文件大小,将算出的码率分配曲线等比例压缩,得到最终Twopass-2nd pass的码率曲线。Video Size/1st Pass Size反映的就是这个压缩比。一般认为,较好的视频质量需要Video Size/1st Pass Size >55%。
曲线压缩与线性压缩
[Top]
(作者:Silky,收录时略有改动)
「曲线压缩」的意思就是将码率较大的帧拉下来,降低一点码率,码率较小的帧补上去,提高一点码率。也就是将原本上下震荡的码率曲线变平一点,最大和最小的差距不要那么大。压得越平,码率曲线就越接近一条固定的直线,也就是变成近似于CBR。不过这样实在很没有意义不是吗?本来码率高的帧,就是因为这个帧需要较多的码率纪录,你现在把它拉下来,画质岂不更惨?而码率低的帧,就是不需要花那么多码率记录的帧,你又给它多补一些码率,岂不浪费?
根据 Koepi 的说法,当码率极低的时候,很多帧的码率都不够。此时如果把少数几个码率很高的帧拉低一点,把省下来的码率分给其它帧,立刻会对这些游走在底线边缘的帧的画质有很大的帮助。曲线压缩的目的便是牺牲少数几个帧,让大部分的帧增进画质。而,这少数几个码率超高的帧,又通常都是高动态的画面。人眼对高动态的画面比较无法精确的判断、分辨出画质的好坏。所以牺牲这几个帧,增进大部分时间看起来的品质,可以说是相当划算。好像还蛮有道理的。不过如果曲线压缩的参数设定得不好的话,对画质会有很大的伤害,而且在不是超低码率的情况下,曲线压缩也没有意义。所以最好的作法还是,让编码器自行视情况调节,使用自由的 VBR,这样压出来的结果会越接近 CQ「固定品质」。(当然,如果码率实在设得太低,CQ 压出来的结果就是「固定烂品质」 这时适当的运用曲线压缩,以少换多,就有它的价值了) 。
经过许多人的测试经验,最后的结论就是 linear scaling「线性压缩」的结果最好。 线性压缩时,1st pass与曲线压缩无异,只是2nd pass的时候,就直接把 1st-pass 压出来的码率曲线按一定比例整个往下平移,降低码率,达到你所设定的目标大小为止。由于曲线只是整个往下平移,使得最终的码率变小,而不改变其原本的震荡幅度,所以称为「线性的调整大小」。 线性压缩使原本复杂,需要高码率的画面还是分到较多的码率;简单,不用太多码率的画面也不会浪费了码率。线性调整压出来的结果较接近「完美的 VBR」,也就是固定的平均品质,不会有几个帧突然发生明显劣化的情况。
使用线性压缩的方法很简单,2nd-pass的时候,把Two Pass设定底下的High bitrate scenes degradation % 和 Low bitrate scenes improvement % 两个设定都设为 0,这样跑 2nd-pass 的时候就会自动根据 XviD Codec 内建的 scaling 算法,做线性调整。
VHQ模式
[Top]
VHQ与IF、BF、码率控制没有任何关系,但VHQ越高,图像的品质越高。
MPEG系的编码器在压缩时以每个16x16像素块大小的MacroBlock为单位进行动态预测。在VHQ模式下,它先是进行简单的block-mode-decision(区块模式判定),其间会对画面内的每一块MacroBlock施以优化,然后再按三个不同档次(VHQ2、VHQ3、VHQ4)作进一步动态预测,从而更进一步的减少纪录信息所需要的容量。
使用VHQ(特别是VHQ4)可以降低Q值、使画面更干净、保留更多的细节,但这些都只是VHQ的副作用,VHQ的主要功能是提高压缩效率(当Q值一定时,令文件体积更小),以便更好的达到目标文件大小。
注意
在1-PASS过程中,VHQ模式处于自动关闭状态,因此不必担心两个PASS之间的设置不同。
在XviD 1.0正式版中,VHQ模式已经能与BF、Quarter Pixel、Chroma motion、Adaptive Quantization、GMC功能同时开启使用了。
后记与人员列表
[Top]
整个XVID的重要参数到这里差不多都介绍完了。笔者还是坚持一点:每个片子都有其自身特点,要想用一套“万用参数”来“通吃”所有片子是不可能的。有朋友非常心急,一上来就要找出来一套适用于手头这部片子的“理想值”,但是这样往往以失败告终。所以压片之前,不要怕麻烦,多抽几段来试压,然后根据每个参数的作用进行配置,相信你会制作出优秀的DVDRIP。
XviD是一款相当强大的MPEG4编码器,如果参数配置得当,再配合良好的AVS脚本的话,可以制作出来容量只有DVD容量的1/5(MP3音频),但画质和DVD相比丝毫不差的影片!到现在为止,XviD仍然有很大的潜力可以发掘。希望大家永远不要停止探索的脚步,去获得更好的质量!
本文的编写及内容不断丰富、修订的过程中,得到了很多朋友的帮助,在这里,编者dgwxx向他们表示最诚挚的谢意。另外:如果您撰写文章或创作其他作品(如编译自己版本的XVID)的时候引用了本文的内容,请一定要注明哪些内容出自本文,这是对于作者们的尊重,同时也有助于技术的交流。在线版本的放出,间接解除了强制复制保护。您现在可以任意复制本文的任何文字、图像内容。但是这个许可仅限于用作技术交流,任何用于商业行为的复制行为、任何恶意抄袭均将受到本文作者团队的最严厉追究。
本文由多位作者共同完成。
参与编写的作者名单(依照字母顺序排列):Bopirit、Dgwxx、RKinGBo、tct66、大卫
感谢以下朋友(按内容时间先后排列):
Nemolus——在2.0版本修订过程中提出了大量意见、建议。
DvDSharer——一些概念解释;提出2.0版的修订。
Skywalker——Global Motion Compensation的改正意见。
本文编写过程中参考的资料:《高品质DVDRIP制作进阶教程》(作者DvDSharer)、《XviD-1.0的設置參考》(作者tct66)、《XVID的中文化解释》(作者大卫)、《XVID中文设置全释1.3+》以及DOOM9.org的相关英文资料。


你可能感兴趣的:(xvid 详解 代码分析 编译等)