YUV基础知识

图像的基础

像素、分辨率 和RGB的基本概念。

RBG888是24位的,RGBA是32位的。

数据和图像的关系

图像是数据,屏幕是显示设备,图像数据经过驱动程序让屏幕显示图像。Bitmap是BGR格式,若要现实,需将BGR数据转化为RGB数据。

PPI(pixels per inch),DPI(Dots pen inch),两者基本属于1:1的关系,PPI >300 属于视网膜级别。

分辨率

X轴像素个数✖️Y轴像素的个数。常见的宽高比16:9/4:3。常见的分辨率:360P/720P/1K/2K都是16:9的。

帧率

每秒钟采集/播放的图像个数,动画基本在25帧/s,常见的帧率:15帧/s、30帧/s、60帧/s。

未编码的RGB码流

RGB码流 = 分辨率(宽✖️高)✖️ 3(Byte)* 帧率

YUV

YUV,也称YCbCr,Y表示明亮程度,UV的作用是描述影像色彩的饱和度。主要采样格式有YUV4:2:0、YUV4:2:2、YUV4:4:4。

原始图像

YUV的Y分量 

YUV的U分量

YUV的V分量 

 RGB与YUV的关系

RGB用于屏幕图片的展示,而YUV用于采集与编码。RGB与YUV可以相互转化。

YUV格式

4:2:0并不意味着只有Y、Cb两个分量,而没有Cr分量。它实际指的是对每行扫描线来说,只有一种色度分量,它以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的
话,下一行就是4:0:2 ,再下一行是4:2:0..以此类推。

YUV4:4:4 

YUV4:2:2

 YUV4:2:0

YUV数据量的计算

YUV = Y * 1.5,Y分量的1.5倍,YUV = RGB/2,是RGB数据的一半。

YUV4:2:0的存储格式 

 

每一个Y的前四项对应一个U和V。

它的存储格式

planar(平面)

I420: YYYYYYYY  UU VV      =======>YUV420P

YV12: YYYYYYYY  VV UU      =======>YUV420P (常用于IOS)

packed(打包)

NV12:YYYYYYYY UVUV         =======>YUV420SP

NV12:YYYYYYYY VUVU         =======>YUV420SP(常用于Android)

YUV码流 = 分辨率(宽✖️高)✖️1.5✖️帧率

使用ffmpeg生成YUV

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

使用ffplay播放YUV

ffplay -pix_fmt yuv420p -s 1280x544 out.yuv

这里的1280x544是视频分辨率,这个信息可以在生成yuv时,ffmpeg会显示出来。

使用ffplay播放Y分量

 ffplay -pix_fmt yuv420p -s 1280x544 -vf extractplanes='y' demovideo.yuv

使用ffmpeg提取各分量

ffmpeg -i demovideo.mp4 -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]'  demovideo_y.yuv -map '[u]'  demovideo_u.yuv  -map '[v]'  demovideo_v.yuv 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾文繁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值