[SilkyBible] XviD系列-22

来源:互联网 发布:java 获取ip 端口号 编辑:程序博客网 时间:2024/06/11 15:12
 
引用 02-09-2004实际画面
[抱歉简略的用一个画面代表]

这个画面是 PSNR 曲线图中间凹下去的那个部分
原始画面XviD rc2xWMV9DivXRV10(RV9+EHQ)
这种画面的好处就是,即使压得很烂,也不容易看出来
可以把图抓下来用 ACDSee 切换着看。
引用 02-09-2004另外,上面的数据还有一个有趣的地方,WMV9 又赢过 XviD 了
当然,这是不可能的
所以我们猜想「这会不会是一个非常适合 Qpel 的讯源?」开了 Qpel 之后 PSNR 会上升?
根据经验,这种结构性的材质非常适合 Qpel,所以我们试试看:
代码 (双击代码复制到粘贴板)
h.263
                   PSNR:   33.8035   39.1872   45.3055
           Overall PSNR:   38.3881
h.263(q)
                   PSNR:   34.5475   39.2735   45.2414
           Overall PSNR:   38.5965
wmv9
                   PSNR:   32.4334   39.0562   44.0154
           Overall PSNR:   38.4945
(q) 代表开启 Qpel 的 PSNR 数据。

果然
如果只是要 PSNR 数据好看,可以做到微调 codec,让压出来 PSNR 提高,不过这样没有意义。
开启 Qpel 最大的帮助,是 Qpel 带来的锐利度和细节。一般 Half Pixel MC 的参考画面,是用线性内插补点补出来的,我们知道线性内插(linear interpolation)的画面非常模糊,所以参考这种模糊的画面压缩,越压越糊。Qpel 的内插分为两段,第一段先用 8-tap FIR 的 filter 内插补出 Half Pixel 的像素值,第二段再用线性内插补出 Quarter Pixel 位置的像素值。也就是说 Qpel MC 的 1/2 像素值是高品质的 8-tap 内插补点,Half Pixel MC 则是糊糊的线性内插,经过 8-tap 补点后,Qpel 的 1/4 像素也能因此受惠。Qpel MC 的参考画面比 Half Pixel MC 锐利许多,参考这种清晰、锐利的画面压缩,压出来才不会那么糊。
所以前面提到增加锐利的方法一,MPEG quantization,方法二就是 H.263+Qpel。
(MPEG 用 Qpel 噪声会更多)

虽然 Qpel 对于大多数的讯源会降低 PSNR,但是 Qpel 带来的视觉质量提升,锐利和细节,却是功大于过。
当然老话重提,凡事不可一概而论,也有那种 Qpel 开下去,帮助不大,噪声倒是增加许多的讯源,遇到这种讯源,就应该关闭 Qpel。
可惜的是 MPEG-4 规格限制不能 Adaptive 的切换,视画面的特性开启或关闭 Qpel。

上面还没测完,XviD 只有使用一个 B-frame,既然这个讯源适合 B-frame,那么增加为 2 个、3 个 B-frame 结果会怎么样?
还有 RV10 是用 Adaptive B-frame,在 0~3 之间切换,如果改成强制固定 3 个 B-frame 会怎么样?
这些我就没有做了,因为 PSNR 数据可能会改变,然而 codec 大致上的特性却是不变的
引用 02-09-2004上一页有许多大图,小猫进入前请注意 ^^;
非常抱歉.. 图真的大了一点,因为我想大一点看得比较清楚。
建议还是抓下来用 ACDSee 切换着看,会更清楚。

引用 02-10-2004我又出现了,这样下去我会被老板砍死,工作都不做.... XD

1. 是的,码率大概 2000kbps 左右,这一段实在不太好压。
视觉品质和码率其实没有太大关系,如前所述,好压的片段 400kbps 便已足够,难压的片段 4000kbps 还是压缩瑕疵满天飞,在 PSNR 40 几 dB 的情况下,没道理说因为绝对码率是 2000kbps,所以 DivX 或 XviD 的视觉观看品质就不会输得太离谱

顺便说明一下,做 848x352,是因为 720x480 clip-> 704x480 resize-> 854x480 clip-> 848x480
再把上下的黑边切掉,就是 848x352。
这么做的目的是,我们 resize 的时候,最好要保持一个方向的分办率不要动到,例如
720x480 -> 704x480 -> 704x396

这样是保持水平分办率没有 resize。
然而影响视觉品质比较大的,是垂直的分办率,垂直最好不要动到,保持水平分办率和保持垂直分办率相比,保持垂直分办率所带来的视觉效益比较大,所以 16:9 讯源做成 AVI,最好的品质就是 848x480。
上面的切边法其实比例不太精准,是以 PAR 10:11 来计算的,要做到完全精准
720x480 clip-> 711x480 resize-> 864x480 clip-> 848x480

因为
704*10/11 = 640
640*9/16 = 360
640x360 是 16:9

360*4/3 = 480

所以高度要维持 480,水平要跟着乘上 4/3
640*4/3 = 853.333333333333333333333333333333 ~=854

同理
711*72/79 = 648
648*4/3 = 864

由于 Avisynth 使用 YV12 or YUY2,不能切出 711 的分办率,所以不能用上述的精准算式。
如果你是用 TMPGEnc 或 AviUtl,就可以切 711。
有人这么做的吗?
当然有,就是教我这个方法的 sswroom 兄

2. 色彩丰富....,您给个画面做示范,我找找

其实 chroma 应该并不难压,压出来的 PSNR 都很高,而且影响不大。
因为大部分 codec chroma 是不做动作搜寻的,直接就是拿 luma 找出来的 MV 除以二,所以其实 chroma 根本没动作,也由此可见 chroma 的不重要 ^^;
应该很少会出现单独 chroma 烂掉的情况,通常 chroma 烂掉,代表着 luma 已经先完蛋了,因为 luma 比 chroma 实在要难压很多。

比较容易注意到的 chroma distortion,反而是后续的 chroma upsampling,例如现在的 Xvid DShow Filter 解码默认输出是 YUY2,找一个红色的物体来看,会出现明显的锯齿,要强制输出为 YV12,如果你的显示卡硬件支持 YV12 够好的话,输出 YV12 由硬件做 chroma upsampling 会漂亮很多。
还有 YUV->RGB,如果 codec 转换式的精度比较低,直接由 codec 输出 RGB 就会产生差异,例如色偏。当然在实际观看时 codec 是不会输出 RGB,而会使用 YUV Overlay,例如 DDraw YV12 Overlay。除非你和 sswroom 兄一样,看片都是切换到 640x480 RGB 输出 ^^;;

3. 成见啊,其实我对 WMV9 没有什么成见,我还时常帮 WMV9 说话,例如我说
「其实 WMV9 在高码率下画面并不会糊,有些地方甚至比 XviD 清晰」
「如果要拿来做为下一代高画质媒体的压缩标准,WMV9 或 VP6 应该比现行的 MPEG-4 要适合,因为 MPEG-4 原始的目标并不是在这么高码率的应用上」

而且我说这些话的那时都没有加上但书,第一点的前提是 XviD 要自废武功不能用 Qpel,第二点的前提是不包括 Studio Profile 或者 MPEG-4 AVC(H.264),这样说起来我应该算是偏袒 WMV9

其实我用字遣词的时候,都很小心,有些东西没有时间长篇大论地深入说明,不过在提的时候,用字都有一些深意 例如前面我说 WMV9 的 2-pass 有问题,我故意一直强调 WMV9 VCM Codec 的 2-pass 有问题,为什么要突然写这么长的赘字,"WMV9 VCM Codec" 这样啰唆? :P
因为那些测试代表的是 WMV9 VCM Codec 这个 Encoder 的表现,不代表 WMV9 这一整个"规格"的表现,也许微软故意把 VCM Codec 做得很烂呢? :P
VCM Codec 是这样的表现,不代表将来可能出现的硬件 WMV9 Encoder 也是这样的表现,不代表 WMV9 规格就只能做到这样,所以如果 WMV9 会成为下一代高画质储存媒体例如 HD-DVD/Blue-ray DVD 采用的压缩标准,也不用为它的表现担心。
因为微软在这方面(视讯压缩)确实是很强的,有多少技术是由他们的人员提出的,搜寻一下中国的微软网站就知道 第一个实作出来具有实用性的,率先实践 MPEG-4 部分压缩理论的「类似 MPEG-4 的 Encoder」也是他们做的(MS MPEG-4 V1~V3),微软在这方面的技术和实力确实是无庸置疑的,我对他们很有信心
所以我对 WMV9 没有偏见,相反的,我对它抱持很高的期待。

对 RV10 有偏见却是真的 ^^; :P
因为我实在不能忍受整个画面糊掉的结果,对我来说这种结果对画面的破坏,比线条旁边的 ringing noise 或者 block artifact 更令我难以接受。
ringing 或 block 用品质好的 de-ring 或 de-block filter 来消除,画面还不会像 RV10 那么模糊。
如果目标是压低码率的影片(通常我不会压这种东西,除非是随便作给别人看一看,自己不看的东西 :P),那么当然我也会选 RV10,不过上到中高码率,细节还是删除那么多,这样实在令我无法接受。

说到 RV10 或者 WMV9 codec 比较聪明,在低码率会自动删除细节,减少重大的压缩瑕疵,其实这点只要在 codec 里面加上 in-loop filter 就可以做到,非常简单。那么为什么 DivX 或者 XviD 不做?因为
1. MPEG-4 规格不允许 in-loop filter 这种东西
2. XviD 和 DivX 的目标码率都不是会需要用到 in-loop filter 的码率,如果你需要用到 in-loop filter,很抱歉,这两个 codec 很笨,使用者自己必须要聪明,知道在这种码率要求下,该换别种 codec 了

所以我说,每种 codec 有不同特性,知道特性以后,根据自己的需求,或者喜好,选择适当的 codec 来用
引用 02-10-20044. 了解,我会特别注意低值区间。

事实上我有注意
上面的测试中没有提出是因为低值区间大家都很烂,PSNR 最低的 codec 也没有特别烂到哪里去 :P
(大家都曲线都一样,好压的地方一起压得好,难压的地方一起压得烂)

在另外的测试中,确实有些 codec 会出现特别低的 PSNR 区间和其它 codec 不同,有时候这些特别低的 PSNR 区间确实画面很烂,例如 WMV9 VCM Codec 2-pass 的最后段,但是也有时候 PSNR 特别低的区间看起来视觉品质不会差太多,因为这些特别低的地方,可能是
1. 画面的结构特性,是那种 PSNR 低也看不出来有明显压缩瑕疵的画面,材质太复杂
2. PSNR 低是因为 B-frame,B-frame 的 PSNR 低,不一定会出现明显的压缩瑕疵
3. PSNR 低是因画面上有些部分的数值差异大,但是这些数值差异并不是明显压缩瑕疵
例如画面由一个场景经过经过淡出快速转入另一个场景,中间有接近全黑的转场画面,如果 Encoder 在这里有插一张 I-frame,会重设误差,后面的像素值,颜色会很正确,如果 Encoder 认为不需要插 I-frame,后面的像素值,因为少了重置的关系,一开始误差会稍微大一点,但是这种数值上的误差,并不会产生重大压缩瑕疵(例如画面所有像素亮度值都减一),实际上看的时候,我们根本不会察觉差异,但是 PSNR 却会比较低。
以上是一个举例的情况,有时候会出现这种现象。
4. PSNR 低只有一张画面,随后立刻回升,低的那一张虽然有重大瑕疵,但是是在画面变动极大的地方,所以一般人不容易察觉。
不过这招对我认识的一些人无效,他们看影片的时候,不是看一个连续的画面,影片是像一张一张图片般地输入他的脑中,他眼中看到的是一秒 24 张的静态图片。
跟这些人看片很痛苦,因为看到剧情正精彩的时候他会突然倒回去,暂停,然后跟你说「你看,这个地方有压缩瑕疵」,一部二小时的电影跟他看要五六个小时.... XD
手动 IVTC 做久的人就会这样,1/24 秒的画面上那个地方有什么小瑕疵他都看得一清二楚 ^^;;

所以有时候 PSNR 最低的地方不一定是画质最烂的地方。
不过确实,这个地方是一个观察的重点

5.
引用5.既然WMV9的2PASS有BUG,为什么S兄不试用一下1PASS_QUANTILY来压缩?
因为 WMV9 的 1PASS_QUANTILY 模式无法精准地控制文件大小,而我做的这个测试要求文件大小必须都差不多。
引用第二个片段RV10的PSNR曲线明显低于其他几个CODE是不是也说明RV10的2PASS也会有BUG?
应该不是,RV10 的 2-pass 很聪明,他会给高动态画面较差的画质,静态画面则全力压好,这对一般人来说可以提供比较好的视觉品质(虽然对我无用 :P)。
第二个测试 RV10 PSNR 特别低的部分,你看一下附图,就知道那是什么样的画面
我好像在故意折磨 RV10,第一个测试有沙地和烟雾,第二个测试则是花草茂盛的高频,本来还想做的第三个测试是下雨的场景....
引用实际上小弟总觉得2PASS就是最大的BUG,低码率时MPG4类的CODE用1PASS_Q来压缩往往会有更好的结果.希望S兄能进一步做几个CODE的1PASS_Q压缩的PSNR的曲线加进去让我们一饱眼福,文件体积不能强求一致可取的比2PASS 小一些,我绝对有信心这些CODE用1PASS_Q压缩出来的PSNR在低值区间会大赢2PASS.
是的,我相信 1PASS_Q 模式压出来最低 PSNR 一定会比较高,其实不是我相信,我曾做过测试,实验结果 1PASS_Q 的最低 PSNR 确实比较高。
记得这在我以前贴过的测试报告中应该也可以看出端倪。
我那时说 rc2 矩阵在越接近 constant quantizer 的时候 PSNR 会越高,但是 cg' 矩阵在使用 constant quantizer 压缩的时候 PSNR 反而降低。
另外我说 H.263 2-pass 因为会用到 quant 3,所以最低 PSNR 下降,不如 H.263 CQ=2。
还有我做了 3-pass cap quant 的测试,根据目标文件大小 2nd-pass 压出来的 avg. quant,如果是 4.38,就限制 quantizer 范围为 2~5,再压一次 3rd-pass。
同样的做法可以改为,2nd-pass 压出来 avg. quant 4.38,再压一次 3rd-pass,在 Zone 里面限制 quantizer = 4.38,这样就只会用 quant 3 和 quant 4。

不过我还有提到
1. 完全 CQ 不一定会是最高的质量,太过分散也有质量劣化之虞,适中的分布最好。
这也是为什么我 3-pass 测试用 cap quant,不用 Zone 指定 CQ,虽然 Zone 指定 CQ 的 PSNR 可能会高一点,但是不一定有意义。
2. 虽然 H.263 2-pass 最低 PSNR 不如 CQ=2,但是这就是 2-pass 的意义,重新做码率分配,我们要观察的是,最低 PSNR 下降的地方,是否会造成明显压缩瑕疵,而 2-pass 码率拿去补强的地方,是否是需要提升的地方,提升后有没有明显的效果。
我忘了我有没有把结论写出来 ^^; 结论在我做的那个测试中,2-pass 是有帮助的。

以您的情况,我推测在低码率下,由于码率不够用,2-pass 可能无法分配到每个画面都尽善尽美,可能一些画面会好一点,但是有些画面却会特别糟,瑕疵很明显,令人印象深刻 :P
这时用 CQ,我想画质会比较稳定,也许效果会更好
原创粉丝点击