Silky的XviD 2-pass研究心得--曲线压缩

出自射手网Wiki

Silky的XviD 2-pass研究心得--曲线压缩

跳转到: 导航, 搜索

结论就是,不要用那些「曲线压缩」比较好 :P

压缩的时候,bitrate 会视压缩的困难程度上下变化(VBR),encoder 的 rate control

会控制让压出来的平均 bitrate 接近我们所设定的最终大小。

「曲线压缩」的意思就是将 bitrate 较大的 frame 拉下来,

降低一点流量(High bitrate scenes %),bitrate 较小的 frame 补上去,

提高一点流量(Low bitrat scenes %)。

也就是将原本上下震荡的流量曲线压平一点,最大和最小的差距不要那么大。

压得越平,流量曲线就越接近一条固定的直线,也就是变成 CBR。

Alt. Curve 也是做一样的事情,只是参数更复杂。

不过这样实在很没有意义不是吗?本来 bitrate 高的 frame,就是因为这个 frame 需要

较多的 bits 纪录,你现在把它拉下来,画质岂不更惨?而 bitrate 低的 frame,就是

不需要花那么多 bits 记录的 frame,你又给它多补一些 bits,岂不浪费?

所以我从 Nandub 开始就一直搞不懂,Koepi 的曲线压缩设计到底是在做什么。

如果有人问我 Nandub 的曲线压缩要怎么设,我一定回答通通不要用 :P

因为我从来没压过流量设得极低的作品,所以无法理解这些曲线压缩究竟有什么用。

根据 Koepi 的说法,当流量极低的时候,很多 frame 的 bitrate 都不够。

此时如果把少数几个 bitrate 很高的 frame 拉低一点,把省下来的 bits 分给其它

frame,立刻会对这些游走在底线边缘的 frame 的画质有很大的帮助。

曲线压缩的目的便是牺牲少数几个 frame,让大部分的 frame 增进画质。

而,这少数几个 bitrate 超高的 frame,又通常都是高动态的画面。

人眼对高动态的画面比较无法精确的判断、分辨出画质的好坏。

所以牺牲这几个 frame,增进大部分时间看起来的品质,可以说是相当划算。

好像还蛮有道理的 :P

不过如果曲线压缩的参数设定得不好的话,对画质会有很大的伤害,

而且在不是超低流量的情况下,曲线压缩也没有意义。

所以最好的作法还是,让 encoder 自行视情况调节,使用自由的 VBR,

这样压出来的结果会越接近 CQ「固定品质」。

(当然,如果流量实在设得超低,CQ 压出来的结果就是「固定烂品质」:P

这时适当的运用曲线压缩,以少换多,就有它的价值了)

经过许多人的测试经验,最后的结论就是「linear scaling」的结果最好。

linear scaling 就是不用任何的曲线压缩,1st-pass 以 quant 2 压一遍,

2nd-pass 就直接把 1st-pass 压出来的流量曲线整个往下平移,

降低 bitrate,达到你所设定的目标大小为止。

由于曲线只是整个往下平移,使得最终的 bitrate 变小,而不改变其原本的震荡幅度,

所以称为「线性的调整大小」。

这样,原本复杂,需要高 bitrate 的画面还是分到较多的 bits;

简单,不用太多 bitrate 的画面也不会浪费了 bits。

线性调整压出来的结果较接近「完美的 VBR」,也就是固定的平均品质,

不会有几个 frame 突然发生明显劣化的情况。

使用 linear scaling 的方法很简单,2nd-pass 的时候,把 Two Pass 设定底下的

High bitrate scenes % 和 Low bitrate scenes % 两个设定都设为 0,

不使用曲线压缩。

payback delay 一般设为 10 秒,也就是 24fps 的话设 240,30fps 设 300。

同时关闭 Alt. Curve,通通不要用。

这样跑 2nd-pass 的时候就会自动根据 XviD Codec 内建的 scaling 算法,

做线性调整。

另一个方法,就是用 Kopei 写的 StatsReader。

(Koepi 后来也建议,使用 linear scaling 较好)

用 StatsReader 读入 1st-pass 的 stats 文件,设定目标档案大小,

然后储存一个新的 stats 檔。

XviD 压缩时选 2 Pass - 2nd pass Ext.,Two Pass 设定底下的 2nd pass stats

选你刚刚储存的那个 stats 檔。同样曲线压缩、Alt. Curve 等等都要关掉。

这样便会用 Kopei 设计的 linear scale 来做线性调整了。

(Koepi 设计的 linear scale 和 Codec 内建的计算法有些不同)

还有,用 NiTroGen 写的 XviD Stats Viewer 也可以做 linear scaling,

用法和 Kopei 的相同。

赞助商链接:
个人工具