yuv420p 详解_视频格式YUV详解
什么是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详解相关推荐
- 一文详解 m3u8视频格式与视频秒开优化
公司要求对 视频秒开率 进行优化(一秒内成功加载的播放数/播放总数). 因此本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个优化大概方向. 但对m3u8做简单了解后,觉得 ...
- 【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )
FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 [FFmpeg]FFmpeg 相关术语简介 二 [FFmpe ...
- 音视频数据处理入门:原始视频格式YUV,NV12,NV21,YV12,YU12(I420)
我们知道,在Camera中设置Preview的回调函数onPreviewFrame时谷歌推荐我们使用NV21,YV12两种格式,因为这两种格式几乎在所有的设备里都通用.然而,视频的格式远远不止这俩种, ...
- 安卓zip解压软件_啥格式都能解压的神器,大神必装中文解压码都不怕
Hi,我是一哥.记得星标置顶「AN社」哟!一哥每日都为大家试水各种黑科技的软件和超有趣的游戏.防止大家被坑的路上浪费无谓的时间,发现更宽阔更有意思的互联网世界. 有趣的灵魂从AN社培养!关注AN社,你 ...
- 【FFmpeg+Qt开发】转码流程 H.264 转(mov、mp4、avi、flv)等视频格式 示例详解
目录 一.FFMPEG 转码 1.1转码流程 1.2转码示例
- Shell中if的使用详解_与||的使用详解
一 IF使用详解 1 格式 1.1 单分支语句结构 if [ 条件表达式 ]; then指令 fi 1.2 双分支语句结构 if [ 条件表达式 ]; then 指令一 else 指令二 fi 1.3 ...
- java executors 详解_线程池—Executors 详解
各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 线 ...
- python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...
Python内置了很多函数,可以直接调用.Python内置的函数可以通过官方文档查看.也可以通过help()查看帮助信息.函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名. 1. 定 ...
- sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法
要点提示 GETPIVOTDATA函数是MOS Excel认证考试的重要考点.资深Office培训师谷月老师在此借助一道例题详细解读这个函数. 例题 在「按地区」工作表上的单元格 H3 中,使用 GE ...
最新文章
- inittab 文件分析
- 基于.net技术的代码高亮显示组件
- PostgreSQL入门,PostgreSQL和mysql
- hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
- rest-framework 视图
- C++ explicit 的用法,就是必须显示调用
- 好看的论文千篇一律,有趣的Github项目万里挑一!
- IDEA使用技巧整理
- 2018届应届生android面试总结
- Scroll Dialog
- git的smart Checkout跟force checkout的区别
- P2323-[HNOI2006]公路修建问题【并查集】
- [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题
- Python取出SQL表单中的字段名
- 23种Python设计模式之建造者模式详解
- uni-app 生成安卓证书
- css3实现椭圆轨迹运动
- openCV_python自学(3)之将视频数据录制成多媒体文件
- Google的GDrive美如水中之月
- GD32F130之LVD低压检测