当前位置: 首页 > news >正文

【音视频学习】四、深入解析视频技术中的YUV数据存储方式:从原理到实践

文章目录

  • 引言
  • 1. YUV 基础:为什么它比 RGB 更适合视频?
    • 1.1 YUV 与 RGB 的核心区别
    • 1.2 YUV色度下采样简介
  • 2. YUV 的三大存储方式
    • 方式一:平面格式(Planar)
    • 方式二:半平面格式(Semi-Planar )
    • 方式三:打包格式(Packed YUV)
    • 三种存储方式对比:
  • 3. 如何选择合适的 YUV 格式?
  • 4. 总结

引言

在数字视频的世界里,YUV 是一种比 RGB 更高效的颜色表示方法,尤其在视频编码、传输和存储中占据核心地位。然而,YUV 数据的存储方式多种多样,不同的排列格式(如 I420、NV12、YUYV)直接影响着视频处理的性能、兼容性和内存效率。
本文将系统地介绍:

  • YUV 的核心概念与优势
  • YUV 数据的三大存储方式:平面、半平面与打包格式
  • 主流格式(I420、NV12、YUYV)的内存布局与访问方法

1. YUV 基础:为什么它比 RGB 更适合视频?

1.1 YUV 与 RGB 的核心区别

  • RGB:直接存储红、绿、蓝三原色,每个像素独立保存三个分量。

    • 优点:直观,适合显示渲染。
    • 缺点:数据冗余,压缩效率低(如 RGB24 每像素占 3 字节)。
  • YUV:将图像分离为 亮度(Y) 和 色度(U/V),利用人眼对亮度敏感、对色度不敏感的特性,通过色度下采样大幅减少数据量。

    • 优点:节省带宽(如 YUV420 比 RGB24 小 50%),更适合视频编码。

1.2 YUV色度下采样简介

格式 采样方式 色度分辨率 压缩率 典型应用
4:4:4 无下采样,YUV全分辨率 与Y相同(100%) 1:1 电影制作、专业调色
4:2:2 水平方向色度减半,垂直方向全保留 水平50%,垂直100% 2:1 广播级视频、ProRes
4:2:0 水平+垂直方向色度均减半 水平50%,垂直50% 4:1 H.264/H.265、流媒体
4:1:1 水平方向色度降为1/4,垂直全保留 水平25%,垂直100% 3:1 部分DV摄像机

:YUV420 是视频编码的主流选择,在画质和压缩率之间取得平衡。

2. YUV 的三大存储方式

YUV 数据在内存中的排列方式主要分为三类,每种方式各有优劣。以下以YUV420格式为主说明:

方式一:平面格式(Planar)

  • 特点

    • 1、Y、U、V 三个分量完全分离,存储在独立的内存区域。
    • 2、色度下采样:U 和 V 的分辨率通常是 Y 的 1/2 或 1/4(如 YUV420)。
    • 3、适用场景:软件编码(FFmpeg/x264)、跨平台兼容。
  • 代表格式I420、YV12

    格式 存储顺序 示例应用
    I420(YUV420P) YYYYYYYY UU VV H.264 视频编码
    YV12 YYYYYYYY VV UU 部分旧编解码器
  • 存储结构

    [Y1 Y2 Y3 ...]   (所有Y分量连续存储)
    [U1 U2 ...]      (所有U分量连续存储)
    [V1 V2 ...]      (所有V分量连续存储)
    
  • 内存布局示例(I420,4×4 图像):

    Y 分量:[Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16](16字节)
    U 分量:[U1 U2 U3 U4](4字节,水平/垂直各降采样2倍)
    V 分量:[V1 V2 V3 V4](4字节)
    总大小:16 + 4 + 4 = 24 字节(对比RGB24需要 16×3=48 字节)
    
  • 示意图如下
    在这里插入图片描述

  • 访问方式(C 代码)

    uint8_t *y_plane = frame;          // Y 分量起始地址
    
http://www.lryc.cn/news/597281.html

相关文章:

  • 开源UI生态掘金:从Ant Design二次开发到行业专属组件的技术变现
  • 7月23日华为机考真题第二题-200分
  • 7月23日华为机考真题第一题100分
  • 关于原车一键启动升级手机控车的核心信息及注意事项
  • 将AI协作编程从“碰运气”的提示工程(Prompt Engineering)提升到“可预期”的上下文工程(Context Engineering)
  • 驯服AI的“魔法咒语”:Prompt提示词工程使用教程
  • [特殊字符] 从数据库无法访问到成功修复崩溃表:一次 MySQL 故障排查实录
  • 显微科研中的关键选择:不同显微镜相机技术特性与应用适配性全面解析
  • SpringBoot Stream实战指南
  • Django学习之旅--第13课:Django模型关系进阶与查询优化实战
  • 电科金仓推出AI融合数据库,开启国产数据库新时代
  • 深入理解 Java Builder 设计模式:解决构造函数爆炸问题
  • Java SE:类与对象的认识
  • 编程语言Java——核心技术篇(二)类的高级特性
  • Python 程序设计讲义(9):Python 的基本数据类型——复数
  • LeetCode|Day23|326. 3 的幂|Python刷题笔记
  • Flask框架全面详解
  • Element中ElMessageBox弹框内容及按钮样式自定义
  • 服务器版本信息泄露-iis返回包暴露服务器版本信息
  • [Linux入门] Linux 文件系统与日志分析入门指南
  • Linux中scp命令传输文件到服务器报错
  • (Arxiv-2025)利用 MetaQueries 实现模态间迁移
  • 在 Ubuntu 上将 Docker 降级到版本 25.0.5 (二) 降低版本,涉及兼容性问题
  • 欧盟网络安全标准草案EN 18031详解
  • 我用EV-21569-SOM评估来开发ADSP-21569(十三)-SigmaStudio Plus做开发(4)
  • sqlsuger 子表获取主表中的一个字段的写法
  • 进程间通信之-----零拷贝
  • AI替代人工:浪潮中的沉浮与觉醒
  • 【Java学习|黑马笔记|Day21】IO流|缓冲流,转换流,序列化流,反序列化流,打印流,解压缩流,常用工具包相关用法及练习
  • Log4j2漏洞复现