视频基础 零基础入门

像素

观察上面的图片,屏幕上显示小方格的东西就是像素,一张图片有许多个像素点组成,一个视频又有多个图片组成,为了传输更小的空间而被压缩。图片替换的速度特别快,当一个视频超过15帧,人眼会认为连贯不卡顿。

放大观察屏幕显示器,你会发现每个像素是由RGB三个发光管组成。图像是数据,屏幕是显示设备,图像数据经过驱动程序让屏幕显示图像。
屏幕上的每一个像素点是由红绿蓝三个液晶单元组成,通过红、绿和蓝不同的亮度可以组成任何一种颜色。
像素在在传输的过程,怎么表示?

在不同的 BPP 格式中,每个像素的位深是不同的, 用不同的位来分别表示 R、 G、 B,有RGB888,RGB565,RGB555,RBGA32。
有些图像格式不是RGB,是BGR格式,导致色彩不同。需要对对图片进行格式转换,不然显示器显示图像是异常的。
BMP的图象是BGR格式,在读取数据时,把BGR数据顺序转换成RBG,再给到驱动程序。

屏幕指标:
PPI(一寸长内放的像素的数量)
PPI>300时,属于视网膜级别。人眼睛无法看到像素点,是一个清晰的画面。

有几个关键视频信息要注意,分辨率,帧率以及码流?
分辨率很好理解,视频的长宽的像素个数,例如640x360(360P),1280x720(720P),1920x1080(1080P、1K),2560x1440(1440P、2K),3840x2160(4K)。这里可以看到一个规律,前面说的分辨率的比例都是16:9,现在大部分的显示屏的比例基本是这个比例,还有部分显示器是4:3,以前老式电视机就是这个比例。

  • 帧率:一秒中连续播放或采集图像的数量。常见的帧率:15、30、60。
  • 码流:视频文件中在单位时间使用的数据流量,例如一个多媒体文件的分辨率是1280x720,帧率是15,传输是RGB数据。
    未编码视频的RGB码流计算:12807201538b/s ,3代表三原色,因为是bit单位,所以还要乘以8.
    为了减少视频数据占用空间,出现一种新的数据格式YUV数据,可以减小视频数据占用空间大小,同时也兼容黑白显示器。但是RBG是给到屏幕展示最后给到显示器还是RGB数据。

YUV数据

YUV数据,YUV数据一样可以表示像素颜色,但是不同的是,YUV数据不是用红蓝绿表示。Y表示亮度,U和V分别表示色调和饱和度。如果是黑白显示器,只要Y分量的数据就可以显示图像,完全兼容以前的黑白显示器。如果是彩色显示器,要用到UV分量的数据。YUV用于采集与编码。

YUV的常见采样格式有YUV420P,YUV422和YUV444。所有的播放都支持YUV420格式。YUV后面数字代表什么?看到后面会有答案。
看下面YUV图像:

YUV组成图像

分别取出YUV三个分量出来:

Y分量图像

Y分量的数据,只有亮度信息,也可以看出人物的样子,只有黑白颜色。缺少了彩色。

只有U分量图像

只有V分量图像

这里可以看出单独YUV分量都只有黑白两种颜色,并没有彩色?既然说U和V是色调和饱和度,按理说U和V分量是有一点颜色出来,不至于只有黑白。
后面查看YUV转RGB公式,根据公式计算,要看出U和V分量的差别,需要加入Y分量才能看出来,当只有YU分量时,有蓝色轮廓,当只有YV分量时,呈现有红色轮廓YUV也有另外一种叫法YCbCr
YUV转RGB公式?
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
RGB转YUV公式?
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B

YUV格式(YCbCr)

可以想象每一个像素是由YUV数据组成。UV等同于CbCr
YUV4:4:4 每一行的每一个像素都有YUV分量。
YUV4:2:2 每一个像素都有Y分量,每间隔一个像素才有UV分量。
YUV4:2:0 并不意味只有Y和Cb分量,而没有Cr分量。它实际指的是对每一行扫描线来说,只有一种色度分量,他以2:1抽样率存储。

YUV4:4:4

YUV4:2:2

YUV4:2:0

为什么是减少UV分量,Y分量为什么不减少?
人眼的视觉特点是对亮度更敏感,对位置、色彩相对来说不敏感,减少UV分量,人眼基本察觉不出来。
相比RGB数量,YUV420P数据量的计算:
YUV = Y1.5
YUV = RGB/2
相比RGB数量,YUV422数据量的计算:
YUV = Y
2
YUV = Y/1.5
相比RGB数量,YUV444数据量的计算:
YUV = Y*3
YUV = RGB

YUV存储格式

YUV420存储,先存储Y分量,在存储U分量和V分量。

YUV420P存储示意图
YUV存储又分planar 平面和packed 打包

planar 平面,平面比较平整,对应到存储方式上就是把YUV三种分量依次存储:
I420:YYYYYYYY UU VV =>YUV520P
YV12:YYYYYYYY VV UU=>YUV420P

packed 打包,打包就不一定是平整的了,对应到存储方式上就是把YUV三种分量交叉存储:
YUYV422:YUYV YUYVV YUYV YUYV
NV12:YYYYYYYY UVUV=>YUV420SP
NV21:YYYYYYYY VUVU=>YUV420SP

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...