YUV数据分析

简介: 对于人类视觉系统,为什么 YUV 比 RGB 跟容易压缩,YUV 是如何压缩的。YUV444,YUV422,YUV420 的存储格式。

在 前文中,已经知道 YUV 色彩空间非常适合存储跟传输,本文就用实战的方式来演示一下,YUV 在存储跟传输领域有哪些优点。

首先 YUV 有 3 种采样模式:

1,4:4:4 ,一个像素 占 3 个字节。

2,4:2:2,平均一个像素占 2 个字节。

3,4:2:0,平均一个像素占 1.5 个字节。



请先下载下面要用到的图片资源,百度网盘,提取码:ea7s 。资源文件中的 yuv 图片是我用以下 FFmpeg 命令转出来的,

ffmpeg -i juren.jpg -s 1920*1080 -pix_fmt yuvj444p juren_yuv_444.yuv
ffmpeg -i juren.jpg -s 1920*1080 -pix_fmt yuvj422p juren_yuv_422.yuv
ffmpeg -i juren.jpg -s 1920*1080 -pix_fmt yuvj420p juren_yuv_420.yuv

文件内容如下图:

从上图可以看到,yuv420 比 yuv444 的 数据量少了一半,我们用 7yuv 看一下图片质量的差异,再次推荐一下 7yuv, 这是一个 raw 图片编辑器,RGB ,YUV 数据都能用 7yuv 来查看编辑。

上面两张 图片,大家能看出来有什么区别吗?我个人的感受是没有区别,这就是针对 人眼系统 使用的技巧,他的信息量确确实实 少了一半,但是你的眼睛能看到数据少了一半吗?我们感受不到,感受不到就不算少了。

重点:YUV420 比 YUV444 少了一半数据,视觉体验几乎没有变化。

提醒:使用 7yuv 的时候,Format 跟 宽高 一定要选对,图片才会显示正确。

由于大多数视频编码使用的是 YUV420,所以我们经常说的 视频分辨率,是指他的亮度分辨率,因为只有亮度才是铺满的,UV 不是。


先用 HxD 来看一下 juren_yuv_444.yuv 图片 实际的存储情况,请看下图:

这里我得着重讲一下,YUV 这种格式,我觉得他是 裸数据中的裸数据,太裸了,yuv 格式的文件,不像 BMP 文件,BMP 虽然里面也是 RGB 的裸数据,但只是 BMP 里面有一些头数据,宽高什么的。

但是 yuv 文件格式,没有头信息,没有宽高信息,所以用 7yuv 打开 YUV 文件的时候,需要指定宽高,要指定采样格式是 4:4:4。如果你有一个 yuv 图片,但是你忘记了 它的宽高跟采样格式,那你就无法正常显示这个 yuv 图片。

所以,yuv 图片文件除了 原始的像素数据,什么都没有的。由于 4:4:4 跟 RGB24 一样,每个像素占 3 字节,图片宽高是 1920x1080 ,所以这个 yuv 图片的大小如下:SIZE = 1920 * 1080 *3SIZE=192010803所以这个 juren_yuv_444.yuv 图片一共是 6075 Kb 大小。


YUV 格式有3大类 :

1,planner :平面格式, 先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

注意:这里的连续存储,不是一行像素里面连续存储,是整张图片的连续存储,例如 本文的 juren_yuv_444.yuv 图片是 6075kb 大小,那第 1~ 2025kb 都是 Y 的数据, 2026 ~ 4050kb 都是 像素点的 U 数据,以此类推。

2,semi-Planar:半平面的YUV格式,Y分量单独存储,但是UV分量交叉存储。

3,packed :每个像素点的Y,U,V是连续交错存储的。

上面 FFmpeg 命令把 jpegyuv 的时候,使用的格式是 yuvj444p,后面的 p 就代表 planner,所以 本文只关注 planner格式,其他格式不讲。

yuv 图片的像素存储顺序 是从 左上角 到 右下角的。所以如果我们想把 图像的左上角3个像素改成 白色,只需要 把前面 3 字节 从 0 改成 255 即可。Y 是亮度,最亮的值就是白色。如下:

用 7yuv 放大图片查看,左上角果然出现了 3个白色像素。

至此 yuv444p 的存储格式讲解完毕。


下面来讲一下 yuv422p 的存储格式,422 比 444 采样格式 少了 三分之一的数据量。请看下图:

上图 是 用 HxD 打开的效果,前面依然是一堆 00 00 ,因为 是 planner 模式,前面的 2025kb 还是 Y,只是 后面的 UV 少了一半的数据量。

我们知道,YUV 转 RGB 的是时候,肯定需要 知道 Y ,U 跟 V 的值,现在 UV 少了一半,怎么分?

是这样分的,第一个像素跟第二个像素 共享一个UV。这里要提及一下 422 格式里面的 U 值是新值,是由第一个像素跟第二个像素的 U 值加起来除以 2 得到的,所以 422 格式的 UV 值 其实是平均值。

所以,422 格式,是第一第二个像素共享 一组UV,第三第四像素共享 一组 UV,以此类推,如下图:

上图中的空白格代表不占空间,画出来只是为了方便理解,图中的存储顺序不是 planner 格式,也是为了方便理解。

大家可以数一下 上面 两张图片的格子(不包含空格子),会发现 YUV422 确实 比 YUV444 少了 三分之一 的格子。


最后讲一下 数据量最少的 YUV420 格式,这个格式也是应用最广泛的的,视频会议,数字电视,DVD,都用的 YUV420 格式。请看下图:

从上图可以看出,第一行的第1,第2 像素,第二行的 第1,第2 像素共用一组 UV,以此类推。为什么不是 第一行的 第 1~ 4 个像素共享 一组 UV,这是因为如果这样搞,空间距离太远,容易造成体验不太好。换行共享 UV 的空间距离短,画面过渡会自然一些。

这些 UV 值都是新值,是以前的 4 个像素的 U 值加起来 除以4 的平均值。

其实由好几种求 UV 值算法。

1,平均值,4 个像素的 U 值加起来 除以4。

2,加权,例如第一第二个像素的U权重大点,第三第四个像素的U权重小一点。

3,直接丢弃 第二,第三,第四个像素的 U值,取 第一个 像素的 U 值。V值同理。

我个人觉得求 平均比较靠谱,FFmpeg 的代码也有这个算法,具体是求平均还是 加权,我要看下源码,这里埋个坑,后面填。

目录
相关文章
|
Linux Shell 网络安全
Debian10.7 自动化安装镜像制作
Debian10.7 自动化安装镜像制作
1632 0
Debian10.7 自动化安装镜像制作
|
弹性计算 容灾 关系型数据库
阿里云服务器ECS中扩容云盘后磁盘容量没有增加的解决方法
ECS控制台操作扩容只是扩大云盘的存储容量,不会扩容ECS实例的文件系统。还需要登录实例,然后进行扩容文件系统的操作。
2173 0
阿里云服务器ECS中扩容云盘后磁盘容量没有增加的解决方法
|
8月前
|
供应链 监控 安全
业务上云的主要安全风险及网络安全防护建议
业务上云面临数据泄露、配置错误、IAM风险、DDoS攻击、合规与审计、供应链及内部威胁等安全挑战。建议采取全生命周期加密、自动化配置检查、动态权限管理、流量清洗、合规性评估、供应链可信验证及操作审批等措施,构建“预防-检测-响应”一体化安全体系,确保数据保护、权限收敛、合规审计和弹性防护,保障云端业务安全稳定运行。
1140 1
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
381 0
|
10月前
|
人工智能 Cloud Native 安全
圆桌会议:聚焦AI时代机遇下操作系统产业的进化与重构 | 2024龙蜥大会主论坛
2024龙蜥大会主论坛聚焦AI时代的操作系统产业进化与重构。专家们围绕开源社区建设、商业化衍生、替代方案及AI应用等议题展开讨论。中国工程院陈纯院士强调开源社区的重要性,阿里云蒋江伟提出操作系统的兼容性和包容性,AMD潘晓明表示将加强国际合作,中兴通讯刘东则探讨了操作系统与AI的深度融合。会议一致认为,龙蜥操作系统应抓住AI发展机遇,构建安全可靠的生态体系,推动国产操作系统走向国际化。
208 3
|
Cloud Native 关系型数据库 分布式数据库
阿里云牵手海亮科技,共建“教育科技数据库创新应用中心”
近日,阿里云与世界500强旗下、国内领先的教育服务提供商海亮科技集团(以下简称“海亮科技”)达成合作,联合成立“教育科技数据库创新应用中心”。双方将充分整合优势资源,共同推进教育科技领域的数据库技术研究和国产数据库的应用与发展。
283 8
|
Prometheus 监控 Cloud Native
Prometheus 社区与生态发展
【8月更文第29天】Prometheus 是一个开源的监控系统和时间序列数据库,以其简单易用、高性能的特点受到了广泛欢迎。自 2012 年成立以来,Prometheus 社区迅速壮大,形成了一个庞大且活跃的技术生态系统。本文将探讨 Prometheus 社区的发展趋势、相关项目和工具,以及如何参与贡献。
403 1
|
人工智能 监控 异构计算
Stable Diffusion XL 优化终极指南
【6月更文挑战第9天】Stable Diffusion XL 图像生成模型的优化涉及硬件(强GPU)、软件参数调整、数据增强、混合精度使用、模型压缩、性能监控、可解释性和持续学习。通过综合优化这些方面,可提升模型速度和图像质量。示例代码展示模型应用,并强调了根据应用场景定制参数的重要性。不断探索新技术和策略,以优化模型并适应变化需求。
468 10
|
编解码 API 开发工具
FFmpeg获取音视频流信息
FFmpeg获取音视频流信息
365 1
FFmpeg获取音视频流信息