GPU视频处理详析(去除马赛克的技巧)
人气:0操作方法
- 01
随着互联网的发达,在线视频VOD点播的普及,视频回放能力越来越受重视,显示芯片厂商对于视频能力的宣传也不遗余力,但是汇总起来对比感觉非常混乱,名词又特别多,比如Fullstream,PureVideo等,本文讨论的就是视频回放的一些原理和要点,希望能给用户一点帮助。对于视频回放而言,硬件加速能力,插值补偿能力,色彩还原和调节能力以及软件支持都是决定因素。一.硬件加速 从NVIDIA 近来力推的PureVideo来说起吧,NVIDIA在视频处理方面用上了两千万晶体管这个规模,正好一块GeForce 2 MX400芯片的晶体管规模;在不算上这些晶体管总量已经破两亿规模的情况下和ATI 将来的同系列产品(对于6800而言就是X800系列)对抗成本会相当不利,尤其是双方势均力敌的时候,下面就来看看这两千万晶体管到底葫芦里卖的是什么药。上图就是NV4X的视频部分的概图,在GPU中视频处理单元被划分为三个处理部分:视频处理器(Video Processor),MPEG2解码器(MPEG2 Decoder),运动估算器(Motion Estimator),三个部分连在一个仲裁器上(Arbiter)。 其中,MPEG2 解码器的作用顾名思义,用来硬件解码MPEG2视频的,包括了DVD和MPEG2编码的HDTV(720p/1080i/1080p)等视频。 图中示意的是MPEG2压缩视频处理流程,在NV4X GPU中绿色部分由GPU完成处理器中,其中 IDCT(Inverse Discrete Cosine Transformation反向离散余弦变换)和Motion Compensation(运动补偿,简称MC)。前者是DCT的逆运算,DCT的处理针对图像数据在空间上的冗余的,压缩图像的时候是逐8*8像素单元处理的,为的是把矩阵的能量集中到矩阵的左上角,便于压缩(矩阵大部分是0),浮点运算量不小,其逆运算亦然;后者是针对视频流的时间冗余的,连续图像中相同的部分就是冗余,运动补偿就像画动画的时候,经常使用的方法一样:要画主角说话,一般就是好几张图区别只有嘴型,于是除了嘴以外的部分可以“偷懒”不画,直接“复制粘贴”,在这几张图中光画不同的嘴即可,画的时候省去的工作,在压缩的时候也可以省去。运动补偿要做的就是找出嘴各个部位在动的时候和前一张图的同部分的相对位置(即运动矢量),由于计算机识别图像快匹配不像人眼观察那样,所以计算比较复杂,运算量也不小,在视频回放的时候,根据压缩的时候记录下来的运动矢量和不变的“背景图”,“画”出连续的视频帧来。这两个运算占了解压DVD的大部分工作,因为这两个处理前的数据流都是比较简单的矩阵,之前的行程编码(RLE),反量化(量化是有损压缩的关键,画质损失主要在这里)等处理轻松不少。 这两部分运算交给GPU现在相当普遍了,当初最早在显示适配器上集成硬件IDCT和硬件运动补偿(MC)的就是著名的SIS 6326DVD(Dx版和Cx版,让K6 233这样的CPU也能看DVD),然后就是ATI Rage128,这两款显卡系列当初靠这个能力赢得了不少用户的亲睐;INTEL的810和815板载显卡都硬件支持了MC,NVIDIA在 GeForce 256后开始支持硬件MC,MX440后又加入了硬件IDCT,比起SIS和ATI,NVIDIA过去的视频能力,的确很不怎么样。在NV4X的 PureVideo中,MPEG2 Decoder就是用来处理MPEG2视频文件的IDCT和MC运算的。 其他部分主要还是改善视频效果作用的,De-Interlacing最早Banshee就有了,消除隔行问题处理不好容易导致清晰度不行,一般有Bob和Weave两种方式, ATI从Radeon DDR开始引入Adaptive Pre-Pixel De-Interlacing,即可适应逐像素除交错,在NVIDIA的PureVideo中也有,像素着色器(Pixel Shader)对以前的除交错方式进行修正(Radeon 中的确就有Pixel Shader,只是版本很老,在3D游戏中不实用),PureVideo中引入的是Spatial-Temporal Adaptive Per Pixel De-Interlacing。去马赛克和后处理和插值补偿关系很大了,在后文中有详细描述。 既然MPEG2 Decoder就能很好的回放MPEG2视频,那另外两个部件是干什么的呢? 答案来自其他视频:WMV,MPEG4(AVI等)以及H.264。这些视频解压的时候也有大量IDCT运算和MC运算,这个时候Motion Estimator和Video Precessor就起到作用了。上图就是MPEG4编码的流程,比MPEG2多了预测部分和马赛克处理部分,其余的操作都比较类似,只不过IDCT和MC的时候算法或者参数不同,MPEG2 Decoder无法完成罢了。于是Motion Estamitor就担负起MC相关的运算,Video Processor担负起IDCT运算。上图就是Video Processor的结构,比较复杂,视频处理单元晶体管的很大部分被其占据,主要分为地址单元,标量运算单元,矢量运算单元和分支单元,另外还有8KB 的数据缓存和4KB的指令缓存。这个处理器支持动态分支预测,矢量处理单元是16路的SIMD 矢量单元,用于IDCT这类8*8矩阵运算很合适,运算能力强劲,同时也适合实现复杂的视频编码算法。 对于WMV9,主要的运算和MPEG4类型差不多,参数不同。 H.264 编码效率比较高,相比H263+与MPEG-4标准在保证相同的图象质量下,编码后的码率能减少50%;相比MPEG-2的复杂度,解码器复杂度增加了3 倍,编码器增加了4倍。Video Prosessor也被设计用来实现这样的复杂解码。同时H.264编码的运动补偿部分也比其他编码复杂,运算量大了不少,对Motion Estimator也是个考验。 二.插值补偿以上视频加速部分都是针对视频解压,出来的视频是原始大小,比如DVD视频就是720 X 480(NTSC),VCD视频甚至只有352 X 288,只有720p的视频和1080i,1080p的视频一般不需要缩放,原始大小即可。所以一般PC上的视频播放都是在1024 X 768或者1280 X 1024下全屏播放,这就涉及到视频缩放了。 视频缩放的时候最容易出现的就是马赛克,最简单的例子,打开张图片,用ACDsee打开,放大了看,倍数越高,马赛克越明显。在视频编码里的去马赛克是针对编码中的损失的修正,不是缩放的修正;在缩放的时候就得靠软件或者硬件来对马赛克进行插值补偿了,方法有不少,一般是用类似模糊,柔化的方法。不同的显示芯片,插值的方法和效果大相径庭。 说到插值就得说说Overlay Mixer和Video Mixing Renderer (VMR)了。前者被称为“视频覆盖”或者重叠,是通过相关硬件进行视频缩放,色域转换(RGB和YUV的互相转换),亮度,Gamma,色彩饱和度的调节等等,老显卡的视频都是通过Overlay“显示”出来的,Overlay的对于视频放大所产生马赛克通过过滤器进行插值补偿,达到消除马赛克的效果。过滤器通常有水平5级和垂直3级之类的规格,比较厉害的比如Voodoo Banshee/Voodoo3/4/5是10级过滤,在消除马赛克的功夫上是老显卡中的佼佼者。NVIDIA在吞并了3dfx后在GeForce FX显卡中把3dfx的10级过滤学到手了,弥补了以前的不足,脱掉了“格子神化”的帽子。幻日的10级带锐化的过滤器是目前最强大的,V卡的过滤器经常被人描述成“太模糊,有朦胧感,有Photoshop中模糊用过分了的感觉”,幻日的过滤器很好的解决了这个问题。由于Overlay是硬件播放和缩放,对于配置比较低的机器而言,用Overlay Mixer是首选。 Vmr7(Video Mixing Renderer 7)是Windows XP中默认的播放选择,直接支持了DXVA(DirectX Video Acceleration, DirectX视频加速,包括了对硬件IDCT,MC的支持),兼容性比较好,对显示芯片的特殊要求少,显存有16M,支持16位及以上级别色彩回放即可,Overlay Mixer不同的显示芯片支持的程度不同,比如TNT2就不支持硬件色彩饱和度调节,我用CANOPUS SPECTRA 5400的时候一动饱和度选项,放DIVX视频就卡了,CPU是ATHLON 1.33G。VMR7还支持了多窗口播放,这个是Overlay Mixer的软肋,硬件Overlay Mixer只支持单窗口播放,开第二个窗口播放就变成软件Overlay Mixer播放了,CPU占用率大大增加,VMR就没这个问题,并且不会像软件Overlay Mixer那样狂占CPU,双头显示的时候相当实用。还有个好处就是支持了视频截图,Overlay Mixer在视频截图的时候常常采用的方法是开两个视频窗口,截软件Overlay Mixer的图,很麻烦。VMR可以加入各种效果,类似滤镜,比如模糊,锐化,甚至IDCT都能调节(针对软件IDCT)。著名的ffdshow就是 VMR的好伴侣,不过ffdshow是软件调节,对CPU要求不低。上图就是ffdshow的去马赛克选项,调整后可以达到比硬件插值补偿更好的效果。另外Blur和Sharp也是比较受欢迎的选项。 VMR7的缺陷是CPU占用率比硬件Overlay Mixer高,对于比较弱的CPU来说还是要求不低。 Vmr9是DirectX 9.0发布后的产物,特点是支持了Pixel Shader(像素着色器)对视频的修正。Pixel Shader可以对像素进行操作,以前的操作,包括去马赛克等都是针对图像快,不是针对单个像素而言的,因此VMR9有着更高的精度,在高分辨率的情况下效果更好。对于硬件支持Pixel Shader的显卡(即完全硬件支持DirectX 8.0或者以上级别的显卡)VMR9能获得更好的视频效果,并且,由于Pixel Shader是GPU操作(要选择“纹理表面并以3D模式渲染”,CPU占用率比VMR7低不少。对于VMR9,ATI的9X00及以上级别显卡,NVIDIA的FX以及以上级别显卡都支持相当不错,一般回放视频的时候,这类显卡按照上图的设置效果最好,CPU占用也不高。ATI同时还推出了Video Shader来改善MPEG4播放的效果(主要还是用Pixel Shader来修正),宣传为Fullstream,但是目前看来似乎也就DIVX有ATI优化,而且效果对比对手也显示不了多少优势,驱动中能提供的选项似乎只有一些不太实用的效果,比如浮雕等。VIA-S3推出的Deltachrome S8的Chromotion在这方面比ATI复杂不少,也是通过Pixel Shader来进行后处理的,驱动选项里的柔化,锐化,以及解块渗透对于视频播放质量的改善效果很明显。NVIDIA的FX系列显卡以及NV4X在 VMR9上都用了4 X 5的过滤来消除马赛克,ATI,Matrox以及S3都是只用了4 x 4的过滤,加之Pixel Shader的修正,NVIDIA在VMR9的情况下效果非常好。三.色彩 色彩是视频回放好坏的又一个重点,NVIDIA以前有“黯淡神化”的说法,理由是NVIDIA以前的显卡,诸如TNT2,GeForce 2,默认的Overlay Mixer的Gamma值太低,亮度也太低,导致暗部的层次不清楚,看片很不爽,TNT2甚至调节色彩饱和度对CPU要求还不小;同时期的ATI的默认 Gamma相当不错,再加之Overlay Mixer和VMR的插值补偿都很不错,又支持硬件IDCT,硬件MC,CPU占用率相当低,所以ATI当时的视频相当受用户欢迎。NVIDIA为了解决 “黯淡”的问题,推出了DVC,即数字震动,调节后的确可以改善暗淡的问题,但是FX问世前的数字震动调节太不灵活,只有4级变化,感觉失真比较严重,DVC 2.0后的数字震动就能进行微调了,比默认稍稍左移就能达到很好的效果,并且可以随时调节,不像ATI调节视频覆盖,必须回放的时候调节。 即便如此,ATI仍旧有优势,因为大多数用户还是仅仅使用默认设置的。ATI默认设置的色彩取向偏红,比较适合我们东方人的胃口,并非是真实的色彩才受欢迎的,就像没有音染的音箱耳机不一定讨人喜欢一样,很多人就认为ATI视频的色彩比能真实还原色彩的Matrox G400MAX显卡色彩好;NVIDIA虽然也能调节到ATI相同的效果,甚至更好的效果,但是调节总是麻烦事,数字震动出现以前,玩家也可以通过调节 Overlay的Gamma和对比度,色调等达到DVC能调到的效果,这毕竟麻烦了很多,而且CPU占用大大提高。所以现在的ATI虽然马赛克修正和硬件视频播放上有点吃亏,但是凭借比较受欢迎的默认色彩取向,还是相当有竞争力的。 四.软件支持 软件支持也相当重要,当初SIS 6326DVD在任何播放器上都能硬件回放DVD视频?NVIDIA的PureVideo更是发布后好几个月都没有相应软件支持,连DVD播放都只能软件播放,对于NV4X而言,WMV,MPEG4硬件播放也需要驱动和播放器的支持,不然Video Processor不会代替CPU进行处理,还是在软件播放。S3 Deltachrome也备受没什么软件支持,打不开硬件加速之苦。现在NVIDIA的DVD Decoder准备收费,而且相应的播放器也没有出来,第三方播放器对其的支持更是遥遥无期,这个是PureVideo目前最大的问题。在这方面ATI向来做得不错,随光盘附带的播放器能够对显卡提供最好的支持,效果看得见摸得着,在第三方软件上对ATI的支持也相当不错。 以往赫赫有名的WinDVD,PowerDVD的硬件加速,色彩调节依旧不错,MPC(Media Player Classic,国内有DIY版,暴风影音等版本)是一个很好的选择,不仅仅在于这个播放器能加很多插件和解码器,有“全能播放器”的味道,更在于其丰富的调节能力,调用FFDSHOW能达到硬件回放达不到的效果;Kmp Player能很方便的更换解码器,Cineplayer则在MPEG2硬件加速支持方面功力深厚,网上流传的“让赛扬1.2G流畅HDTV”就是利用这个播放器的解码器达到的(针对MPEG2编码的HDTV)。五.其他 Matrox和VIA-S3在2D和视频方面功力深厚,除了支持标准的DXVA以外,还有独到的手段。前者的幻日,P750,P650芯片支持了亿彩视频,每个色彩通道10BIT色彩,也就是1024级色彩(2的10次方),RGB三个通道就是10亿色;普通的显卡只支持8BIT,也就是256级(2的8次方),RGB三个通道只有1677万色(16m),能表现的色彩范围差别太大。很多高档的DVD播放机都是要支持超过16m(24位)色的,在PC上,幻日等P系列显卡独占鳌头了,其他显示芯片虽然支持10bit输出,但是没有支持亿彩视频的。 后者的Deltachrome S8的Chromotion很有特色,驱动控制面板上直接带有了deblocking,锐化等选项,而且调节起来cpu占用远远小于ffdshow的软件调节,相当方便。上图就是锐化效果解块渗透就是deblocking选项,用于去马赛克,特别针对RMVB,WMV,RM文件,第一档足以满足要求,第二档适合品质很差的rm文件,超过2不建议使用。尾声 对于现在大多数显卡而言,视频回放很差的显卡已经难找到了,但是,对于不同的要求要选择称心如意的还是得斟酌斟酌的,以下是笔者的推荐: 对于机器配置很低的用户,建议二手Voodoo3,Rage 128,Radeon LE,Overlay Mixer下视频播放,Voodoo卡对于去马赛克还是很有功底的,用来看RM,RMVB,WMV效果相当不错。 对于普通用户,一般就上上网在线看看东方宽频的电影,看看DVD视频,看看RMVB格式的电影,推荐NVIDIA FX5200或者FX5700 LE,测试表明,FX系列的硬件加速能力比ATI的显卡要强大,FX的插值补偿能力是值得推荐的,NVIDIA现在的驱动能直接对VMR进行调节,色彩上DVC稍稍右移一点能达到更好的效果。对于什么都不调节,又不喜欢NVIDIA默认的色彩,9550是个很不错的选择,如果配合ffdshow进行去马赛克的调节(De-Blocking)效果也相当不错。 对于PCIe显卡的用户,6600系列目前是最适合作视频显卡的了,支持了很多的格式的硬件加速,画面质量也相当不错,不过还是要注意驱动和DVD Decoder的选择。 对于高端视频用户,在高档显示器(高档大屏幕CRT,双正投,等离子等)看看HDTV视频,还是推荐幻日+软件调节,凭借幻日优异的色彩还原能力达到很好的效果;另外S3 Deltachrome S8也是一个很好的选择,调节相当方便。解块渗透就是deblocking选项,用于去马赛克,特别针对RMVB,WMV,RM文件,第一档足以满足要求,第二档适合品质很差的rm文件,超过2不建议使用。尾声 对于现在大多数显卡而言,视频回放很差的显卡已经难找到了,但是,对于不同的要求要选择称心如意的还是得斟酌斟酌的,以下是笔者的推荐: 对于机器配置很低的用户,建议二手Voodoo3,Rage 128,Radeon LE,Overlay Mixer下视频播放,Voodoo卡对于去马赛克还是很有功底的,用来看RM,RMVB,WMV效果相当不错。 对于普通用户,一般就上上网在线看看东方宽频的电影,看看DVD视频,看看RMVB格式的电影,推荐NVIDIA FX5200或者FX5700 LE,测试表明,FX系列的硬件加速能力比ATI的显卡要强大,FX的插值补偿能力是值得推荐的,NVIDIA现在的驱动能直接对VMR进行调节,色彩上DVC稍稍右移一点能达到更好的效果。对于什么都不调节,又不喜欢NVIDIA默认的色彩,9550是个很不错的选择,如果配合ffdshow进行去马赛克的调节(De-Blocking)效果也相当不错。 对于PCIe显卡的用户,6600系列目前是最适合作视频显卡的了,支持了很多的格式的硬件加速,画面质量也相当不错,不过还是要注意驱动和DVD Decoder的选择。 对于高端视频用户,在高档显示器(高档大屏幕CRT,双正投,等离子等)看看HDTV视频,还是推荐幻日+软件调节,凭借幻日优异的色彩还原能力达到很好的效果;另外S3 Deltachrome S8也是一个很好的选择,调节相当方便。
加载全部内容