尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

为什么视频基本都是编码成YUV格式而从不编码成 RGB格式?不是不想,是真不行 目录一、先说一个残酷的现实二、RGB 和 YUV 的本质差别RGB 是什么YUV 是什么三、为什么编码标准集体选 YUV核心原因只有一个字省1️.人眼对颜色不敏感 → UV 可以降维打击2️.运动估计只关心“形状不是颜色”3️.频域变换友好度YUV ≫ RGB四、RGB vs YUV特性对照表五、为什么“视频编码标准”不标准化 RGBH264 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 → 压缩 → 文件你问 FFmpegffmpeg -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 帧格式字节数RGB241920×1080×3 6.22 MBYUV420P1920×1080×1.5 3.11 MB体积直接腰斩肉眼看不出区别原因UV 水平 / 垂直都 2:1 下采样人眼不会骂娘2️.运动估计只关心“形状不是颜色”H264 干的最累的事是宏块匹配运动矢量搜索残差预测这些只看Y 分量如果 RGBR/G/B 三个平面都在动边缘在不同通道错位ME 直接哭死YUV 的好处是任务YUVRGB运动搜索只看 Y看三次残差能量集中在 Y分散DCT 效率极高一般3️.频域变换友好度YUV ≫ RGBDCT / iDCTH264 / HEVC 核心低频能量集中在左上角量化后大量 0RGB 的问题色彩通道高频多量化后马赛克花脸YUV 是天然“为 DCT 铺好的路”四、RGB vs YUV特性对照表对比项RGBYUV420P是否贴近显示✅ 是❌ 否是否贴近人眼❌ 否✅ 是单帧大小 1080p6.2 MB3.1 MB运动估计效率低极高DCT 能量集中一般极强色度下采样❌ 不支持✅ 原生支持编码标准支持基本无所有主流标准硬件加速友好差天生适配适合用途UI / 纹理 / OpenGL视频 / 流媒体五、为什么“视频编码标准”不标准化 RGB技术上当然能但没人干H264 Main Profile 之后只定义 4:2:0 / 4:2:2 / 4:4:4 YCbCr4:4:4 都算“专业档”Apple ProRes / JPEG-XS原因一句话ITU-T ISO 当年开会共识“RGB 留给显卡YUV 留给传输”六、FFmpeg 里你看到的那些 YUV 到底差在哪pix_fmt含义场景yuv420p最常用UV 各 1/4网络视频yuv422pUV 横向减半ProRes / 广播yuv444p无色度下采后期制作nv12UV 交错DXVA / VAAPIyuv420p10le10bitHDR / 电影感RGB 只在出口才出现解码 ↓ YUV420P ↓ sws_scale → RGB24 / RGBA ↓ QImage / SDL / OpenGL七、一个你迟早会踩的坑RGB 编码 ≠ 无损你以为ffmpeg -i in.rgb -c:v libx264 rgb.mp4是“原样”实际上FFmpeg → sws_scale → YUV420P默认libx264 8bit 量化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% 带宽这是生物学赢了工程的少数几次。
返回列表