当前位置: 首页 > 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.dtcms.com/a/294164.html

相关文章:

  • Web3 开发者进阶学习图谱
  • 面向对象分析与设计40讲(7)设计原则之合成复用原则
  • 用 PyTorch 实现全连接网络识别 MNIST 手写数字
  • 【Unity编辑器开发与拓展Handles】
  • PyTorch中nn.Module详解和综合代码示例
  • 不同地区的主要搜索引擎工具
  • Java项目中定时任务三方工具和技术的深度应用指南
  • C#定时任务实战指南:从基础Timer到Hangfire高级应用
  • 基于Python的新闻爬虫:实时追踪行业动态
  • SQL Server 数据类型的含义、特点及常见使用场景的详细说明
  • Redis 的事务机制是怎样的?
  • 【世纪龙科技】汽车专业数字课程资源-新能源汽车维护与故障诊断
  • UI自动化测试实战
  • RPA认证考试全攻略:如何高效通过uipath、实在智能等厂商考试
  • MCP vs 传统集成方案:AI时代下的协议革命与性能博弈
  • uniapp 仿美团外卖详情页滑动面板组件[可自定义内容、自定义高度]
  • UniApp H5 适配 PC 端新姿势:打造跨设备一致体验
  • 【Linux系统编程】基础指令
  • 实时视频传输遥控车:DIY智能家居监控与探索机器人
  • CentOS 7 Linux 基础知识点汇总
  • 【C++】OpenCV常用对比度增强方法
  • 华普微Matter模块HM-MT7201,打破智能家居生态孤岛
  • Shell 脚本里的流程控制
  • Android用户鉴权实现方案深度分析
  • Android Camera openCamera
  • 绿化工程路牙边界区分-CAD快速看图标注分类高效处理
  • 使用 MobaXterm 登录你的阿里云 ECS 实例
  • 不止于“亮”:一盏智慧路灯的技术进化史——塔能科技用“落地性”定义行业标准
  • RCLAMP0502A.TCT Semtech:超低电容TVS二极管,高速接口+军工级防护!
  • github最近的设计。