《视频基础知识 —— 像素、分辨率、帧率、YUV》
1.什么是像素、分辨率以及帧率?
像素是图片显示的基本单位。
分辨率是指一张图片的宽度和高度的乘积,单位是像素。
例如: 1920 x 1080像素是指宽度为1920像素,高度为1080像素,乘积为1920 x 180 = 2073600,也就是将近两百万的像素。(1080P是指视频分辨率为1920 x 1080逐行扫描)
分辨率是指每帧图像的像素数量,决定了图像的清晰度。
帧率是指每秒显示多少帧图像,决定了视频的流畅度。
1.什么是YUV
-
Y(亮度分量):表示像素的亮度,影响图像的明暗程度。
-
U(色度分量):表示图像的蓝色差值,决定图像中蓝色的强度。
-
V(色度分量):表示图像的红色差值,决定图像中红色的强度。
人眼对亮度敏感、对颜色迟钝。因此色度可以降低采样。
2.YUV采样格式
YUV444 每个像素都有 Y U V
YUV422 每 2 个像素共用一组 UV
YUV420 每 2x2 像素共用一组 UV
一般H264、H265使用的是4:2:0。
YUV420的根据UV分量不同的存储方式分为以下几种:
NV12、NV21、I420 和 YU12 都是YUV色彩空间格式,它们主要的区别在于色度(U和V)分量如何存储。
NV12:
-
Y 分量:每个像素一个 Y 值(亮度),存储在一个连续的内存块中。
-
UV 分量:每两个像素共享一组 U 和 V 值(色度)。U 和 V 值交替存储,U 在 V 的前面。
NV21:
-
Y 分量:每个像素一个 Y 值(亮度),存储在一个连续的内存块中。
-
UV 分量:每两个像素共享一组 U 和 V 值(色度)。U 和 V 值交替存储,U 在 V 的前面。
I420(YUV420P):
-
Y 分量:每个像素一个 Y 值,存储在一个连续的内存块中。
-
U 和 V 分量:U 和 V 分量分别存储,每个分量占用一块单独的内存区域。每两个像素共享一个 U 值和 V 值。
YU12:
-
Y 分量:与 I420 类似,Y 分量占用一个连续的内存区域。
-
U 和 V 分量:与 I420 类似,U 和 V 分量分别存储,每个分量占用一块单独的内存区域。
总结:
格式 Y 存储方式 U/V 存储方式 存储顺序 NV12 每个像素一个 Y 值 每两个像素共用一组 UV Y -> UV(U 和 V 交替,U 在前) NV21 每个像素一个 Y 值 每两个像素共用一组 UV Y -> UV(U 和 V 交替,V 在前) I420 每个像素一个 Y 值 每 2x2 像素共用一组 U 和 V Y -> U -> V YU12 每个像素一个 Y 值 每 2x2 像素共用一组 U 和 V Y -> U -> V(与 I420 相同)
备注:NV12和NV21中每两个像素共享一组 U 和 V 值(色度),这个指的是存储方式。不是采样方式,采样方式依旧是4个像素点共用一组UV。
必须能回答:
-
摄像头给的是 NV12 还是 NV21?
-
编码器吃的是 I420 还是 NV12?
❗ 搞错 = 颜色全反 / 绿脸 / 紫脸
3.实际应用
经典链路:
Sensor RAW → ISP → YUV → 编码
Sensor出来是bayer,而ISP输出的是YUV,可能是NV12或者NV21。
一张1080P YUV420的图片的大小怎么计算:
一个像素点的大小: Y占一个字节 U因为4个像素点共用,所以占0.25个字节 V跟U同理,也占0.25个字节 综上:一个像素点YUV占1.5个字节。 1080P = 1920 x 1080 x 1.5 = 3M (所以YUV444乘以3 YUV422乘以2)
扩展:
YUV444的内存大小跟RGB是一样的。那有什么区别?
RGB是“显示格式”,YUV是“传输和编码格式”。
浙公网安备 33010602011771号