这是一个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 声道, 0x1 = 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 模式的第二步,编码器会根据第一次压缩时获得的影片的信息和用户指定的最终文件大小,自动分配码率,低动态的分配得少一些、大动态的分配得多一些,总之尽量保证最终文件大小为用户指定的大小。