为什么视频基本都是编码成YUV格式而从不编码成 RGB格式?不是不想,是真不行

目录

一、先说一个残酷的现实

二、RGB 和 YUV 的本质差别

RGB 是什么?

YUV 是什么?

三、为什么编码标准集体选 YUV?

核心原因只有一个字:省

1️.人眼对颜色不敏感 → UV 可以降维打击

2️.运动估计只关心“形状不是颜色”

3️.频域变换友好度:YUV ≫ RGB

四、RGB vs YUV:特性对照表

五、为什么“视频编码标准”不标准化 RGB?

H264 Main Profile 之后:

六、FFmpeg 里你看到的那些 YUV 到底差在哪?

七、一个你迟早会踩的坑:RGB 编码 ≠ 无损

八、一句话工程经验

九、为什么你眼睛“看不出 YUV420 糊”


觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。

由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。

视频编码几乎全用 YUV(实为 YCbCr)而不用 RGB,核心原因是‌YUV 分离亮度与色度,可利用人眼对色度不敏感的特性进行色度下采样(如 4:2:0),在几乎无损视觉质量的前提下将数据量减少约 50%,且通道间相关性低更利于压缩;而 RGB 三通道强相关且无法独立压缩色度,压缩效率极低‌。‌‌

一句话结论:RGB 给人看,YUV 给压缩看。


一、先说一个残酷的现实

你屏幕上是 RGB,相机 CMOS 出来是 Bayer,但最终进 H264 / HEVC / AV1 的永远是:

RGB → YUV → 压缩 → 文件

你问 FFmpeg:

ffmpeg -pix_fmt rgb24 -c:v libx264 out.mp4

它会默默干一件事:

先帮你转成 YUV420P,再编码

因为:

视频编码标准里 根本就没定义 RGB 压缩模式(主流 profile)


二、RGB 和 YUV 的本质差别

RGB 是什么?

每个像素:

R G B
亮度 + 颜色 + 颜色

三个通道地位平等、强耦合、空间相关性弱

人眼看到的是:

  • 红墙

  • 蓝衣服

  • 绿草地

YUV 是什么?

Y  = 亮度(黑白)
U  = 蓝色差
V  = 红色差

把“明暗”和“颜色”强行拆家

人眼真实生理是:

  • 对亮度极度敏感(800 万视锥细胞盯着 Y)

  • 对颜色分辨率极低(周边余光糊成一片)

YUV 是 人类视觉系统的数学作弊器


三、为什么编码标准集体选 YUV?

核心原因只有一个字:

1️.人眼对颜色不敏感 → UV 可以降维打击

RGB24 一张 1920×1080 帧:

格式

字节数

RGB24

1920×1080×3 = 6.22 MB

YUV420P

1920×1080×1.5 = 3.11 MB

体积直接腰斩,肉眼看不出区别

原因:

  • UV 水平 / 垂直都 2:1 下采样

  • 人眼不会骂娘


2️.运动估计只关心“形状不是颜色”

H264 干的最累的事是:

  • 宏块匹配

  • 运动矢量搜索

  • 残差预测

这些只看 Y 分量

如果 RGB:

  • R/G/B 三个平面都在动

  • 边缘在不同通道错位

  • ME 直接哭死

YUV 的好处是:

任务

YUV

RGB

运动搜索

只看 Y

看三次

残差能量

集中在 Y

分散

DCT 效率

极高

一般


3️.频域变换友好度:YUV ≫ RGB

DCT / iDCT(H264 / HEVC 核心):

  • 低频能量集中在左上角

  • 量化后大量 0

RGB 的问题:

  • 色彩通道高频多

  • 量化后马赛克花脸

YUV 是天然“为 DCT 铺好的路”


四、RGB vs YUV:特性对照表

对比项

RGB

YUV420P

是否贴近显示

✅ 是

❌ 否

是否贴近人眼

❌ 否

✅ 是

单帧大小 1080p

6.2 MB

3.1 MB

运动估计效率

极高

DCT 能量集中

一般

极强

色度下采样

❌ 不支持

✅ 原生支持

编码标准支持

基本无

所有主流标准

硬件加速友好

天生适配

适合用途

UI / 纹理 / OpenGL

视频 / 流媒体


五、为什么“视频编码标准”不标准化 RGB?

技术上当然能,但没人干:

H264 Main Profile 之后:

  • 只定义 4:2:0 / 4:2:2 / 4:4:4 YCbCr

  • 4:4:4 都算“专业档”(Apple ProRes / JPEG-XS)

原因一句话:

ITU-T + ISO 当年开会共识:

“RGB 留给显卡,YUV 留给传输”


六、FFmpeg 里你看到的那些 YUV 到底差在哪?

pix_fmt

含义

场景

yuv420p

最常用,UV 各 1/4

网络视频

yuv422p

UV 横向减半

ProRes / 广播

yuv444p

无色度下采

后期制作

nv12

UV 交错

DXVA / VAAPI

yuv420p10le

10bit

HDR / 电影感

RGB 只在出口才出现:

解码
↓
YUV420P
↓
sws_scale → RGB24 / RGBA
↓
QImage / SDL / OpenGL

七、一个你迟早会踩的坑:RGB 编码 ≠ 无损

你以为:

ffmpeg -i in.rgb -c:v libx264 rgb.mp4

是“原样”?

实际上:

  1. FFmpeg → sws_scale → YUV420P(默认)

  2. libx264 8bit 量化

  3. chroma subsampling(不可逆)

真·无损路径是:

-c:v libx264rgb -pix_fmt rgb24

但是:

  • 浏览器播不了

  • 手机播不了

  • 显卡不解

  • 只有 ffmpeg → ffmpeg

所以没人这么干


八、一句话工程经验

FFmpeg 里永远用 YUV 干活,RGB 只在显示前一刻出现

正确生命周期:

摄像头 / Qt Image
↓
RGB → libswscale → YUV420P
↓
libx264 / NVENC
↓
MP4
↓
播放时 AVFrame → RGB → QOpenGLTexture

九、为什么你眼睛“看不出 YUV420 糊”

因为人眼视网膜中心:

  • 视锥(色)≈ 5%

  • 视杆(亮)≈ 95%

YUV420 本质是:

用 5% 的神经资源换 50% 带宽

这是生物学赢了工程的少数几次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值