基础概念
图片
- 像素
1920 * 1080
每一行有1920个像素,共1080行,总共的像素是
1920 * 1080 = 2073600
- RGB 颜色模型
红、绿、蓝三原色的色光以不同的含量进行叠加,可以产生不同的色彩光。
- 位深度
- 颜色的信息存储
每一个像素的信息存储取决于图片的深度,也叫色彩深度
如果图片的位深为n , 那么每一个像素都会使用n个二进制位来存储色信息。
- 24位深度
-
每一个像素会使用24个二进制来存储颜色信息
-
每一个像素的颜色都是由红、绿、蓝三个颜色通道合成
-
每个颜色通道都用8bit来表示含量,取值范围,
二进制: 0000 0000 ~ 1111 1111
十进制: 0~255
十六进制: 00~FF
- 颜色的表示形式
十进制:rgb(64, 224, 208)
十六进制:#40E0D0
- 其他位深度
1bit、3bit、8bit、16bit、24bit、32bit
- 位深度越大,表示的颜色数量就越多,图片也就越鲜艳,颜色过渡就会越平滑。
- 几种图片格式
| 压缩类型 | 形式 | 位深度 | 特点说明 | ||||
|---|---|---|---|---|---|---|---|
| JPG | 有损压缩 | 24bit | 会损失图片质量、压缩率高、体积小 | ||||
| PNG | 无损压缩 | 8bit、24bit、32bit | 不损失图片质量压缩率低、体积大解压显示后能够还原出完整的原始图片数据,不损失图片信息。 | ||||
| GIF | 无损压缩 | 8bit |
其他:
HEIF - Apple 适用于照片的HEIF-高效图片格式。
HEIF 和 HEVC 的压缩率高于 JPEG 和 H.264。
bmp: 前面54字节描述文件头
序列
什么叫序列呢?一段时间内图像变化不大的图像集我们就可以称之为一个序列。序列可以理解为有相同特点的一段数据。
如果某个图像与之前的图像变换很大,那么久结束删一个序列,开始下一段序列。重复上一序列的做法,生成新的一段序列。
I/P/B/IDR帧
- IPB
压缩率是7。I帧是关键帧,属于帧内压缩(跟AVI压缩是一样的),理解为整副画面的完整保留;解码时只需要本帧数据就可以完成。
I帧压缩可以去掉视频的空间冗余信息
- P帧(差别帧)
P帧的压缩率是20,表示是这一帧数与之前的一个关键帧的差别数据,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
B、P帧是为了去掉时间冗余信息
- B帧,双向差别帧
B帧的压缩率50,记录的是本帧与前后帧的差别.解码B帧,不仅需要取得之前的缓存画面,还要解码之后的画面,通过前后画面和本帧数据的叠加取得最终的画面。B帧压缩率高,但解码时CPU会比较累。
- IDR
GOP中的首个I帧叫IDR帧
IDR帧是一种特殊的I帧,这一帧之后的所有参考帧只会参考到这个IDR帧,不会参考前面的帧。
解码器中,一旦收到IDR帧,会立即清洗参考帧缓冲区,并将IDR帧作为参考帧。
IDR1 P4 B2 B3 P7 B5 B6 I10 B8 B9 P13 B11 B12 P16 B14 B15 这里的B8可以跨过I10去参考P7
IDR1 P4 B2 B3 P7 B5 B6 IDR8 P11 B9 B10 P14 B11 B12 这里的B9就只能参照IDR8和P11,不可以参考IDR8前面的帧
- GOP(一组连续的画面)
GOP 一般有两个数字,如M = 3(M 指定是I帧和P帧之间的距离,N为指定I帧之间的距离),N = 12。
注意: 在码率不变的前提下,GOP值越大,P、B 帧数量越多,平均I、P、B 帧所占用的字节数就越多,更容易获得较好的视频质量。
分辨率
每幅图像的尺寸(像素数量)或大小,如1920 * 1080、长度比有4:3 , 16:9,视频监控中一般是16:9。
常见的分辨率 352 * 288,176 * 144 , 640 * 480 ,1024 * 768。
帧率
单位时间显示图片的数量,帧率越高,画面更流畅,动画也会更逼真。如,摄像头帧率为25fps。
一般如果抓拍过往车辆,需要配置高帧率摄像头,如常用的120fps高帧率工业摄像头。
电影的24 帧 和 游戏中60帧 是有区别的,电影中的帧会有拖影,所以看起来24帧会很清晰。
码流/码率
定义
指的是视频数据在单位时间内的数量大小。
视频文件体积除以时间。单位一般是Kbp/s或Mbp/s
一般情况下,同样的分辨率,视频文件码流越大,压缩比约小,画面质量就越高。
基本上静态的画面,可以使用较低的码流获取较好的图像质量,剧烈运动的场景,可能较高的码流也得不到好的图像质量。
当讨论码流时,实际在说,视频压缩的比率和视频质量损失的平衡。
通常情况下,视频压缩的越多,你的视频质量也会较差。
几种用于码率的控制算法,
-
CBR (恒定码率,Constant Bitrate) : 宁愿视频质量有损失也要优先保持码率恒定。
-
VBR (可变码率,Variable Bitrate) : 保持恒定视频质量,允许码率波动。
-
Capped VBR (受限的VBR) : 尽可能保持恒定的视频质量,允许码率在范围内波动。
注意:
- 码率是指比特(bit) 而非byte。
- 仅考虑码率并不能决定视频质量,你必须考虑到分辨率、帧率、显示尺寸等因素。
- 不同编解码器如H.264/AVC、HEVC、VP9、AV1? 如果你更改视频编解码器及其设备(编码工具) ,即使相同的码率也会有不同的视频质量。
其他
- 分辨率较低,视频质量会很差么?
当视频分辨率很低时候,如果你为编码器提供较大码率预算(5mbps),使用出色的视频编码器(HEVC 或者AVC),选择编码器能处理的最复杂的设置,视频质量很不错。
- 低码率总会产生质量差的视频么?
动画视频中运动相当小,而且视频中的平滑区域很容易压缩,编码器很高效的压缩动画片,并在低码率时达到不错的质量。
压缩前了解你的视频内容非常重要的。
分辨率不决定清晰度,分辨率一定的情况下,码率要高于某个数值才能保证绝对清楚。
如果目标码率太低也会出现马赛克。 ---- "画面糊了"
通过降低分辨率可以解决马赛克问题,但会丢失大量细节,大屏幕上播放会产生颗粒感,小电视上区别不大。
图像的表示方法
RGB 模型
每个像素点有R/G/B三种原色,每种原色占用8位,也就是1个字节
常见的PNG、BMP格式
一张 1280 * 720 大小的图片,就占用 1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存储空间。