当前位置:首页 > 技术学院 > 技术前线
[导读]在日常接触的直播、短视频、监控摄像头、游戏渲染等所有视频相关场景中,你几乎看不到RGB色彩格式的身影,99%的视频数据从采集、编码、传输到最终解码显示,全程都在使用YUV色彩编码格式。很多开发者天天和YUV数据打交道,却始终搞不懂4:4:4、4:2:2、4:2:0这些采样数字到底是什么含义,也分不清NV12、I420、YUYV这些常见格式之间的存储差异,遇到视频流处理的性能优化问题时完全无从下手。理清YUV的采样原理和各类格式的细节,是所有音视频开发者必须掌握的入门核心知识。

在日常接触的直播、短视频、监控摄像头、游戏渲染等所有视频相关场景中,你几乎看不到RGB色彩格式的身影,99%的视频数据从采集、编码、传输到最终解码显示,全程都在使用YUV色彩编码格式。很多开发者天天和YUV数据打交道,却始终搞不懂4:4:4、4:2:2、4:2:0这些采样数字到底是什么含义,也分不清NV12、I420、YUYV这些常见格式之间的存储差异,遇到视频流处理的性能优化问题时完全无从下手。理清YUV的采样原理和各类格式的细节,是所有音视频开发者必须掌握的入门核心知识。

YUV色彩编码的核心设计灵感,来自于人类视觉系统的天然特性。人眼对画面的亮度变化极其敏感,可以精准捕捉画面的轮廓、纹理、明暗细节,但对色彩细节的敏感度要低很多,哪怕丢掉一部分色彩信息,人眼几乎也察觉不到画质的明显下降。YUV格式正是基于这个特性设计,它把像素的色彩信息拆分成两个完全独立的部分:Y分量代表明亮度,也就是画面的灰度明暗信息,完整保留所有的轮廓细节;U分量和V分量代表色度,分别描述像素偏离蓝色和偏离红色的程度,用来补充画面的色彩信息。这种分离设计的最大好处,就是我们可以对U和V分量进行针对性的采样压缩,在几乎不损失主观观看画质的前提下,大幅降低视频数据的整体体积,节省存储和传输的带宽成本。

YUV的三种主流采样方式,就是用三个数字的比例来表示一块像素区域内Y、U、V分量的采样数量,不同的采样方式对应完全不同的压缩比例。第一种是YUV 4:4:4采样,这是完全没有任何色度压缩的无损采样方式,每一个像素都拥有独立完整的Y、U、V三个分量,所有分量的采样密度完全一致。这种采样方式生成的YUV数据体积,和同分辨率的RGB24格式完全相同,没有任何压缩,画质没有任何损失,通常只用于电影母带制作、医学影像这类对画质有极致要求的专业场景,日常的民用视频场景几乎不会使用这种采样方式。

第二种是YUV 4:2:2采样,色度分量在水平方向上做了一倍的压缩,垂直方向保持全采样。在水平方向上,每两个相邻的像素共享同一组U分量和V分量,Y分量依然为每一个像素完整保留。这种采样方式下,色度数据的整体体积只有全采样时的一半,整个YUV数据的总体积相比RGB24格式减少了三分之一,在画质和带宽之间取得了不错的平衡,广泛应用于专业视频编辑、SDI广播传输这类专业场景,既保证了足够高的画质,又有效降低了数据传输的压力。

第三种是目前民用视频领域最主流的YUV 4:2:0采样,色度分量在水平和垂直两个方向上都做了一倍的压缩,每四个相邻的2x2像素块,共享同一组U分量和V分量。这种采样方式下,色度数据的总体积只有全采样时的四分之一,整个YUV数据的总体积仅为RGB24格式的一半,极大地节省了存储空间和传输带宽。它是H.264、H.265、AV1几乎所有主流视频编码标准的默认输入格式,手机摄像头、网络流媒体、监控摄像头这类日常场景,几乎全部使用YUV 4:2:0采样,在人眼几乎无法感知画质损失的前提下,把数据体积压缩到了最低。

同样的采样比例下,不同的YUV格式之间的核心差异,在于Y、U、V三个分量的内存排列方式不同,不同的排列方式对后续的处理性能有极大的影响。最经典的planar平面格式I420,是标准的YUV420采样格式,内存中先连续存储完整的所有Y分量,紧接着连续存储所有U分量,最后连续存储所有V分量,三个分量完全分开排列。这种格式的内存布局非常规整,早期的很多视频编解码器都默认支持I420格式,兼容性极强。

而目前主流硬件平台更常用的NV12格式,同样属于YUV420采样,它的内存排列方式和I420有明显区别:Y分量依然是连续完整排列,之后U分量和V分量不再分开存储,而是交错排列,U和V分量两两交替连续存放。这种交错排列的内存布局,对现代CPU的SIMD向量指令和硬件编解码器极其友好,实测数据显示在x86平台上处理1080p的NV12图像,速度比处理I420图像要高出10%以上,现在绝大多数手机摄像头输出的默认原始数据格式就是NV12,已经成为YUV420场景下的事实工业标准。

还有一类常见的packed打包格式YUYV,属于YUV422采样,它的Y、U、V分量完全交错打包在一起,所有分量连续穿插排列在同一段内存中,没有任何分量单独分开存储。这种格式的内存布局不需要额外的指针偏移,适合USB摄像头这类低带宽传输场景,很多老式的USB摄像头输出的原始视频流默认就是YUYV格式。

理解YUV的采样原理和不同格式的存储差异,是所有音视频开发的基础,只有选对适配场景的YUV格式,才能在保证画质的前提下,最大化视频处理和传输的性能。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭