关于PC播放器色彩空间转换等一些说明

http://realdafeng.blog.163.com/blog/static/31119627201082385332217/

写的非常浅显易懂。谢谢。

PC看片ABC  

2010-09-23 23:16:56|  分类: 视频相关|字号 订阅

名词解释

分离器:Splitter  视频文件是由视频信息和音频信息打包而成的,相信大家都没有问题。显然,在播放之前,需要将音,视频分开,然后分别处理。这时候,就需要分离器了。

解码器:decoder  以什么方式编码的的文件,就需要以什么方式解码,这和winzip是一个道理。而担任这个角色的就是解码器了。
渲染器:Renderer  当视频文件被解码后,就还原成了原始的图像信息,和音频信息。想把这些信息显示到电脑屏幕上,还需要一个渲染器。

视频编码与存储

       将图像数字化,是在电脑上处理图形的第一步。
          将图像分解为众多的点,每一个点被称为一个像素。所以通常我们说一个视频的尺寸是 640*480,那它横向就会有640个像素,纵向有480个像素。再根据三基色的原理,将每一个的像素的红绿蓝(RGB)三个颜色的值记录下来,就可以将整幅图像还原。再将每一张图像连续起来,每秒更新24张,就成了一段最基础的视频文件,这种记录方式称为RGB图像记录。
          这样存储的视频文件,质量最高,但所占的空间也是巨大的。这时候就是视频压缩登场的时候了。视频压缩最原始的基础并非数学,而是人的视觉特性。在RGB信息中,R,G,B包含有红绿蓝分别的亮度值,色度值。而人眼对三种颜色的亮度感受是不同的,人眼对绿色最敏感,红色其次,蓝色最低。 
          基于这一点,将三种颜色中的亮度信号统一,人眼也感受不到太大的变化。这个亮度值就可以称为这个像素的亮度值(Y)。然后,再将色度信号分成两个,并计算与这个亮度信号的差,就得到了两个值(U,V),这样一幅由红绿蓝三色组成的图像,就转换成了一幅有亮度,两股色度组成的图像。而大家知道,如果只看亮度的话,就是一幅黑白图像。这种图像处理法称为YUV。 如下图:
        人的视觉还有一个特性,就是对亮度的敏感度比色度要高。基于这个原理,我们保留黑白的那 幅图的解析度不变,每一个点都储存一个Y值,而两幅色差图像,降低他们的解析度,通常降到原分辨率的一半,在还原的时候通过放大回到原始大小。由于以上视觉特性,人很难察觉到这样做的差别,这样图像数据就进一步的减少了。
           这就是图像压缩的基本原理,不管什么格式的视频文件这部分都是相似的。

视频灰阶和色彩转换

        PC上的视频基本都是以YUV信号记录的。那么每个象素的Y是怎么来表示呢?这里就产生了灰阶,这个概念。我们将从纯白到纯黑之间变化过程取样256次,这样就会得到一张灰阶图,这就是通常所说的256级灰阶。显然 256级灰阶表现的画面要比以16级灰阶能够表现的画面有更多细节,更细腻。 我们的电脑显示的就是输出256级灰阶,我们称为PClevel,所以评价液晶显示屏的一个重要指标就是是否能够还原全部256级灰阶。
       但
电视显示却不是如此。当初,电视信号传输的频宽比较有限,压缩数据量就显得非常重要。在这样的情况下,电视图像的灰阶范围就采用了16~235,即220级灰阶,也就是16就表示纯黑,而235就表示纯白,这个灰阶我们称为TVlevel。
          一直以来,我们的电视节目,DVD等都是采用TVlevel,配合电视,一切都没问题。 但是,当我们想在PC上欣赏DVD的时候,问题就出现了。PC是使用PClevel,而视频中的纯黑16,到了PClevel上就会被解释成灰色;视频中的235纯白,到了PC里也还是灰色,不够白。
结果就会出现下面的画面:
这本是一个黑底白字的画面,到了PC上却黑也不黑,白也不白。
        所以,在PC上播放非高清的视频,灰阶转换是必要的步骤。为什么是非高清呢?因为720P以上的视频,通常都直接采用PClevel,所以也就没有转换的必要了,当然总会有些例外。
       同样是标清和高清之间的区别,由于灰阶使用的差别,导致UV另两路的色差也会产生区别。 也就是把YUV还原为RGB信号的公式就不一样了,这就是BT.601和BT.709比较浅显理解的区别,601用于标清视频,通常与TVlevel配 合;而709用于高清视频,通常与PClevel配合能够显示更广的色彩空间。
下图是一张标清视频,色彩空间为BT.601:


如果强制用BT.709去转换这张画面,颜色将变成下面这样:

       怎么样,已经是肉眼可以明确看出的区别,第二张画面的红已经泛橙色了。如果你看不出来,请检查你的眼睛或者你的显示器。不过如果你看出来了觉得无所谓,那也没关系。如果你对视频播放有要求,那么正确的灰阶转换和色彩空间转换是你必须要小心的。

视频渲染器与画面还原

       视频渲染器(renderer)对视频画面还原的影响 往往是大多数人最容易忽视的环节, 这里就提醒各位,不管你用的是什么解码器,最终的视频画面是要靠渲染器来生成的,所以渲染器的工作状态直接决定了视频的播放质量。当然也可以理解为什么,渲染器会被忽视,因为它相对可调节的内容少,比较默默无闻。
          这里就不从各个渲染器的历史和技术特点来讲起了,有兴趣的可以google查阅。这里仅就针对对画面还原有影响的部分就最流行的三个渲染器给大家讲一讲。
          不过这里有个前提,由于作者使用的是A卡,所以一下所有是基于A卡来谈。相信N卡也不会有太大的区别。
1. 覆盖渲染器(Overlay Mixer)
        这是最古老,但也是作者认为是一个能够工作的很好的渲染器。它往往是众多播放器默认选择的渲染器。
          (1) 灰阶的处理:前文所述,720P以上视频是以PC level记录的,所以在播放时对于灰阶不用做任何处理;而720P以下的视频都是以TVlevel记录的,播放时需要将灰阶扩展到PClevel才可 以,这一步称为灰阶伸张。有部分解码器可以做灰阶伸张,如Coreavc,ffdshow。但是通常,灰阶伸张的工作落在了渲染器身上。Overlay mixer在默认的情况下会自动判断视频的Level,如果是TV level,则会自动伸张为PC level,如果是PClevel,什么都不做。画面灰阶没问题。
      (2) 色彩空间:视频的level是可检测的,可是视频的色彩空间是BT601或是BT709则无法检测。所以A卡给覆盖渲染器设定了一个规则,当视频纵向尺寸小于720,就使用BT601;若大于或等于720,就采用BT709。这在大多数情况下,也可以完全正常工作。因为720P以上视频基本都采用 BT709转换。不过这也会有一点小小的不足,就是太傻瓜了,在使用Kmplayer特定功能的时候会有小问题。当然这一步Overlaymixer仍然没有问题。
      (3) UV的upsampling算法:要理解这个,请阅读 视频编码 与存储 部分内容。为了压缩视频,两路色彩信号的分辨率是被降低了一半的,播放视频时,为了还原画面,肯定要将他们还原至原始分辨率。这和放大图片没有大的区别,简单的放大,就会产生明显的锯齿。Overlaymixer相对VMR9在这一步没有问题,但也不能说非常完美。作者认为它采用的是双线性插值算法。总之,OverlayMixer不会让你看到明显的色彩边缘锯齿。Nice!
      (4) 视频全屏的算法:相信很少有人坚持要保持窗口的状态看电影吧?所以视频全屏的算法也是很重要的,overlaymixer同样采用了双线形插值,在 720P以上视频,这不是很影响,但是如果是720P一下,尤其是我们常看的动画的480P,这个算法不能说完美,在分辨率超过1650的显示器上,画面 边缘锯齿化就十分明显了,整个画面的颗粒感很重。这可以说是Overlay mixer的最大的缺点。如下图, 字幕边缘锯齿感很重:
      (5) 画面同步:如果没有VMR9,作者可能都注意不到这一条。总之Overlay在这一点上,没有问题。你不会看到画面撕裂的现象。
    总体来讲,Overlaymixer是相对能够很好的工作的渲染器,但是它的全屏算法不能够在它本身得到解决,也是一大遗憾。

2. VMR9 Renderless
    作者就不明白,有这么多毛病的一个视频渲染器怎么能够如此流行,被很多人奉为画面最佳的渲染器。至少没觉得VMR9 RL比Overlay Mixer强在哪里。
    (1) 灰阶的处理:上来就有问题,VMR9不能够做灰阶伸张,所以所有视频都会原封不动的被渲染到画面。如Vol03所说,TVlevel的视频如果简单的按照 PClevel渲染就会画面发灰。很多人会讲,使用像素着色中的Level可以修正,OK,你学过了。再往下看。
    (2) 色彩空间:这一步VMR也没有问题,当然只确定A卡。
    (3) UV的upsampling算法:这里就不得不提到VMR9的集中图像处理方式,如下:
  前三种之间没有过多的区别,而第四项3D纹理层,就有明显的问题,请相信,实际观感比起截图更加明显


       可见,前三种的使用的是同Overlaymixer基本相同的的算法,色彩边缘没有问题,而3D纹理层却采用了领点取样的算法,直接导致色彩边缘锯齿严 重,红色尤为明显。为了灰阶处理,很多朋友都选择了3D纹理层,因为只有在3D纹理曾下,像素着色才可以使用。而这些朋友在获得了正确的灰阶时,没有得到 良好的色彩还原。当然,这其实也可以修正,所以请使用VMR9 3D模式的朋友一定要开启这个像素着色:YV12 Chroma upsampling
       (4) 视频全屏的算法:VMR9在这一点上提供了多种选择,其中双线性插值和Overlay一样,最佳的是PS2.0 双线过滤(A=-0.6)
但是,这个模式也只能在3D 纹理层下使用。这时的全屏效果就超越了Overlay Mixer,请对比:
PS2.0 双线过滤(A=-0.6)
Overlay Mixer
       (5) 画面同步:这才是VMR9真正有问题的地方。当然这一点无法用截图说明。但是玩游戏的人都是到有垂直同步这个选项,如果你不开启,游戏中的画面上下就会出 现断层,变得不连贯。VMR9的断层现象与此相同。所以像Km和Potplayer都有提供修正选项,但是请看清,Potplayer可是注明了(并非完美)。那么什么情况下不够完美呢?
         不知有多少人在用24HZ输出到电视上看视频,这就是最近相当常听到的24P相关的。作者的46XF300C支持24P视频的输入,所以可以使用。而在这种情况下,即时选择了修正,断层现象也是无可避免,而且会非常明显。所以Potpalyer提供了完美解决方案,这的确能彻底解决断层问题,但是这也使你的播放器必须在桌面最上层才可以播放,而且有其他诸多不便,这里就不赘述了。总之,VMR9 在这一点上有很大问题。
       所以,VMR9如很多人所说的,它是一个更加先进的渲染器,对!所以,对使用者的要求也就更加先进了。

3. Haali renderer
      这个作者不想多说,它也被很多人奉为画面最佳的渲染器。作者却认为,它是三者当中工作的最差的一个。
      (1) 在3000之后的A卡上它都无法正常工作,全屏画面有诡异竖线。
     (2) 其他方面相比前两者没有多少优势。它的全屏算法同VMR9的PS2.0相同, 但是UV扩大算法却可VMR9 3D模式相同,且不可修正。
 
     (3) 画面同步:同VMR9相同,且不可修正。

原文链接 http://tujiregza.blogbus.com/logs/35962828.html

你可能感兴趣的:(关于PC播放器色彩空间转换等一些说明)