什么是YUV

YUV(也称YCbCr)是电视系统所采用的一种颜色编码方法。其中 Y 表示明亮度,也就是灰阶值,它是基础信号;U 和 V 表示的则是色度,UV 的作用是描述影像色彩及饱和度,它们用于指定像素的颜色。U和V不是基础信号,它俩都是被正交调制的.

YUV与RGB视频信号相比,最大的优点在于只需占用极少的带宽,YUV只需要占用RGB一半的带宽。

YUV采样格式

主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2 和 YCbCr 4:4:4 ,其中 YCbCr 4:2:0是最常用的采样格式。

YUV 4:4:4

YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

下面的四个像素为:

[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为:

Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

YUV 4:2:2

每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。

下面的四个像素为:

[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为:

Y0 U0 Y1 V1 Y2 U2 Y3 V3

映射出像素点为:

[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

YUV4:2:0

4:2:0并不意味着只有Y、Cb两个分量,而没有Cr分量。它实际指得是对每行扫描线来说,只有一种色度分量,它以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0…以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。

下面八个像素为:

[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

[Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]

存放的码流为:

Y0 U0 Y1 Y2 U2 Y3

Y5 V5 Y6 Y7 V7 Y8

映射出的像素点为:

[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

[Y5 U0 V5] [Y6 U0 V5] [Y7 U2 V7] [Y8 U2 V7]

图形表式法

我们用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。

YUV 4:4:4采样,每一个Y对应一组UV分量。

YUV 4:2:2采样,每两个Y共用一组UV分量。

YUV 4:2:0采样,每四个Y共用一组UV分量,如图中的红色部分。

存储格式

YUV存储格式分为两大类:planar(平面)格式 和 packed(打包)格式。对于planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U分量,最后是所有像素点的V分量。对于packed格式,每个像素点的 Y、U、V 分量是连续交叉存储的。由于我们比较常用的是YUV 4:2:0格式,所以我们下面只介绍它的存储格式,其它如YUV 4:4:4 和 YUV 4:2:2请大家参阅其它文章。

YUV420P中的Y、U、V分量都是平面格式,如下图所示:

YUV420P又分为 I420 和 YV12 两种格式。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。

I420: YYYYYYYY UU VV =>YUV420P

YV12: YYYYYYYY VV UU =>YUV420P

YUV420SP中的Y分量为平面格式,UV分量为打包格式,即 U 和 V 分量交错排列。如下图所示:

YUV420SP也分为两种格式 NV12 和 NV21,这两种格式的不同在于UV交错排列的顺序不同。

NV12: YYYYYYYY UVUV =>YUV420SP

NV21: YYYYYYYY VUVU =>YUV420SP

小结

本篇文章为大家介绍了什么是YUV,YUV和采样格式及其存储格式。这里并没有介绍RGB与YUV之间的转换,有兴趣的同学可以自行查阅相关信息。

YUV格式是做音视频直播的一个基本知识点,所以这也是我音视频直播系列文章中的一节,希望大家喜欢,如有不足也请指正。

后面我还会有更多精彩的文章,也希望大家关注我的头条号。

参考

我的视频课

yuv420p 详解_视频格式YUV详解相关推荐

  1. 一文详解 m3u8视频格式与视频秒开优化

    公司要求对 视频秒开率 进行优化(一秒内成功加载的播放数/播放总数). 因此本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个优化大概方向. 但对m3u8做简单了解后,觉得 ...

  2. 【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )

    FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 [FFmpeg]FFmpeg 相关术语简介 二 [FFmpe ...

  3. 音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)

    我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用.然而,视频的格式远远不止这俩种, ...

  4. 安卓zip解压软件_啥格式都能解压的神器,大神必装中文解压码都不怕

    Hi,我是一哥.记得星标置顶「AN社」哟!一哥每日都为大家试水各种黑科技的软件和超有趣的游戏.防止大家被坑的路上浪费无谓的时间,发现更宽阔更有意思的互联网世界. 有趣的灵魂从AN社培养!关注AN社,你 ...

  5. 【FFmpeg+Qt开发】转码流程 H.264 转(mov、mp4、avi、flv)等视频格式 示例详解

    目录 一.FFMPEG 转码 1.1转码流程 1.2转码示例

  6. Shell中if的使用详解_与||的使用详解

    一 IF使用详解 1 格式 1.1 单分支语句结构 if [ 条件表达式 ]; then指令 fi 1.2 双分支语句结构 if [ 条件表达式 ]; then 指令一 else 指令二 fi 1.3 ...

  7. java executors 详解_线程池—Executors 详解

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 线 ...

  8. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...

    Python内置了很多函数,可以直接调用.Python内置的函数可以通过官方文档查看.也可以通过help()查看帮助信息.函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名. 1. 定 ...

  9. sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法

    要点提示 GETPIVOTDATA函数是MOS Excel认证考试的重要考点.资深Office培训师谷月老师在此借助一道例题详细解读这个函数. 例题 在「按地区」工作表上的单元格 H3 中,使用 GE ...

最新文章

  1. inittab 文件分析
  2. 基于.net技术的代码高亮显示组件
  3. PostgreSQL入门,PostgreSQL和mysql
  4. hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
  5. rest-framework 视图
  6. C++ explicit 的用法,就是必须显示调用
  7. 好看的论文千篇一律,有趣的Github项目万里挑一!
  8. IDEA使用技巧整理
  9. 2018届应届生android面试总结
  10. Scroll Dialog
  11. git的smart Checkout跟force checkout的区别
  12. P2323-[HNOI2006]公路修建问题【并查集】
  13. [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题
  14. Python取出SQL表单中的字段名
  15. 23种Python设计模式之建造者模式详解
  16. uni-app 生成安卓证书
  17. css3实现椭圆轨迹运动
  18. openCV_python自学(3)之将视频数据录制成多媒体文件
  19. Google的GDrive美如水中之月
  20. GD32F130之LVD低压检测

热门文章

  1. VMvare 安装kali linux系统及网络配置
  2. JMS消息平台FioranoMQ更新v10.3.0,改进共享HA功能
  3. 认识GMT和UTC时间-附带地理知识
  4. platformIO 开发 arduino
  5. 小米迷途:米粉能否撑起市梦率
  6. Android Studio实现功能强大的购物商城APP
  7. 14期《妙笔生花》2月期刊
  8. Kali Linux渗透测试之提权(二)——WCE、Fgdump、Mimikatz
  9. 详解 浮点数的规格化表示
  10. 第二篇:猴博士求极限[2021.7.12完成]