目录
一部电影1080P,帧率25fps,时长2小时,文件大小 1920x1080x1.5x25x2x360 = 521.4G 数据量非常大,对存储和网络传输都有很大压力。因此视频压缩很有必要。
熵编码、预测(帧内、帧间)、DCT变换和量化。
每一帧图像,划分一个个块(宏块)进行编码,大小一般是16x16(h264,vp8),32x32(h265,vp9),64x64(hz65,vp9,av1)
主要去除信息熵冗余。
如:字符串编码 aaaaabbbbbccccc(15个字节)压缩成5a5b5c(6个字节) 节省9字节空间
图像也是一样,图像出现较多连续相同的字符,扫描出像素值,最好是很小的像素,比如0 像素,因为0在二进制中只占1位即可(指数哥伦布编码)。
如何做到像素值有很多0呢?
先减少图像块的空间冗余和时间冗余,在编码的时候进行帧内预测和帧间预测。
帧间预测的专业术语
总之通过预测得到的残差块的像素值比编码块的像素值,去除了大部分空间冗余和时间冗余,这样得到的像素值更小
希望得到出现连续的0像素,如何处理呢?
将残差块变换到频域,分离图像的高频信息和低频信息,需要将图像块变换到频域。常用的是DCT变换,又叫离散余弦变换。
变换的每一个像素值我们称为系数,变换块左上角的系数是图像的低频信息,其余的是图像的高频信息。(低频信息表示图像的轮廓,高频信息表示图像的细节)
DCT后低频与高频信息分开,再做之字扫描,前面的就是低频信息,后面就是高频信息。由于人眼对高频信息不太敏感,用过一种手段去除掉大部分高频信息,将大部分高频信息置为0
将变换块的系数都同时除以一个值QStep(量化步长),得到的结果就是量化后的系数。QStep越大,得到量化后的系数就会越小。高频信息数值相比低频信息系数值更小,量化后更容易变成0。
编码标准 | 块大小 | 帧内编码 | 帧间编码 | 变换 | 熵编码 | 滤波和后处理 |
H264 | 最大16x16 可划分成8x16 16x8 8x8 4x8 8x4 4x4 | 8个方向模式,planar+DC模式 | 中值MVP | DCT 4x4/8x8 | CAVLC,CABAC | 去块滤波 |
H265 | 最大支持64X64,四叉树划分 | 33个方向模式,planar+DC模式 | Merge模式AMVP模式 | DCT 4x4/8x8/16x16/32x32 DST 4X4 | CABAC | 去块滤波 SAO滤波 |
AV1 | 最大支持128x128,四叉树划分 | 56个方向模式+3个平滑模式+递归FilterIntra模式+色度CFL模式+色度板模式+帧内块拷贝模式 | OBMC+扭曲运动补偿+高级复合预测+复合帧内预测 | 4x4 - 64x64正方形+1:2/2:1 + 1:4/4:1矩形DCT/ADST/flipADST/IDTX | 多符号算数编码 | 去块滤波 CDEF LR滤波 Frame超分 |
标准越新,最大编码块越大,划分方式越多,编码模式越多,压缩效率越高,编码耗时越大。
编码器 | H264 | H265 | AV1 |
PSNR | 29.3 | 31.2 | 32 |
速度 | 25fps | 8fps | 3fps |
相同码率下,AV1清晰度稍好于H265,而H264最差,但编码耗时则相反。
在机器性能比较差的机器上编码,最好选择H264和VP8。如果在新机器上,可以考虑H265,VP9 AV1。
参考