当前位置:首页 > 技术学院 > 技术前线
[导读]在视频处理、图像编解码领域,YUV是一个绕不开的概念。我们日常用智能手机拍视频、看直播、播放B站视频,背后几乎都离不开YUV格式的处理,但很多开发者对YUV的认知只停留在“它是一种颜色格式,比RGB更适合压缩”这个模糊结论上,对它的采样规则、不同格式的存储方式、适用场景都一知半解。实际上,YUV的设计从模拟电视时代延续至今,它的采样压缩思路、分离亮度颜色的设计,深刻影响了今天的视频压缩标准,理解YUV的原理,是学习视频处理、编解码的第一步。

在视频处理、图像编解码领域,YUV是一个绕不开的概念。我们日常用智能手机拍视频、看直播、播放B站视频,背后几乎都离不开YUV格式的处理,但很多开发者对YUV的认知只停留在“它是一种颜色格式,比RGB更适合压缩”这个模糊结论上,对它的采样规则、不同格式的存储方式、适用场景都一知半解。实际上,YUV的设计从模拟电视时代延续至今,它的采样压缩思路、分离亮度颜色的设计,深刻影响了今天的视频压缩标准,理解YUV的原理,是学习视频处理、编解码的第一步。本文将从YUV的设计初衷出发,讲清楚YUV的采样规则、常见存储格式,以及不同格式的适用场景,帮你彻底读懂YUV。

一、为什么需要YUV?从人眼特性说起

要理解YUV,首先得对比我们更熟悉的RGB颜色格式:RGB通过红(R)、绿(G)、蓝(B)三个通道的组合来表示颜色,每个通道8位的话,一个像素就需要24位,也就是3字节存储。但RGB的问题在于,它把亮度信息和颜色信息混在了三个通道里,没有利用人眼的视觉特性做压缩。

YUV的设计核心就是把亮度信息(Y)和颜色信息(UV,也叫色度信息)分离开:

Y分量代表亮度(Luma),每个像素都有独立的Y值,人眼对亮度变化非常敏感,亮度信息缺失直接会导致画面模糊看不清

U(也叫Cb)和V(也叫Cr)分量代表色度(Chroma),描述颜色的偏差,U代表蓝色分量和亮度的差,V代表红色分量和亮度的差,人眼对色度变化的敏感度远低于亮度,所以可以降低UV分量的采样率,不会明显影响主观观感

这种分离设计最初是为了兼容黑白电视:黑白电视只需要显示Y分量,直接忽略UV就可以播放彩色电视信号,不需要做额外转换,完美实现了向下兼容。进入数字时代之后,这种设计保留了下来——因为降低UV采样率可以直接压缩图像体积,同等质量下YUV格式的体积比RGB小很多,非常适合视频存储和传输,现在主流的视频编解码标准(H.264、H.265、AV1)几乎都采用YUV作为输入输出格式。

简单来说,YUV的优势可以总结为两点:

利用人眼对亮度敏感、对色度不敏感的特性,通过降采样压缩体积,不明显降低主观画质

分离亮度和色度,方便编解码做压缩处理,也能兼容老式显示设备

二、YUV最核心的概念:采样格式4:2:0到底是什么意思?

YUV最核心的特点就是对UV分量做降采样,常见的采样比例有三种:4:4:4、4:2:2、4:2:0,很多人对这个比例的理解有误,以为是“四个Y对应两个U对应零个V”,其实这个比例描述的是在一行像素中,Y、U、V三个分量的采样数量比例,我们以水平方向2x2的四个像素块为例,讲清楚三种采样的区别:

1. 4:4:4 完全采样:没有压缩,每个像素都有独立YUV

4:4:4的意思就是,每一个Y,都对应一个U和一个V,每个像素都有完整的YUV三个分量,没有做降采样压缩。对于上面说的2x2四个像素,总共有4个Y、4个U、4个V,一共12个分量。

4:4:4没有压缩,画质最好,但体积最大,每个像素需要3字节(8位 per 通道),所以一般只用在对画质要求极高的场景,比如专业影视后期制作、电影调色,这些场景不能损失颜色信息,所以需要完整采样。我们日常看的视频几乎不会用4:4:4,体积太大不划算。

2. 4:2:2 水平降采样:每两个Y共享一对UV

4:2:2的意思是,水平方向每两个Y,共享一对U和V,垂直方向采样率不变。同样是2x2四个像素,总共有4个Y,2个U,2个V,一共8个分量,体积比4:4:4缩小了1/3。

具体来说,四个像素排列如下: (Y0, U0, V0) (Y1, U0, V0) (Y2, U1, V1) (Y3, U1, V1) 每两个相邻Y共用一组UV,人眼几乎看不出区别,因为颜色信息的损失人眼不敏感。这种格式常见于早期的视频采集、专业视频传输,比如SDI接口的视频信号很多就是4:2:2的,比4:4:4体积小,画质也足够专业。

3. 4:2:0 水平+垂直降采样:每四个Y共享一对UV,现在最主流的采样格式

4:2:0是现在视频领域最主流的采样格式,我们看的网络视频、监控视频、手机拍摄的视频几乎都是4:2:0。它的规则是:水平方向降采样一半,垂直方向也降采样一半,所以每2x2四个Y,共享一对U和V。

同样是2x2四个像素,总共有4个Y,1个U,1个V,一共6个分量,体积比4:4:4缩小了一半!原来每个像素需要3字节,现在平均每个像素只需要1.5字节,压缩率非常高,而主观画质下降非常小,完美契合视频压缩的需求。

很多人会疑惑为什么叫4:2:0,是不是没有V分量?其实不是,这里的“0”是相对于4:4:4来说,垂直方向UV采样率是Y的一半,所以比例是4:2:0,U和V分量都存在,只是采样率降了一半,不要误解成没有V分量。

我们算一下三种格式的体积对比:1920x1080分辨率(1080P)的一帧图像,不同采样格式的体积:

4:4:4:1920 * 1080 * 3 = 5.93MB

4:2:2:1920 * 1080 * 2 = 3.95MB

4:2:0:1920 * 1080 * 1.5 = 2.96MB

可以看到4:2:0体积只有4:4:4的一半,压缩效率非常可观,这就是它能成为主流的核心原因。

三、存储格式:同样是4:2:0,为什么有NV12、I420之分?

讲完采样比例,再讲存储格式:同样的采样比例,Y、U、V三个分量在内存中的排列方式不同,就形成了不同的存储格式,常见的可以分为两大类:平面格式(Planar)和打包格式(Packed),我们以最常见的4:2:0采样为例,介绍最常用的几种存储格式:

1. 平面格式:所有Y连续存,所有U连续存,所有V连续存,三个分开

平面格式的规则非常简单:先把整帧图像所有的Y分量连续存在一块内存,然后再连续存所有的U分量,最后连续存所有的V分量,三个分量分成三个独立的内存块。最典型的就是I420(也叫YU12),它是4:2:0平面格式最常见的一种:

I420的存储顺序:[Y00, Y01, Y02, Y03, ..., Y(width*height - 1), U00, U01, ..., U((width/2)*(height/2) - 1), V00, V01, ..., V((width/2)*(height/2) - 1)]

对于4:2:0来说,Y的数量是width * height,U和V的数量都是(width/2) * (height/2),正好对应每四个Y一个U一个V,内存布局非常清晰,处理起来很简单,很多编解码器(比如x264)都支持I420格式,FFmpeg中默认的4:2:0格式也是I420。

和I420对应的还有YV12,YV12也是4:2:0平面格式,只是存储U和V的顺序反过来了:先存Y,再存V,最后存U,其他规则和I420完全一样,只是UV顺序交换。

2. 半平面格式:Y单独存,UV交替连续存

半平面格式是现在Android、iOS手机摄像头输出最常用的格式,最典型的就是NV12:它也是4:2:0采样,Y和I420一样,所有Y连续单独存一块,然后U和V交替存储在Y的后面,也就是U0 V0 U1 V1 U2 V2...这样排列。

NV12的存储顺序:[Y所有分量][U0 V0 U1 V1 ...],正好Y一块,UV一块,只需要两块内存,比I420的三块少一块,处理起来更方便,所以很多硬件编码器都偏好NV12格式。

对应的还有NV21,NV21和NV12的区别只是UV顺序反过来,变成V0 U0 V1 U1...,也就是先V后U,Android摄像头默认输出的就是NV21格式,很多Android平台的视频处理都是基于NV21做的。

我们对比一下I420、NV12、NV21的区别,2x2像素的4:2:0采样排列如下:

I420:Y0 Y1 Y2 Y3 U0 V0

YV12:Y0 Y1 Y2 Y3 V0 U0

NV12:Y0 Y1 Y2 Y3 U0 V0

NV21:Y0 Y1 Y2 Y3 V0 U0

看起来和I420、YV12很像,但本质区别是I420中U和V是分开两块存储,NV12中U和V是交替放在同一块存储,这是平面和半平面的核心区别。

3. 打包格式:YUV交替打包存在一起

打包格式和平面格式完全不同,它把每个像素的Y、U、V分量打包存在一起,最典型的就是YUYV(也叫YUY2),属于4:2:2采样的打包格式:

YUYV的排列顺序是:Y0 U0 Y1 V0 Y2 U1 Y3 V1...,每两个Y打包在一起,共享一对UV,正好符合4:2:2的采样规则,整个帧的所有分量都连续存在一起,只需要一块内存,很多USB摄像头输出的就是YUYV格式。

还有一种常见的打包格式是UYVY,和YUYV只是顺序不同:U0 Y0 V0 Y1 U1 Y2 V1 Y3...,先放UV再放Y,其他规则一样。

打包格式适合视频采集和传输,一次读出连续的像素,不需要跳着访问不同内存块,但是处理起来不如平面格式方便,现在软件编解码一般还是偏好平面或者半平面格式。

四、YUV的实际应用场景与常见坑

在开发中,我们经常会遇到YUV格式相关的问题,很多坑都是因为不了解格式排列导致的:

1. 分辨率对齐问题

很多人会发现,自己处理1921x1080分辨率的NV12图像,显示出来总是歪的,这是因为大部分YUV处理和硬件编码器都要求宽高是16的倍数(至少是2的倍数),因为4:2:0采样要求宽高都能被2整除,否则UV分量的数量计算会出错,如果宽高不能被2整除,需要先做对齐,补齐多余的像素,否则内存访问就会越界,导致画面错乱。

2. UV顺序搞反导致画面偏色

这是最常见的问题:很多摄像头输出NV21(V先U后),你当成NV12(U先V后)处理,结果就是整个画面颜色不对,偏蓝偏红,这种问题只要把UV顺序交换就能解决,所以拿到YUV数据第一步一定要确认是U在前还是V在前,不要搞反。

3. stride和分辨率不匹配

stride指的是一行Y分量占用的字节数,很多时候stride不一定等于分辨率的宽度,比如硬件输出的时候,会把stride对齐到16字节或者32字节,这时候一行实际的字节数是stride,不是宽度,如果你按宽度去拷贝内存,就会把画面拉歪,所以处理YUV的时候一定要注意stride,不能默认stride等于宽度。

4. 不同平台的默认格式差异

不同平台默认输出的YUV格式不一样:Android默认输出NV21,iOS默认输出NV12,FFmpeg默认输出I420,做跨平台视频处理的时候,一定要注意格式转换,不要直接用,否则就会出现颜色不对、画面错乱的问题。

五、YUV和RGB的转换:为什么转换公式有多个版本?

我们最终显示画面的时候,都需要把YUV转换成RGB,才能送到显示器显示,很多人会发现不同地方的YUV转RGB公式不一样,这是因为YUV有不同的标准,不同标准的量化范围不同:

最常见的两种是:

full range(全范围):Y的范围是0-255,UV的范围也是0-255,一般用于视频采集、本地处理

limited range(有限范围):Y的范围是16-235,UV的范围是16-240,兼容模拟电视时代的范围标准,用于广播电视、蓝光视频

不同范围的转换公式不一样,如果用错公式,转换出来的画面要么偏暗偏灰,要么过曝,所以转换的时候一定要确认YUV的范围,选择对对应的转换矩阵,这也是YUV处理中常见的坑。

总结

YUV从模拟电视时代走来,到今天依然是视频领域的主流颜色格式,核心就是它抓住了人眼的视觉特性,通过分离亮度色度、降采样压缩,在几乎不影响主观画质的前提下,把视频体积缩小了一半,完美契合了视频存储和传输的需求。

理解YUV的核心,就是抓住两个层次:第一是采样比例,4:4:4、4:2:2、4:2:0的区别就是UV降采样的程度,4:2:0因为压缩率最高,成为现在的主流;第二是存储格式,平面、半平面、打包的区别就是YUV分量的排列顺序,不同格式适合不同场景,手机摄像头常用NV12/NV21,软件编解码常用I420,采集常用YUYV打包格式。

开发中遇到的大部分YUV问题,本质都是对采样规则和存储顺序理解不到位:要么UV顺序搞反,要么宽高不对齐,要么stride不匹配,只要理清了不同格式的排列规则,这些问题都能快速定位解决。作为视频处理的基础,YUV虽然简单,却是所有编解码、视频处理的基础,值得每一个做多媒体开发的开发者吃透。

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

在嵌入式视觉开发、手机拍照、监控摄像头等应用中,从摄像头传感器输出的原始数据几乎都是YUV格式,而我们最终显示图像、做AI视觉处理大多需要RGB格式,因此YUV转RGB是摄像头图像处理 pipeline 中必不可少的一步...

关键字: RGB YUV

June 11, 2026 ---- 根据TrendForce集邦咨询最新Enterprise SSD产业调查,受到AI Agent服务普及与CSP(云端服务提供商)强劲订单带动,2026年第一季全球前五大Enterpr...

关键字: SSD 存储 AI

在数字视频和图像处理领域,YUV 是一种至关重要的色彩编码方式,广泛应用于视频压缩、传输和显示等环节。与常见的 RGB 色彩空间不同,YUV 巧妙地将亮度信息与色度信息分离,这一特性使其在兼顾图像质量的同时,能够大幅降低...

关键字: YUV HDR

米尔电子正式发布 MYDLMX9X 平台 V2.0.0 软件版本。本次升级以系统安全为核心,集成 EdgeLock® Secure Enclave 硬件信任根,完整实现安全启动 (AHAB) 、安全存储、安全 OTA 升...

关键字: 工业物联网 存储 开发板

意法半导体新入门级微控制器STM32C5 于 2026 年 3 月正式推出,搭载 Arm® Cortex®-M33处理器内核,采用 40 纳米制造工艺,配备双区闪存,存储容量 128KB 至 1MB,可耐受1万次擦写,基...

关键字: 微控制器 FPU 存储

北京——2026年5月8日 亚马逊云科技宣布,行业知名的社交娱乐公司HOLLA Group全面使用亚马逊云科技,依托亚马逊云科技覆盖全球的基础设施以及领先的AI技术,持续增强旗下实时视频社交平台的稳定运营、安全合规、内容...

关键字: AI 存储 数据库
关闭