常见视频编码格式与RGB、YUV视频存储格式.docx_第1页
常见视频编码格式与RGB、YUV视频存储格式.docx_第2页
常见视频编码格式与RGB、YUV视频存储格式.docx_第3页
常见视频编码格式与RGB、YUV视频存储格式.docx_第4页
常见视频编码格式与RGB、YUV视频存储格式.docx_第5页
已阅读5页,还剩17页未读 继续免费阅读

常见视频编码格式与RGB、YUV视频存储格式.docx.docx 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TCC8900 VPU分析常见视频编解码格式及RGB和YUV存储格式预研文档修订记录版本时间修订者修订内容1.02011-3-27刘文龙创建文档每次修改与增加内容者,需在文档修订记录中进行记录一、 常见视频编解码格式1视频文件类别常言道:物以类聚,人以群分。视频文件也不例外,细细算起来,视频文件可以分成两大类:其一是影像文件,比如说常见的VCD便是一例。其二是流式视频文件,这是随着国际互联网的发展而诞生的后起视频之秀,比如说在线实况转播,就是构架在流式视频技术之上的。1.1影像格式日常生活中接触较多的VCD、多媒体CD光盘中的动画这些都是影像文件。影像文件不仅包含了大量图像信息,同时还容纳大量音频信息。所以,影像文件的“身材”往往不可小觑。1) AVI格式2) MOV格式3) MPEG/MPG/DAT格式1.2流式视频格式目前,很多视频数据要求通过Internet来进行实时传输,前面我们曾提及到,视频文件的体积往往比较大,而现有的网络带宽却往往比较“狭窄”,千军万马要过独木桥,其结果当然可想而知。客观因素限制了视频数据的实时传输和实时播放,于是一种新型的流式视频(Streaming Video)格式应运而生了。这种流式视频采用一种“边传边播”的方法,即先从服务器上下载一部分视频文件,形成视频流缓冲区后实时播放,同时继续下载,为接下来的播放做好准备。这种“边传边播”的方法避免了用户必须等待整个文件从Internet上全部下载完毕才能观看的缺点。到目前为止,Internet上使用较多的流式视频格式主要是以下三种:1) RM(Real Media)格式RM格式是RealNetworks公司开发的一种新型流式视频文件格式,它麾下共有三员大将:RealAudio、RealVideo和RealFlash。RealAudio用来传输接近CD音质的音频数据,RealVideo用来传输连续视频数据,而RealFlash则是RealNetworks公司与Macromedia公司新近合作推出的一种高压缩比的动画格式。RealMedia可以根据网络数据传输速率的不同制定了不同的压缩比率,从而实现在低速率的广域网上进行影像数据的实时传送和实时播放。这里我们主要介绍RealVideo,它除了可以以普通的视频文件形式播放之外,还可以与RealServer服务器相配合,首先由RealEncoder负责将已有的视频文件实时转换成RealMedia格式,RealServer则负责广播RealMedia视频文件。在数据传输过程中可以边下载边由RealPlayer播放视频影像,而不必像大多数视频文件那样,必须先下载然后才能播放。目前,Internet上已有不少网站利用RealVideo技术进行重大事件的实况转播。2) MOV文件格式(QuickTime)MOV也可以作为一种流文件格式。QuickTime能够通过Internet提供实时的数字化信息流、工作流与文件回放功能,为了适应这一网络多媒体应用,QuickTime为多种流行的浏览器软件提供了相应的QuickTime Viewer插件(Plugin),能够在浏览器中实现多媒体数据的实时回放。该插件的“快速启动(Fast Start)”功能,可以令用户几乎能在发出请求的同时便收看到第一帧视频画面,而且,该插件可以在视频数据下载的同时就开始播放视频图像,用户不需要等到全部下载完毕就能进行欣赏。此外,QuickTime还提供了自动速率选择功能,当用户通过调用插件来播放QuickTime多媒体文件时,能够自己选择不同的连接速率下载并播放影像,当然,不同的速率对应着不同的图像质量。此外,QuickTime还采用了一种称为QuickTime VR的虚拟现实(VR,Virtual Reality)技术,用户只需通过鼠标或键盘,就可以观察某一地点周围360度的景象,或者从空间任何角度观察某一物体。3) ASF(Advanced Streaming Format)格式Microsoft公司推出的Advanced Streaming Format (ASF,高级流格式),也是一个在Internet上实时传播多媒体的技术标准,Microsoft公司的野心很大,希图用ASF取代QuickTime之类的技术标准。ASF的主要优点包括:本地或网络回放、可扩充的媒体类型、部件下载、以及扩展性等。ASF应用的主要部件是NetShow服务器和NetShow播放器。有独立的编码器将媒体信息编译成ASF流,然后发送到NetShow服务器,再由NetShow服务器将ASF流发送给网络上的所有NetShow播放器,从而实现单路广播或多路广播。这和Real系统的实时转播则是大同小异。2常见的视频的编码及封装格式2.1常见视频编码格式常见的编码格式有H.264、H.263、MPEG-1、MPEG-2、MPEG、4、Sorenson Spark、VC-1、JPEG、RV、DivX、On2 True Motion VP6。对于高清视频来说,主流的编码技术目前主要有 MPEG-2、DivX、XVID、H264/AVC、VC-1、RMVB 和 WMV-HD 等等。其中,H264/AVC、VC-1、MPEG-2 是蓝光(Blu-ray Disc)所选择的编码格式,也是目前最流行的高清视频编码格式。另外就是高清视频的封装格式,封装格式和编码格式是互相区别的,许多人会把它们混淆。下图为常见编码格式的logo:图1.1常见编码格式logo1) H264/X264/AVC 编码格式绝大多数视听玩家对于 H264 编码都不会感到陌生,H264 编码的身世显赫,是 ITU-T(国际电信联盟视频编码专家组)与 ISO/IEC(国际标准化组织动态图像专家组)合作组成的 JVT(联合视频组)推动的新一代数字视频编码标准,也称为 MPEG-4/AVC 编码。H264 编码依托雄厚的背景,在技术上独树一帜,大幅领先于其它编码算法。X264 编码,是 H264 编码的一个开源分支,它符合 H264 标准,其功能在于编码,而不作为解码器使用,X264 编码最大的特点在于注重实用,它在不明显降低编码性能的前提下,努力降低编码的计算复杂度,X264 对于 H264 编码中的一些复杂编码特性做了折衷处理,其压缩视频体积小于XVID(MPEG-4)编码视频,以小体积、高画质的特点得到了广泛认可。2) H.263编码格式H.263是国际电联ITU-T的一个标准草案,是为低码流通信而设计的。但实际上这个标准可用在很宽的码流范围,而非只用于低码流应用,它在许多应用中可以认为被用于取代H.261。H.263的编码算法与H.261一样,但做了一些改善和改变,以提高性能和纠错能力。 1998年IUT-T推出的H.263是H.263建议的第2版,它提供了12个新的可协商模式和其他特征,进一步提高了压缩编码性能。如H.263只有5种视频源格式,H.263允许使用更多的源格式,图像时钟频率也有多种选择,拓宽应用范围;另一重要的改进是可扩展性,它允许多显示率、多速率及多分辨率,增强了视频信息在易误码、易丢包异构网络环境下的传输。另外,H.263对H.263中的不受限运动矢量模式进行了改进,加上12个新增的可选模式,不仅提高了编码性能,而且增强了应用的灵活性。H.263已经基本上取代了H.2613) MPEG-1 编码格式MPEG-1是MPEG组织制定的第一个视频和音频有损压缩标准。视频压缩算法于1990年定义完成。1992年底,MPEG-1正式被批准成为国际标准。MPEG-1是为CD光碟介质定制的的视频和音频压缩格式。一张70分钟的CD光碟传输速率大约在1.4Mbps。而MPEG-1采用了块方式的运动补偿、离散馀弦变换(DCT)、量化等技术,并为1.2Mbps传输速率进行了优化。MPEG-1随后被Video CD采用作为核心技术。MPEG-1的输出质量大约和传统录像机VCR,信号质量相当,这也许是Video CD在发达国家未获成功的原因。4) MPEG-2 编码格式MPEG-2 编码标准是由 MPEG(Moving Picture Experts Group)工作组发布的视频与音频压缩国际标准。MPEG-2 编码于 1994 年发布,常用于广播信号(卫星电视、有线电视)的视频和音频编码,经过后期不断修改,不仅成为 DVD 的核心技术,还应用于 HDTV 高清电视传输。5) MPEG-4 编码格式MPEG4于1998 年11 月公布,原预计1999 年1月投入使用的国际标准MPEG4不仅是针对一定比特率下的视频、音频编码,更加注重多媒体系统的交互性和灵活性。MPEG-4标准主要应用于视像电话(Video Phone),视像电子邮件(Video Email)和电子新闻(Electronic News)等,其传输速率要求较低,在4800-64000bits/sec之间,分辨率为176X144。MPEG-4利用很窄的带宽,通过帧重建技术,压缩和传输数据,以求以最少的数据获得最佳的图像质量。6) Sorensen Spark编码格式Sorenson编解码器可以指三个专有的视频编解码器:Sorenson视频,Sorenson视频3或Sorenson Spark。 Sorenson视频也被称为Sorenson视频编解码器,Sorenson视频量化或SVQ。Sorenson Spark也被称为H.263或FLV1 Sorenson(而且有时误为Flash视频(FLV),这是以Adobe Flash容器格式名称命名)。这两种编解码器的设计由Sorenson媒体公司。Sorenson视频是用在苹果的QuickTime和Sorenson Spark在用在Adobe Flash容器中。7) VC-1 编码格式WMV(Windows Media Video)作为经久不衰的一种视频编码,一直在不断改进,2003 年,微软基于 WMV 第九版(WMV9)编码技术,正式提出了 VC-1 编码标准,并于 2006 年正式成为国际标准。VC-1 编码作为较晚推出的高清编码算法,自然吸收了 MPEG-2 与 H264 编码的优点,其压缩比介于 MPEG2 和 H264 之间,编解码复杂性仅有 H264 的一半,即压缩时间更短、解码计算更小,在微软的大力推动下,VC-1 编码已经得到了 BD 蓝光光盘、电影及电视学会(SMPTE)的支持。近几年来,为了更好的推广 WMV9/VC-1 编码标准,微软不遗余力的建立了 WMV-HD 高清资源站点,大量发布采用 VC-1 编码压制的 720P、1080P 宣传片及演示片(WMV-HD 视频格式) ,试图营造声势,吸引用户关注。不过,中庸的技术(与 H264 相比无明显编码优势)、封闭的平台(限于 Windows 系统)、后发的劣势(2006 年通过成为国际标准)仍然给微软 VC-1 编码的应用前景带来了较大的不确定性。8) JPEG编码格式JPEG 是Joint Photographic Experts Group(联合图像专家小组)的缩写。JPEG的压缩方式通常是破坏性资料压缩(lossy compression),意即在压缩过程中图像的品质会遭受到可见的破坏,有一种以JPEG为基础的标准Progressive JPEG是采用无失真的压缩方式,但Progressive JPEG并没有受到广泛的支援。9) RV编码格式RealVideo格式文件包括后缀名为RA、RM、RAM、RMVB的四种视频格式。 Real Video是一种高压缩比的视频格式,可以使用任何一种常用于多媒体及Web上制作视频的方法来创建RealVideo文件。例如Premiere、 VideoShop以及AfterEffects等,对于文件的播放可用realplayer和暴风影音播放。10) DivX编码格式DivX格式,这是由MPEG4衍生出的另一种视频编码(压缩)标准,也即我们通常所说的DVDrip格式,它采用了MPEG4的压缩算法同时又综合了MPEG-4与MP3各方面的技术,说白了就是使用DivX压缩技术对DVD盘片的视频图像进行高质量压缩,同时用MP3或AC3对音频进行压缩,然后再将视频与音频合成并加上相应的外挂字幕文件而形成的视频格式。其画质直逼DVD并且体积只有DVD的数分之一。这种编码对机器的要求也不高,所以DivX视频编码技术可以说是一种对DVD造成威胁最大的新生视频压缩格式,号称DVD杀手或DVD终结者。11) On2 TrueMotion VP6编码格式On2 TrueMotion VP6是主要的移动视频标准,他采用了Adobe Flash Lite 3的一些标准,数以百计的网络门户,用户自己制作的内容,以及社交网络普遍采用基于Flash的VP6格式。2.2视频的封装格式封装格式其实是一个“容器”,它不同于编码格式,封装就相当于捆绑打包,将已经编码好的视频文件和音轨文件打包在一起,并按照一定规则建立排序和索引,便于播放器或播放软件来索引播放。常见的封装格式有 MKV、AVI、MOV、TS、PS 等等,高清媒体文件的后缀名(扩展文件名)一般都是媒体的封装格式。(1)MOV 格式:MOV 多见于 Apple QuickTime 网站上的电影预告片。MOV 类似于 RMVB,过于封闭自守,民间制作组没有人会用这个不方便的形式。(2)AVI 格式:AVI 封装是微软在上世纪 90 年代初创立的封装标准,是当时为对抗 QuickTime 的 MOV 格式而推出的,因为当时还没有流式播放需要,AVI 的将索引布置在打包文件的尾部,这就使得AVI封装不能做到流式播放(流媒体)。AVI 封装只能支持有限的几种视频音频编码形式,且AVI不能支持音频的 VBR 动态比特率编码。(3)TS 格式:TS(Transport Stream)是一种比较先进的封装形式,蓝光原盘中,就采用了 TS 封装。TS 封装支持几乎所有编码的高清视频和音轨文件。PS(Program Stream)封装的技术基本和 TS 相同,但 PS 封装和 AVI 一样,都不是流媒体,不能够支持流式播放,PS 封装使用在原先的 HDDVD 中。在高清标准下,MPEG-2 编码的视频文件主要采用 TS 封装格式。(4)MKV 格式:MKV(Matroska)是一种新兴的多媒体封装格式,可以将各类视频编码、16 条或以上不同格式的音频和语言不同的字幕封装在一个文件内,它具有开放源代码、音视频编码丰富、网络亲和性好等优势,已经得到众多视频压制组和玩家的支持,正逐渐成为高清视频的主流视频格式。H264 编码与 X264 编码目前大多采用 MKV 封装格式。3视频的播放组件及调用流程视频文件的解码过程如下依次需要用到的组件有“分离器”、“解码器”、“渲染器”,它们统称为“滤镜”。3.1分离器(Splitter)要正确地播放多媒体文件,播放器首先要正确地调用分离器,把视频流和(或)音频流正确地分离出来,然后交给解码器进行解码,这就是分离器的使命。上文中说到有不少的封装格式,每一种封装格式都必须有相对应一种分离器,才能正确的把视频和音频分离出来以供解码器解码。常用的分离器有: Gabest MPEG Splitter(Media Player Classic 作者编写的分离器)、 KMP Splitter(KMPlayer 原配的分离器) Haili Media Splitter 这三种分离器能够支持较多的封装格式,其它的分离器还有 Moonlight-Elecard MPEG2 Demultiplexer(月光分离器)、 nVIDIA Transport Demux(nVIDIA 公司的分离器,配合 PureVideo 使用)、 CyberLink Demux(PowerDVD 软件中的分离器)3.2解码器(Decoder)解码器在整个视频的播放中占据了最主要的位置,它的作用是对由分离器分离出来的音频流和视频流分别进行解码。解码器又分为视频解码器和音频解码器。常见的视频解码器有:1) MPEG-2 视频解码器 InterVideo Video Decoder(WinDVD 的解码器) CyberLink DTV Video/SP Filter CyberLink Video/SP Filter(PowerDVD 的解码器) Moonlight-Elecard MPEG2 Video Decoder nVIDIA Video Decoder(nVIDIA PureVideo 的解码器) Sonic CinemasterVideo、Gabest Video Decoder 2) H264/X264/AVC 视频解码器 CyberLink H.264/AVC Decoder(PowerDVD 的解码器)、 CoreAVC DirectShow Video Decoder Moonlight H264 Video Decoder ffdshow MPEG-4 Video Decoder 3) VC-1 视频解码器CyberLink VC-1 Deocder(PowerDVD 的解码器)、Media Player Classic Video Decoder、WMVideo Decoder DMO(微软的解码器)等等。常见的音频解码器有: CyberLink Audio Decoder(PowerDVD 的解码器) AC3 Filter InterVideo Audio Decoder nVIDIA Audio Decoder 3.3渲染器(Renderer)渲染器与解码器一样,分为视频渲染器和音频渲染器,解码后的视频数据经过视频渲染器的渲染后呈现到显示设备上,解码后的音频经过音频渲染器的渲染后从声卡输出。渲染在视频播放的过程中是很重要的,因为它会影响到视频最终的效果,不同的渲染器有不同的技术特性,对电脑的配置(主要是 CPU 和显卡)的要求也不一样。视频渲染器主要有以下几种:1) 旧式视频渲染器(Video Renderer):这种是最原始的渲染器,它接收到来自解码器解码后的数据流,在显示设备上显示。这种渲染器基本上不能调用到显卡硬件特性,全靠 CPU 来完成渲染任务。2) 覆盖合成器(Overlay Mixer):覆盖合成器能够将若干路视频流合并输出到显示设备上,并且它能够很好地调用显卡硬件的拉伸,颜色空间变换等硬件功能,以减少对 CPU 资源的占用率。视频覆盖的画面质量事实上取决于显卡硬件。通常在使用覆盖合成器的时候无法直接对正在播放的视频截图。3) VMR 渲染器(Video Mixing Renderer):VMR 对覆盖合成器进行了改进,它是基于 DirectX 的视频渲染器,能够支持 16 路的视频流混合。VMR 根据 DirectX 版本的不同,可以分为 VMR7 和 VMR9,其中 VMR7 基于 DirectDraw7(2D),而 VMR9 基于 Direct3D9(3D),VMR9 可以支持视频特效(Video Effects)和视频变换(Video Transitions)。VMR 根据渲染模式的不同又分为“窗口化”(Windowed)、“无窗口”(Windowless)、“未渲染”(Renderless)模式。4) EVR 增强型视频渲染器(Enhanced Video Renderer)微软在 Windows Vista 系统就开始引入的新视频渲染器,当然也包含在新的操作系统 Windows 7 中。它与 VMR 最大的区别就是能够支持 DXVA 2.0。二、RGB和YUV视频存储格式视频数据,图像数据在存储中的存储格式主要有RGB和YUV。RGB是多媒体数据进行数据存储采用的主流格式;YUV格式所需存储空间一般是RGB格式存储空间的一半,所以YUV格式主要用于多媒体数据传输中。1 RGB视频存储格式1.1 RGB概述计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。这种色彩的表示方法称为RGB色彩空间表示。根据三基色原理,任意一种色光F都可以用不同分量的R、G、B三色相加混合而成。F = r R + g G + b B 其中,r、g、b分别为三基色参与混合的系数。当三基色分量都为0(最弱)时混合为黑色光;而当三基色分量都为k(最强)时混合为白色光。调整r、g、b三个系数的值,可以混合出介于黑色光和白色光之间的各种各样的色光。1.2常见的RGB格式RGB的GUID (globally unique identifier全球唯一标识符)格式描述描述如下表所示:表2.1 RGB的GUID描述RGB的GUID描述符描述符说明MEDIASUBTYPE_RGB1 2每个像素用1位表示,需要调色板MEDIASUBTYPE_RGB4 16每个像素用4位表示,需要调色板MEDIASUBTYPE_RGB8 256每个像素用8位表示,需要调色板MEDIASUBTYPE_RGB565每个像素用16位表示,RGB分量分别使用5位、6位、5位MEDIASUBTYPE_RGB555每个像素用16位表示,RGB分量都使用5位(剩下的1位不用)MEDIASUBTYPE_RGB24每个像素用24位表示,RGB分量各使用8位MEDIASUBTYPE_RGB32每个像素用32位表示,RGB分量各使用8位(剩下的8位不用)MEDIASUBTYPE_ARGB32每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)1.3各种RGB格式介绍RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。1) RGB1以RGB1(2色位图)为例,比如它的调色板中 定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色),那么图像数据001101010111(每个像素用1位表示)表示对应各 像素的颜色为:黑黑白白黑白黑白黑白白白2) RGB565RGB565使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。程序中通常使用一个字(WORD,一个字等于两个字节)来操作一个像素。当读出一个像素后,这个字的各个位意义如下:高字节 低字节R R R R R G G G G G G B B B B B可以组合使用屏蔽字和移位操作来得到RGB各分量的值:#define RGB565_MASK_RED 0xF800#define RGB565_MASK_GREEN 0x07E0#define RGB565_MASK_BLUE 0x001FR = (wPixel & RGB565_MASK_RED) 11; / 取值范围0-31G = (wPixel & RGB565_MASK_GREEN) 5; / 取值范围0-63B = wPixel & RGB565_MASK_BLUE; / 取值范围0-313) RGB555RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一个字读出一个像素后,这个字的各个位意义如下:高字节 低字节X R R R R G G G G G B B B B B (X表示不用,可以忽略)可以组合使用屏蔽字和移位操作来得到RGB各分量的值:#define RGB555_MASK_RED 0x7C00#define RGB555_MASK_GREEN 0x03E0#define RGB555_MASK_BLUE 0x001FR = (wPixel & RGB555_MASK_RED) 10; / 取值范围0-31G = (wPixel & RGB555_MASK_GREEN) 5; / 取值范围0-31B = wPixel & RGB555_MASK_BLUE; / 取值范围0-314) RGB24RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:typedef struct tagRGBTRIPLE BYTE rgbtBlue; / 蓝色分量BYTE rgbtGreen; / 绿色分量BYTE rgbtRed; / 红色分量 RGBTRIPLE;5) RGB32RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的 RGB32。)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:typedef struct tagRGBQUAD BYTE rgbBlue; / 蓝色分量BYTE rgbGreen; / 绿色分量BYTE rgbRed; / 红色分量BYTE rgbReserved; / 保留字节(用作Alpha通道或忽略) RGBQUAD;2 YUV视频存储格式2.1 YUV概述在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD摄像机进行摄像,然后把摄得的彩色图像信号经分色、分别放大校正后得到 RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号RY(即U)、BY(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送 出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。本文讲述的格式全部使用每个像素位置 8 位的方式来编码 Y 频道(也称为灯光频道),并使用每样例 8 位的方式来编码每个 U 或 V 色度样例。但是,大多数 YUV 格式平均使用的每像素位数都少于 24 位,这是因为它们包含的 U 和 V 样例比 Y 样例要少。注 在本文中,U 一词相当于 Cb,V 一词相当于 Cr。2.2常见YUV的格式在DirectShow 中,常见的YUV格式有 YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、 YUV420等。作为视频媒体类型的辅助说明类型(Subtype),它们对应的GUID(Globally Unique Identifier)如下表所示。表2.2 YUV的GUID描述YUV的GUID描述符描述符说明MEDIASUBTYPE_YUY2 YUY2以4:2:2方式打包MEDIASUBTYPE_YUYV YUYV实际格式与YUY2相同MEDIASUBTYPE_YVYU YVYU以4:2:2方式打包MEDIASUBTYPE_UYVY UYVY以4:2:2方式打包MEDIASUBTYPE_AYUV AYUVAlpha通道的4:4:4 YUV格式MEDIASUBTYPE_Y41P Y41P以4:1:1方式打包MEDIASUBTYPE_Y411 Y411实际格式与Y41P相同MEDIASUBTYPE_Y211 Y211MEDIASUBTYPE_IF09 IF09格式MEDIASUBTYPE_IYUV IYUV格式MEDIASUBTYPE_YV12 YV12格式MEDIASUBTYPE_YVU9 YVU9格式2.3 YUV主要采样格式主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值),每 2x2 个点保存一个 Cr 和Cb 值, 图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R,G,B 都是 8bit unsigned) 模型, 1个点需要 8x3=24 bits,若4:4:4按采样后,YUV仍各占8bit。按4:1:1采样后,而现在一个点平均仅需要 8+(8/4)+(8/4)=12bits。这样就把图像的数据压缩了一半。 YUV 的优点之一是,色度频道的采样率可比 Y 频道低,同时不会明显降低视觉质量。有一种表示法可用来描述 U 和 V 与 Y 的采样频率比例,这个表示法称为 A:B:C 表示法: 4:4:4:表示色度频道没有下采样。 4:2:2: 表示 2:1 的水平下采样,没有垂直下采样。对于每两个 U 样例或 V 样例,每个扫描行都包含四个 Y 样例。 4:2:0: 表示 2:1 的水平下采样,2:1 的垂直下采样。 4:1:1: 表示 4:1 的水平下采样,没有垂直下采样。对于每个 U 样例或 V 样例,每个扫描行都包含四个 Y 样例。2.3.1 YUV采样格式图示1) YUV 4:4:4 采样下图显示了 4:4:4 图片中使用的采样网格。灯光样例用叉来表示,色度样例则用圈表示。 图2.1 YUV 4:4:4 样例位置2) YUV 4:2:2 采样4:2:2 采样的这种主要形式在 ITU-R Recommendation BT.601 中进行了定义。图 2.1显示了此标准定义的采样网格。图 2. 2 YUV 4:2:2 样例位置3) YUV 4:2:0 采样4:2:0 采样有两种常见的变化形式。其中一种形式用于 MPEG-2 视频,另一种形式用于 MPEG-1 以及 ITU-T recommendations H.261 和 H.263。图 2.3 显示了 MPEG-1 方案中使用的采样网格,图 2.4显示了 MPEG-2 方案中使用的采样网格。 图2.3 YUV 4:2:0 样例位置(MPEG-1 方案)图 2.4 YUV 4:2:0 样例位置(MPEG-2 方案)与 MPEG-1 方案相比,在 MPEG-2 方案与为 4:2:2 和 4:4:4 格式定义的采样网格之间进行转换更简单一些。因此,在 Windows 中首选 MPEG-2 方案,应该考虑将其作为 4:2:0 格式的默认转换方案。 2.3.2YUV存储方式本文讲述推荐用于视频呈现的 8 位 YUV 格式。这些格式可以分为几个类别: 4:4:4 格式,每像素 32 位 4:2:2 格式,每像素 16 位 4:2:0 格式,每像素 16 位 4:2:0 格式,每像素 12 位 首先,理解下列概念,这样才能理解接下来的内容: 表面原点:对于本文讲述的 YUV 格式,原点 (0,0) 总是位于表面的左上角。 跨距:表面的跨距,有时也称为间距,指的是表面的宽度,以字节数表示。对于一个表面原点位于左上角的表面来说,跨距总是正数。 对齐:表面的对齐是根据图形显示驱动程序的不同而定的。表面始终应该 DWORD 对齐,就是说,表面中的各个行肯定都是从 32 位 (DWORD) 边界开始的。对齐可以大于 32 位,但具体取决于硬件的需求。 打包格式与平面格式:YUV 格式可以分为打包格式和平面格式。在打包格式中,Y、U 和 V 组件存储在一个数组中。像素被组织到了一些巨像素组中,巨像素组的布局取决于格式。在平面格式中,Y、U 和 V 组件作为三个单独的平面进行存储。 1) 4:4:4 格式,每像素 32 位 推荐一个 4:4:4 格式,FOURCC 码为 AYUV。这是一个打包格式,其中每个像素都被编码为四个连续字节,其组织顺序如下所示。图 2.5 AYUV 内存布局标记了 A 的字节包含 alpha 的值。2) 4:2:2 格式,每像素 16 位 支持两个 4:2:2 格式,FOURCC 码如下: YUY2 UYVY 两个都是打包格式,其中每个巨像素都是编码为四个连续字节的两个像素。这样会使得色度水平下采样乘以系数 2。 YUY2 在 YUY2 格式中,数据可被视为一个不带正负号的 char 值组成的数组,其中第一个字节包含第一个 Y 样例,第二个字节包含第一个 U (Cb) 样例,第三个字节包含第二个 Y 样例,第四个字节包含第一个 V (Cr) 样例,如图 2.6 所示。图2.6 YUY2 内存布局如果该图像被看作由两个 little-endian WORD 值组成的数组,则第一个 WORD 在最低有效位 (LSB) 中包含 Y0,在最高有效位 (MSB) 中包含 U。第二个 WORD 在 LSB 中包含 Y1,在 MSB 中包含 V。YUY2 是用于 Microsoft DirectX Video Acceleration (DirectX VA) 的首选 4:2:2 像素格式。预期它会成为支持 4:2:2 视频的 DirectX VA 加速器的中期要求。 UYVY 此格式与 YUY2 相同,只是字节顺序是与之相反的 就是说,色度字节和灯光字节是翻转的(图 7)。如果该图像被看作由两个 little-endian WORD 值组成的数组,则第一个 WORD 在 LSB 中包含 U,在 MSB 中包含 Y0,第二个 WORD 在 LSB 中包含 V,在 MSB 中包含 Y1。图 2.7 UYVY 内存布局3) 4:2:0 格式,每像素 16 位 推荐两个 4:2:0 每像素 16 位格式,FOURCC 码如下: IMC1 IMC3 两个 FOURCC 码都是平面格式。色度频道在水平方向和垂直方向上都要以系数 2 来进行再次采样。 IMC1 所有 Y 样例都会作为不带正负号的 char 值组成的数组首先显示在内存中。后面跟着所有 V (Cr) 样例,然后是所有 U (Cb) 样例。V 和 U 平面与 Y 平面具有相同的跨距,从而生成如图 2.8 所示的内存的未使用区域。图 2.8 IMC1 内存布局 IMC3 此格式与 IMC1 相同,只是 U 和 V 平面进行了交换:图 9. IMC3 内存布局4) 4:2:0 格式,每像素 12 位 推荐四个 4:2:0 每像素 12 位格式,FOURCC 码如下: IMC2 IMC4 YV12 NV12 在所有这些格式中,色度频道在水平方向和垂直方向上都要以系数 2 来进行再次采样。 IMC2 此格式与 IMC1 相同,只是 V (Cr) 和 U (Cb) 行在半跨距边界处进行了交错。换句话说,就是色度区域中的每个完整跨距行都以一行 V 样例开始,然后是一行在下一个半跨距边界处开始的 U 样例。此布局与 IMC1 相比,能够更加高效地利用地址空间。它的色度地址空间缩小了一半,因此整体地址空间缩小了 25%。在各个 4:2:0 格式中,IMC2 是第二首选格式,排在 NV12 之后。图 2.10 IMC2 内存布局 IMC4 此格式与 IMC2 相同,只是 U (Cb) 和 V (Cr) 行进行了交换:图 2.11 IMC4 内存布局 YV12 所有 Y 样例都会作为不带正负号的 char 值组成的数组首先显示在内存中。此数组后面紧接着所有 V (Cr) 样例。V 平面的跨距为 Y 平面跨距的一半,V 平面包含的行为 Y 平面包含行的一半。V 平面后面紧接着所有 U (Cb) 样例,它的跨距和行数与 V 平面相同(图 12)。图 2.12 YV12 内存布局 NV12 所有 Y 样例都会作为由不带正负号的 char 值组成的数组首先显示在内存中,并且行数为偶数。Y 平面后面紧接着一个由不带正负号的 char 值组成的数组,其中包含了打包的 U (Cb) 和 V (Cr) 样例,如图 2.13 所示。当组合的 U-V 数组被视为一个由 little-endian WORD 值组成的数组时,LSB 包含 U 值,MSB 包含 V 值。NV12 是用于 DirectX VA 的首选 4:2:0 像素格式。预期它会成为支持 4:2:0 视频的 DirectX VA 加速器的中期要求。图 2.13 NV12 内存布局3 YCbCr视频存储格式YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。主要的子采样格式有 YCbCr 4:2:0、YCbCr 4:2:2 和 YCbCr 4:4:4。 4:2:0表示每4个像素有4个亮度分量,2个色度分量 (YYYYCbCr),仅采样奇数扫描线,是便携式视频设备(MPEG-4)以及电视会议(H.263)最常用格式。4:2:2表示每4个像素有4个亮度分量,4个色度分量(YYYYCbCrCbCr),是DVD、数字电视、HDTV 以及其它消费类视频设备的最常用格式。4:4:4表示全像素点阵(YYYYCbCrCbCrCbCrCbCr),用于高质量视频应用、演播室以及专业视频产品。 4 YUV与YCbCr的对比4.1两者与rgb之间换算公式的差异yuvrgbY= 0.299*R + 0.587*G + 0.114*BU= -0.147*R - 0.289*G + 0.436*B = 0.492*(B- Y)V= 0.615*R - 0.515*G - 0.100*B = 0.877*(R- Y)R = Y + 1.140*VG = Y - 0.394*U - 0.581*VB = Y + 2.032*UyCbCrrgbY = 0.257*R + 0.504*G + 0.098*B + 16Cb = -0.148*R - 0.291*G + 0.439*B + 128Cr = 0.439*R - 0.368*G - 0.071*B + 128R = 1.164*(Y-16) + 1.596*(Cr-128)4.2两者来源上的差异YUV色彩模型来源于RGB模型。该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。颜色模型用于模拟彩色电视广播。YCbCr模型来源于YUV模型。YCbCr是一个的YUV色彩空间缩放和偏移的版本应用:数字视频,ITU-R BT.601T推荐标准。5 颜色空间和色度采样率转换本节提供了在 YUV 和 RGB 之间进行转换的指南,以及在某些不同 YUV 格式之间进行转换的指南。在本节中,我们会以两个 RGB 编码方案为例:8 位计算机 RGB 和 studio 视频 RGB,前者也称为 sRGB 或“全范围”RGB,后者也称为“带有头空间和脚空间的RGB”。这两个方案的定义如下: 计算机 RGB 对于每个红色、绿色和蓝色样例都使用8位。黑色表示为 R = G = B = 0,白色则表示为 R = G = B = 255。 Studio 视频 RGB 对于每个红色、绿色和蓝色样例使用一定的位数,即N 位,其中 N 为 8 或更大的数字。Studio 视频 RGB 使用的缩放系数与计算机 RGB 使用的缩放系数不同,它具有一个偏移量。黑色表示为 R = G = B = 16*2N-8,白色则表示为 R = G = B = 235*2N-8。但是,实际的值可能不在此范围之内。 Studio 视频 RGB 是 Windows 中视频的首选 RGB 定义,而计算机 RGB 则是非视频应用的首选 RGB 定义。在这两种形式的 RGB 中,色度座标都与在 RGB 原色定义的 ITU-R BT.709 中指定的一样。R、G 和 B 的 (x,y) 座标分别为 (0.64, 0.33)、(0.30, 0.60) 和 (0.15, 0.06)。基准白色为 D65,座标为 (0.3127, 0.3290)。标称灰度系数为 1/0.45(大约为 2.2),精确的灰度系数在 ITU-R BT.709 中进行了详细定义。5.1 RGB 和YUV之间的转换 我们首先讲述 RGB 和 4:4:4 YUV 之间的转换。要将 4:2:0 或 4:2:2 YUV 转换为 RGB,我们建议首先将 YUV 数据转换为 4:4:4 YUV,然后再将 4:4:4 YUV 转换为 RGB。AYUV 格式是一个 4:4:4 格式,它对于每个 Y、U 和 V 样例都使用 8 位。对于某些应用,还可以使用每样例多于8位的位数定义YUV。对于数字视频,定义了从 RGB 到两个主要 YUV 的转换。这两个转换都基于称为 ITU-R Recommendation BT.709 的规范。第一个转换是 BT.709 中定义用于 50-Hz 的较早的YUV格式。它与在 ITU-R Recommendation BT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论