您的位置:首页 > 其它

[SilkyBible] XviD系列-20

2008-12-30 21:13 267 查看
引用 02-04-2004alexheart 兄好 ^Q^

最近又开始忙碌了,所以不能时常上来到处乱晃 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">

--
先休息一下 ^^;;
我不只作了这一个讯源的测试,事实上我做了许多测试,包括中低码率的 2-pass,后面的文章会陆续贴出数据,每一个测试 XviD 1.0 RC1 PSNR 成绩都是最高的,光比 PSNR 我们可以说 XviD 是第一名。当然我们不能光比 PSNR screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">
XviD 有 XviD 的瑕疵,不过 XviD 也绝对不会是完全的输给 DivX,事实上在大部分的情况下,应该说 XviD 都是赢过 DivX 的。
而且如您所见,我没有使用什么特殊的压缩技巧,就是很简单的 codec 装好,一切用默认值,随便 H.263 压下去,然后就赢了 :P

所以如果要我下结论,我会说目前的 XviD 质量是赢过 DivX 的。

后面的测试文章必须等我回家后才能继续贴出,如果还有需要的话... ^^;;

引用 02-09-2004抱歉文章写好一段时间了,但是一直没有时间弄图,我最近实在很忙,所以最后只好大幅删减,简略地弄了几张图做代表 ^^;
我本来还想再多做两个测试做一些说明,不过实在没时间弄 >_<
那么下次有机会的话再见 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">

引用不仅要什么D9大片的片段
还要选色彩鲜艳丰富的片段
不然有人会说XVID压黑白片比较好 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);"> D9 大片 (汗
我很少压好莱坞的影片,因为这些 DVD 大部分都是 FILM(24fps),在计算机上看直接看就很漂亮,不需要 IVTC。动画就不一样,在计算机上看要完美、没有交错线,就必须手动 IVTC,这样转就有它的价值。

其实动画是所有类型里面最难压缩的 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);"> ,真的。Encoder 最怕碰到的就是这种讯源,尤其是对比高、色彩鲜艳、亮度变化剧烈、完全无残影、动态大到接近疯狂的程度,或者说前后画面根本毫无关连,这种讯源实在很难压缩。
再加上动画有锐利线条,一般电影大概平均 quant 到 5 左右看起来都还可以,然而动画只要 quant 超过 3,锐利线条周围的斑点瑕疵就会明显到令人无法接受,所以动画如果不加任何 filter,要压到平均 quant 等于 4 左右,文件都会非常大,动态大的话大概一集(24 分钟左右)都要 350MB,一片 CD-R 只能装两集。
所以动画要能压得好,其实是最难的 ^^;

像一般制作良好的动画 DVD,影像码率全部都是 8Mbps 以上,只能用到 8Mbps 是因为声音部分为了追求完美,通常是放无压缩的 2ch LPCM,要占用 1.5Mbps。DVD 影像部分的极限码率是 9.8Mbps,影音总和的上限是 10.08Mbps。如果声音改放 DD 448kbps,影像部分的码率就可以上到 9Mbps。这种高规格对于一般电影 DVD 来说,实在是不可思议,电影 DVD 如果有知,大概会口水流满地,羡慕得要死 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">
然而动画即使码率高达 8Mbps,只要没有用上 IVTC,大动态的画面就会整个完全烂掉,是整个烂掉,不是只有一点小瑕疵而已 ^^;
要用上 IVTC,节省 20% 的码率,让 8Mbps 的实效等于 10Mbps,这样才能避免这些大动态的画面烂掉。
实摄讯源要做到这么难压,一般电影并不多见,倒是 MV(music video) 反而比较多这种难压的画面。

我现在手边只有一张实摄 DVD,而且这个算是「半动画」的电影吧 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);"> ,RC1 的 STAR WARS II。
STAR WARS II 是用 HDCAM 拍摄,影像直接存到硬盘,数字上特效,数字直入 Encoder,全程数字制作,画面干净无噪声,和传统的胶片拍摄制作流程不同。

Chapter. 42 YODA'S CAVALRY
这是一段动态大,有许多爆炸、光线变化的段落,不太好压。
目标文件大小是 XviD H.263 quantizer 2 (B-frame 1/1.50/1.00) 压出来的一半,也就是 50% 的压缩率。
再低下去我认为就没有转的必要了,画质损失太多,看起来很心痛 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">

这里要说明一点的就是,评估质量以码率来估计是不准的,因为不同讯源压缩的难易程度不同,对于好压的讯源,也许 600kbps 便已足够,对于难压的讯源,可能 10Mbps 都不够用;同样 750kbps,用在讯源 A 上可能已经是超高质量,用在讯源 B 上却是惨不忍睹。所以用码率来评估质量是不准的。
通常一部电影不会整部从头到尾都很难压缩,会有好压的地方,可能只需五六百 k,会有难压的地方,可能需要五六千 k,最后整部电影码率平均下来,只有 1500kbps。所以我们不能只从中抽取一段,然后用 1500kbps 来压,藉此估计整片的质量,因为谁知道那一段是好压还是难压,真正压缩的时候,那一段不会刚好是 1500kbps,用 1500kbps 去压,会错估质量。
所以比较好的做法,是根据 1st-pass 的 file size 去作估计,或者以固定质量压出来的 file size 去作推算,目标文件大小在 quant=2 的 80% 以上,通常是很好的质量,60% 以上,也不错,40% 以上,就有点不行,40% 以下,就太勉强,最好考虑加 filter,把讯源弄好压一点,或者缩小文件的分辨率。
如果讯源难压,还硬要把文件缩小,最后的结果就会惨不忍睹,遇到这种情况,只好多准备几张 CD-R,或者缩小分办率,降低压缩的困难度。

由于质量已经低到 50%,所以此时 PSNR 已经不太准确,不过还是可以参考,因为 PSNR 越高,虽然不一定肉眼看到的瑕疵就越少(因为人眼对于不同种类的失真敏感度不一样),但是 PSNR 越高,代表 Encoder 的工作(寻找最小数值上的误差)做得越好,所以 PSNR 数值可以做为我们改变「同一个」 Encoder 设定时的参考。

各个 codec 的设置
XviD VHQ-4, B-frame 1/1.50/1.00, 2-pass 07/10/10, H.263 quantization 的测试有开启 Trellis,其它一切用默认值。
WMV9 选最高质量,2-pass。
DivX 一样是最高质量,开 B-frame,2-pass。
DivX 2-pass modulation 选 low motion 的 PSNR 会比较高,不过没什么意义,我是选 0,平等分配。
我多做了一个 RV10 的测试,设定是

代码 (双击代码复制到粘贴板)
<codecProperties type="bag">
<firstPassComplexity type="uint">65</firstPassComplexity>
<encoderComplexity type="uint">100</encoderComplexity>
<customPacketSize type="uint">16000</customPacketSize>
<noisyEdgeFilter type="bool">false</noisyEdgeFilter>
<calcPSNR type="bool">true</calcPSNR>
</codecProperties>
最高码率根据 karl 的建议,设为平均码率的 ~5x,maxStartupLatency,也就是 MPEG-2 说的 VBV Buffer,VBV Buffer 会限制 I-frame 的最高质量,这个设定根据 karl 的建议,设为 60sec
<maxStartupLatency type="double">60</maxStartupLatency>

60sec 的 VBV Buffer,也实在太大了一点 ^^;
karl 是 RV9-EHQ, RV10 的开发者。
附带一题的是,设定成上面那样以后,RV10 的 2-pass 会 oversize,没有办法很准确的压出设定的码率,必须反复重压好几次。

PSNR 成绩

代码 (双击代码复制到粘贴板)
h.263 file size: 23,474,176 bytes
PSNR:   35.0274   40.9439   48.8748
Overall PSNR:   40.5017
rc2x 23,353,344
PSNR:   35.2375   40.8404   48.4172
Overall PSNR:   40.3801
tmpg 23,445,504
PSNR:   34.8886   40.7490   48.3105
Overall PSNR:   40.2670
tmpg+rc2x 23,351,296
PSNR:   34.8881   40.8587   48.3261
Overall PSNR:   40.3954
wmv9 23,889,920
PSNR:   34.9734   40.9213   46.9434
Overall PSNR:   40.5326
divx5 23,226,368
PSNR:   35.7261   40.4125   45.5385
Overall PSNR:   40.0806
rv10 23,588,564
PSNR:   35.5164   41.4313   47.2989
Overall PSNR:   40.6642
除了 RV10 的 DirectShow Filter 我不知道怎么关闭 Post-Processing 以外,其它的 decoder 都有关闭 PP。
PSNR 40.xxdB,比其它中低码率测试 PSNR 大约 42.xxdB 还低,可见这个文件大小的设定,质量够差、码率够低吧

rc2x, wmv9, divx5, rv10 四者的 PSNR 图


screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">
蓝色 rc2x,红色 wmv9,绿色 divx5,粉红色 rv10。
图会不会不清楚? ^^;

引用 02-09-2004我把图上标明的各点所在位置的画面抽出来分析
(以下所有的图片统一由 Avisynth 做 YUV 4:2:2->RGB,codec 输出 YUV,不是由 codec 各自解码为 RGB)
a. 原始画面 frame #301
这样色彩够丰富吧? screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">
XviD rc2xWMV9DivXRV10(RV9+EHQ)
由于有 PP,或者是 in-loop filter,整个画面糊化的现象很明显,例如画面左边的火花,男主角衣服的袖子,女主角的手臂,手上拿的光线枪枪管的环状纹路,还有很容易注意到的.... 女主角的胸口.....
胸口放大(简易放大补点 2x)
RV10rc2x
rc2x 有 block,不过实际上看的时候,如果经过显示卡较好的放大补点,block 并不明显。
如果开启 XviD 的 de-block filter
rc2x+pp
很好,胸形还在....
这个举例好像有点.... ^^;;
rc2x+pp 全图
由于各个 codec 压缩这个画面有的是用 P-frame,有的是用 B-frame,用的 quantizer 也不相同,所以如果只单独比较这一张画面,不太能描述实际看到的这一整段的情况,必须加上文字说明的补充。
这一段的光线变化很剧烈,太靠近画面左边的部分光线闪来闪去,其实不太好观察,倒是女主角的胸口是观察的重点部位..... 呃,所以,总之 DivX 在这一段会把许多变化太大的 frame 压成 keyframe,但是因为整体码率不高,所以这些 keyframe 的质量很差,block 很多,这个现象在这一张画面里面比较不是那么明显(这张不是 keyframe),其它画面会严重许多。

引用 02-09-2004b. 原始画面 frame #355XviD rc2xWMV9DivXRV10(RV9+EHQ)
RV10 的画面,YODA 身上(那个绿色的矮老头 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);"> )灰色袍子的细节也实在删除得太夸张了一点,虽然这段袍子一直在飘动,但是可以看得很清楚啊。
左上角的沙地也变成「泥地」了,一块一块的,不过还好比较不是那么引人注意.....

引用 02-09-2004c. 原始画面 frame #367XviD rc2xWMV9DivXRV10(RV9+EHQ)
英明神武的 YODA 特写。
这一段 PSNR RV10 > WMV9 > rc2x > DivX,RV10 在静态画面的细节也是相当多,不过我觉得实际上看起来 WMV9 的脸部细节比 RV10 清晰锐利,只是背景的噪声和方块较差一点。
可以观察 YODA 头上的毛,耳朵左边的毛,哪一个比较稀疏,而且毛茸茸的黏在一起,看不清楚一根一根的毛发纤维,还有脸上的皱纹....

这个举例好像也有点不敬.... ^^;;
YODA 大师我错了,不该拿您开玩笑.... XD

引用 02-09-2004d. 原始画面 frame #499XviD rc2xWMV9DivXRV10(RV9+EHQ)
从这里开始,后面都是高动态的画面,可以看到 RV10 的 PSNR 在这里一路走低,成绩是四者最差的。这是因为 RV10 会把码率分配给静态画面,静态画面的细节不输其它 codec,一扫过去 Real Video 画面模糊、细节很少的印象,但是高动态画面 RV10 会减少码率,然后用 PP 或 in-loop filter 补强。PP 会降低 PSNR,所以这里的 PSNR 成绩并不是 RV10 真实的 PSNR 成绩。不过不管真实的成绩如何,我们看到的就是上面这个样子,除非 RV10 的 DirectShow Filter 可以让使用者关闭 PP。
如果 RV10 用的是内建在 Encoder 中,压缩时做的 in-loop filter,那么我们更是完全无法改变输出的结果。
RV10 这样的设计有一个好处,由于高动态的画面人眼的观察力降低,所以细节损失也看不出来,不过有时候也有例外的情况,当细节实在删除得太夸张的时候,我想要看不到也很难 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">
RV9+EHQ 2-pass 动态画面码率不足的问题,曾有人提出,karl 有做一些改良,不过对我来说还是删除太多细节,到了有点夸张的地步,例如上面的撷图。
这张画面简直像是一张泡过水的水彩图 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">

引用 02-09-2004e. 原始画面 frame #1935XviD rc2xWMV9DivXRV10(RV9+EHQ)
这一段是最后面,RV10 大胜,WMV9 大败的画面。
这一段画面完全静态,RV10 是压倒性的胜利,账面上的 PSNR 赢非常多,而且持续的时间很长,占全部画面的 1/4 强,RV10 从这里补回前面高动态画面因 PP 丢掉的 PSNR 分数。
WMV9 在这里完全大败,不只是 PSNR 成绩如此,实际上看时也是如此,如上图 WMV9 的背景细节完全消失,整个背景雾化、糊掉。而且实际看的时候画面劣化的瞬间变动的幅度太大,所以非常明显。
这里的画面之所以那么烂,是因为 WMV9 在前面已经耗光大部分的码率,后面的 keyframe 根本分不到太多码率,压得十分烂,下面这一张画面是前面 scene change 的 keyframe
WMV9 frame #1902

这个看起来像油画 screen.width-500)this.style.width=screen.width-500;" onclick="javascript:window.open(this.src);">
所以后面的 delta frame 也跟着烂下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: