视频
由一组图像组成
为了传输/占用更小的空间而被压缩
最终在显示设备上显示(未被压缩)
图像
像素
RGB
分辨率
每个像素的位深
RGB888(24位)
RGBA(32位)
图像与屏幕的关系
图像是数据
屏幕是显示设备
图像数据经过驱动程序让屏幕显示图像
RGB的色彩问题
RGB与BGR
BMP使用的是BGR格式,需要进行转换。
屏幕指标
PPI:每英寸的像素数
DPI:每英寸的点数
PPI>300就属于视网膜级别
分辨率
X轴的像素个数×Y轴的像素个数
常见的宽高比16:9/4:3
常见分辨率:360P/720P/1K/2K
显示的清晰程度与分辨率有关。
帧率
每秒钟采集/播放图像的个数
动画的帧率是25帧/s
常见的帧率:15帧/s 30帧/s 60帧/s
要求的平滑度越高,帧率就越高。
未编码视频的RGB码流
RGB码流=分辨率(宽×高)×3(Byte)×帧率(25帧)
例如:1280×720×3×25=69120000 约69M
图像的显示
图像大小等于显示区域大小
图像大小小于显示区域大小(拉伸/留白)
图像大小大于显示区域大小(缩小/截断)
YUV(YCbCr)
Y表示明亮度,UV的作用是描述影像色彩及饱和度。
主要的采样格式有YUV4:2:0,YUV4:2:2和YUV4:4:4,其中所有的播放器都支持YUV4:2:0格式。
RGB与YUV的关系
RGB用于屏幕图像的展示
YUV用于采集与编码
RGB转YUV,YUV转RGB(转换公式)
YUV存储的数据比RGB要少很多
YUV4:2:0
YUV4:2:0并不意味着只有Y、Cb两个分量,而没有Cr分量。它实际指的是对每行扫描线来说,只有一种色度分量,它以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0…依次类推。
数据量的计算
YUV=Y×1.5
YUV=RGB/2
YUV存储格式
planar(平面)
I420:YYYYYYYY UUVV YUV420P
YV12:YYYYYYYY VVUU YUV420P
packed(打包)
NV12:YYYYYYYY UVUV YUV420SP
NV21:YYYYYYYY VUVU YUV420SP
未编码视频的YUV码流(YUV4:2:0)
YUV码流=分辨率(宽×高)×1.5×帧率 单位:字节 1字节=8位
换算成bit再乘8,在网上传输数据是以比特位来计算的。
生成YUV
ffmpeg -i xxx.mp4 -an -c:v rawvideo -pix_fmt yuv420p xxx.yuv
播放YUV
ffplay -pix_fmt yuv420p -s 608×368 xxx.yuv
播放Y分量
ffplay -pix_fmt yuv420p -s 608×368 -vf extractplanes='y' xxx.yuv