头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4的问题

2013-07-02 14:47

讨论内容下载:http://nmm.me/xl

今天在我的群里聊了一些关于chroma subsampling的问题以及图像缩放的问题,想了想上次大虾说要我把这个问题写成文章发到NMM的,不过一直懒得写,于是这次把群聊记录整理了一下贴出来传教

先是从显卡输出显示器的RGB/YCbCr问题说起
然后讲到了4:1:1、MPEG-1的4:2:0、MPEG-2的4:2:0/4:2:2、4:4:4下chroma相对于luma的采样点位置问题(chroma placement)——关于这个方面的详细说明可以看这篇文章
以及在基于center align的resizer进行缩放之后会产生chroma shift的问题——经过测试AviSynth内置的resizer都有这个shift,而Dither_resize16和nnedi3_resize16是修正了这个shift值的。2013.11.15我发布了一个修正AviSynth内置Resizer的chroma shift问题的多功能resize脚本Resize8
另外就是非center align的interpolation滤镜如nnedi3进行放大后产生的画面中心位移(center shift)以及chroma shift的问题


后面3个问题是在前段时间写nnedi3_resize16 v2.0时所必需的理论基础,如果这些东西没有搞明白并计算好正确的shift值的话,写出来的脚本是要bug满天飞了……



另外再补充一下,关于4:2:0 VS 4:4:4的问题:

1.在模拟视频信号时代(以及未压缩的数字视频信号),4:2:0的带宽是4:4:4的一半,所以使用4:2:0能明显节约带宽,并且由于人眼对于色彩信息相对不敏感,所以这样的做法是有道理的。

2.在数字视频信号时代,由于各种图象压缩算法的不断改进优化,实际上很多时候4:2:0带来的不是压缩率(视觉质量/码率)的提高,而是降低。
在Doom9上有个讨论4:2:0 VS 4:4:4的帖子,里面Dark Shikari就说了,相比于缩分辨率来降低码率,x264的quantization在多数情况下都有更高的效率(视觉质量/码率),而通常只有在crf超过30时4:2:0才有可能超过4:4:4的压缩率(根据具体源的不同这个crf也有一定差别)。

3.现时使用4:4:4的问题:由于像素数是4:2:0的两倍,所以相同luma分辨率下编码和解码的资源消耗接近于4:2:0的两倍。
现在大多数视频源仍然是4:2:0,所以很多硬件解码的设备及一些软件解码器只支持4:2:0——这是历史问题不是技术问题。

4.对于能够得到的4:4:4源,例如游戏录制的RGB视频、RGB图像序列组成的视频,目前最好的选择就是转换为10bit 4:4:4 YCbCr进行编码。

5.而对于目前大部分4:2:0的源,将其编码成4:4:4基本没有意义——因为制作过程中搞成4:2:0已经造成的损失是回不来的。
所以这时候转为4:4:4纯粹就是看upscale的质量,而很多4:2:0转4:4:4的工具如AVS自带的ConvertToYV24以及x264内的libswscale效果都远不如madVR播放时用的Jinc+AR算法——通过这种方法压成所谓的4:4:4其实更是降低了质量,AVS中只有像是nnedi3才能够有超过madVR的upscale效果——当然即使这样我也不建议把4:2:0的源压成4:4:4,除非丧心病狂

edit1:
现在madVR已经支持使用OpenCL进行nnedi3的luma/chroma resampling,所以显卡足够好的情况下madVR已经是目前能达到的最佳质量了。

edit2:
经过更多实践以后发现,chroma upsampling时用的resampler并不存在最好之说,要根据具体的源的chroma情况来考虑。
对于高质量的源,诸如Lanczos+AR和nnedi3都是比较好的选择,而且nnedi3未必就一定好于Lanczos+AR,因为edi算法鲁棒性还是不足,对于某些地方容易出现artifacts。
对于一般质量的源,像是Jinc+AR和Mitchell-Netravali(Bicubic ~ b=1/3, c=1/3)算是比较好的选择。而如果是源的情况不清楚,需要用单一的resampler解决的话,这两个kernel也是比较折中、鲁棒性较高的选择——AviSynth的ConvertTo系列函数以及Dither_convert_xxx_to_xxx默认就使用Bicubic作为chroma resampler。
对于质量较差的源,则优先考虑SoftCubic(Bicubic ~ b=soft/100, c=1-b),因为它的low-pass filter较低的截止频率有助于去除源chroma中的高频artifacts,对于改善最终的视觉效果有很大影响。


最近我压的两部以yuv420为源的片,在处理过程中需要转换为YUV444/RGB进行处理,为了保留处理结果的精度,并避免反复resize造成更多损失,所以才保留为yuv444压制。另外一个原因就是前述所说的,在压制过程中根据源的情况选择合适的resampler进行chroma upsampling,能避免在回放过程中考虑如何选择resampler这个问题,从而提升回放质量。

另外一点是,其实现在4:2:0比起4:4:4质量差很多是因为现在的RGB转YUV使用的是Non-constant Luminance的方法——通过gamma-corrected RGB进行加权平均生成Y,因此Y中会包含少量色度信息,而做差得到的色差信号UV则包含了少量的亮度信息,导致在chroma subsampling以后亮度信息发生丢失从而造成了明显的画质降低。
在BT.2020中引入了Constant Luminance的方法——通过Linear RGB进行加权平均生成Y,Y是纯亮度信息,而做差得到的色差信号UV也就包含了纯的色度信息,从而使chroma subsampling对视觉效果的负面影响大大降低。
上次由 mawen1250 在 2014-04-08 13:48,总共编辑 12 次。

头像
tnti
帖子: 46
注册时间: 2011-12-06 22:52

Re: 关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4

2013-07-03 1:03

10BIT和4:4:4是趋势 到时候HEVC成熟了清一色这种的东西就出来了....
我觉得一般底片都太清晰,生活不是如此的,我不喜欢那种清晰度,我总试着模糊些。
概念都是正确的废话



头像
tnti
帖子: 46
注册时间: 2011-12-06 22:52

Re: 关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4

2013-07-07 23:33

扩展部分还没出来 当然4:4:4流不流行还得看那帮出BD的 求mawen1250菊苣EP群的群号(死)
我觉得一般底片都太清晰,生活不是如此的,我不喜欢那种清晰度,我总试着模糊些。
概念都是正确的废话

头像
nuomi
帖子: 197
注册时间: 2010-09-25 12:59

Re: 关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4

2013-07-10 22:10

tnti 写了:扩展部分还没出来 当然4:4:4流不流行还得看那帮出BD的 求mawen1250菊苣EP群的群号(死)
BD 支持 4:4:4 目测要等支持 HEVC 再说?

头像
tnti
帖子: 46
注册时间: 2011-12-06 22:52

Re: 关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4

2013-07-12 2:19

去问BDA去(http://www.blu-raydisc.com/zh-CHT/index.aspx
没大规模商用的东西硬件上的支持就(就像显卡不吃10BIT的X264一样 那个意思)不说了 要不楼要歪了...
我觉得一般底片都太清晰,生活不是如此的,我不喜欢那种清晰度,我总试着模糊些。
概念都是正确的废话

techneek
帖子: 8
注册时间: 2012-10-30 21:17

Re: 关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4的问题

2015-02-02 22:26

工业上比较常用10bit 4:2:2吧,4:4:4偏远似乎很少吧?

dj14hrl
帖子: 3
注册时间: 2015-08-19 16:29

Re: 关于chroma subsampling和resizer相关问题的一些讨论研究 + 4:2:0 VS 4:4:4的问题

2015-08-19 16:40

日本在BS上使用的相关标准中提到了10bit和BT.2020在4k和8k视频放送的重要性,但在chroma上还是用4:2:0


回到 “理论讨论 / Theoratical discussion”