FFmpeg中的那些yuv格式的区别

FFmpeg支持的像素格式非常多,包括yuv420pyuyv422yuv422pyuv444pyuv410pyuv420p9leyuvj411pyuv420p16leyuv411p等等。在FFmpeg中使用AVPixelFormat枚举格式定义在在libavutil/pixfmt.h文件中。
这些格式名称中的字母都是啥意思呢,其实是有规律的,没必要去记。
pplanar,表示该格式采用线性存储。
没有p就表示为packed格式存储。
lelittle-endian,小端存储。
bebig-endian,大端存储。
jjpeg,表示每个像素的取值范围跟jpeg一样是[0,255]。如yuvj411p,取值范围就是[0,255]0表示黑色,255表示白色。而yuv411p的像素颜色范围是[16,235]16表示黑色,235表示白色
420422411:这类数字表示分量的存储比例,但是要注意的后面有0和没0的区别,比如yuv420pyuv分量的比例位4:2:0,这显然是不科学的。真实的是y分量位4uv分量总和为2,因此实际比例是4:1:1,为什么命名为yuv420p呢,其实这种命名是为了跟yuv411p格式做区分,因为yuv411p也是4:1:1,只是他们的取样方式不同,yuv420p中的4y是水平方向2y,垂直方向2y,加起来一共4y公用1u1v,而yuv411p中的4y都是水平方向的。
p后面的数字,如p10表示一个分量使用10位存储,没有数字就默认是8位。
这些在AVPixelFormat枚举中注释中都有标注

AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
AV_PIX_FMT_YUVJ420P,  ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range

注释中的2x2意思就是水平方向2y,垂直方向2yCr就是u分量,Cb就是v分量的意思,那这个15bpp又是什么意思呢,其实他是15 bit per pixel的缩写,就是表示1个像素点有15bit组成,这个其实是可以算出来的,具体计算过程就是,没4个像素中,有4y1u1v,默认每个分量采用10位存储,那么4个像素就有(4+1+1)*10=60位,那么1个像素点就是60/4=15个bit。
知道了这些规律,那咱么只要看到像素的名称,就知道他的存储方式了,知道每个像素占几个bit了。
根据这个咱们来看个具体的像素格式。
yuva422p16le
采用planar存储,一个分量是16位使用小端模式存储,分量比例是4:2:2,并且每个像素还存储了透明度alpha,那么每个像素就是(4+2+2+4)*16/4=48个bit。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 文章参考: 图文详解YUV420数据格式 YUV主要采样格式理解 YUV格式详解 百度百科和维基百科 概述 本文基...
    Felix_lin阅读 3,791评论 0 5
  • 导语 今天跟大家分享的这篇文章,也是之前自己总结的,大致就是想说明一下,视频的裸数据yuv格式的各种分类。刚开始接...
    bigonelby阅读 9,550评论 0 13
  • 一、YUV格式YUV 表示三个分量, Y 表示 亮度(Luminance),即灰度值,UV表示色度(Chromin...
    cain_huang阅读 10,802评论 3 9
  • 什么是YUV YUV是一种色彩空间的模型,基于YUV格式的颜色编码,是流媒体的常用编码方式。如我们平时看到的彩色电...
    浮晓悠羡阅读 6,801评论 1 5
  • 1)YUV简介 YUV格式有两大类:planar和packed。 对于planar的YUV格式,先连续存储所有像素...
    片片碎阅读 39,547评论 9 33

友情链接更多精彩内容