图像格式
RGB格式
- RGB 原理
RGB(Red, Green, Blue)是一种基于加色模型的颜色编码方式,它通过组合不同强度的红色、绿色和蓝色光来产生各种颜色。在数字图像中,RGB 通常使用三个数值(每个颜色通道一个)来表示颜色,每个数值的范围通常是 0 到 255。 - 优点:
直观:RGB 模型直接对应于显示设备(如显示器、电视)的工作方式,易于理解和使用。
广泛支持:几乎所有的图像和视频格式都支持 RGB 颜色编码。
缺点:
不适合压缩:RGB 颜色编码包含完整的颜色信息,没有考虑到人眼对亮度和颜色敏感度的差异,因此在视频压缩和传输中效率不高。 - 计算方式
RGB方式
对于一幅图像,一般使用整数表示方法来进行描述,比如计算一张的
RGB_888图像的大小为1280x720,可采用如下方式:一个像素点就是1b(1 b=8bit)
1280× 720 * 3 = 2.637 MB, 4分钟就达到了15G的容量。
假如是一部90分钟的电影,每秒25帧,则一部电影为
2.637MB90分钟60秒*25FPS= 347.651GB
YUV格式
-
YUV 原理
YUV(Y, U, V)是一种基于人眼视觉特性的颜色编码方式,它将颜色信息分为亮度(Y)和色度(U、V)两部分。
亮度(Y):表示图像的亮度信息,与人眼对亮度的感知直接相关。
色度(U 和 V):表示图像的颜色信息,与人眼对颜色的感知相关,但敏感度较低 -
YUV格式
-
- 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存
储所有像素点的U,随后是所有像素点的V。
- 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存
-
- 对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的
- 对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的
-
YUV格式二
看一下
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量 -
在YUV 420格式中,数字420描述了色度抽样的模式,具体涉及到亮度(Y)和色度(U、V)分量的采样比例。这三个数字分别代表了Y、U和V三个分量的采样率。下面是每个数字的具体含义:
-
第一个数字 “4”:
代表亮度(Y)分量的采样率是每像素一个样本。这意味着对于图像中的每个像素点,都有一个Y分量的值,表示该像素的亮度信息。 -
第二个数字 “2”:
代表色度(U)分量的采样率是每两个像素一个样本。这意味着U分量的采样率是Y分量的一半,在水平方向上每两个像素共享一个U样本。 -
第三个数字 “0”:
代表色度(V)分量的采样率是每四个像素一个样本,或者说是每两个像素一行一个样本。由于V分量的采样率与U分量相同,这个数字通常被省略,所以YUV 420也常被简化为YUV 4:2:0。在4:2:0格式中,U和V分量在水平和垂直方向上的采样率都是Y分量的一半,即每四个像素共享一组UV样本。
取决最低的数字
上图是YUV420P 这个p代表U V代表不同平面
上图是YUV420SP 这个p代表U V代表同平面
相互转化
RGB 和 YUV 可以通过数学公式相互转换。转换过程涉及到颜色空间的变换,通常需要考虑具体的 YUV 变体(如 YUV 420、YUV 422 等)和 RGB 工作空间(如 sRGB、Adobe RGB 等)。
- 从 RGB 到 YUV:
转换公式通常涉及到加权求和,将 RGB 值转换为 YUV 值。
例如,对于 YUV 420p 格式,转换公式可能如下:
Y = 0.299R + 0.587G + 0.114B
U = -0.14713R - 0.28886G + 0.436B
V = 0.615B - 0.51499G - 0.10001R
这些公式将 RGB 值转换为 YUV 值,其中 U 和 V 值通常需要进一步处理以适应色度子采样格式。
- 从 YUV 到 RGB:
转换过程是 RGB 到 YUV 的逆过程,需要考虑色度子采样的影响。
例如,对于 YUV 420p 格式,转换公式可能如下:
复制
R = Y + 1.13983V
G = Y - 0.39465U - 0.58060V
B = Y + 2.03211U
这些公式将 YUV 值转换回 RGB 值,以便于在显示设备上呈现。
视频解码失败时显示绿色屏幕而不是其他颜色,是因为在进行视频解码的过程中,主要使用到ffmpeg的由YUV到RGB的转换。当解码失败时,YUV分量的值会进行0填充。根据YUV到RGB的转换公式,可以得到RGB的取值,其中只有绿色分量值有效,因此显示为绿屏。在RGB的取值范围[0 - 255]中,转换后的RGB最终值是R = 0,G = 135.45984,B = 0,由于只有Green的分量值有效,所以显示为绿屏。
- 总结
RGB 和 YUV 是两种不同的颜色编码方式,各有优势和应用场景。RGB 直观且广泛支持,适用于显示和图像处理;YUV 适合视频压缩和传输,考虑了人眼视觉特性。在实际应用中,根据具体需求选择合适的颜色编码方式是非常重要的。
采样帧
采样帧的定义
- 采样帧:从视频流中提取的单个图像帧,通常用于表示视频序列中的某一特定时刻。
补充知识 - 帧率(Frame Rate):指每秒钟显示的帧数,例如 24 fps(每秒24帧)、30 fps、60 fps 等。
- 视频码率: kb/s, 是指视频文件在单位时间内使用的数据流量,也叫
码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高
文件大小可以通过码率/比特率和媒体的时长来估算。例如,一个音频文件的比特率是128 kbps,播放时长是4分钟(240秒),那么文件大小大约是:
128 kbps×240 秒=30720 kbits=3840 KB≈3.75 MB
- 视频分辨率:分辨率就是我们常说的640x480分辨率、 1920x1080分辨
率,分辨率影响视频图像的大小
采样帧的类型:(了解概念即可 编码协议要细讲)
- I帧(Intra-frame):
I帧是关键帧,属于帧内压缩,它不依赖于其他帧,包含了一帧图像的完整信息。I帧通常作为随机访问的参考点,可以单独解码成一张完整的图片。I帧的压缩比率相对较低,但提供了较好的视频质量。
I 帧(Intra coded frames) : I帧不需要参考其他画面而生成,解码时仅
靠自己就重构完整图像;
I帧图像采用帧内编码方式;
I帧所占数据的信息量比较大;
I帧图像是周期性出现在图像序列中的,出现频率可由编码器选择;
- P帧(Predictive frame):
P帧是前向预测编码帧,它通过参考前面的一个I帧或P帧来压缩传输数据量。P帧表示的是这一帧与之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。P帧没有完整的画面数据,只有与前一帧的画面差别的数据,因此解码时需要参考之前的帧。 - B帧(Bidirectional frame):
B帧是双向预测编码帧,它记录的是当前帧与前后帧的差别。要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU的负荷会比较大,因为需要进行前后帧的对比。