7. 【视频编码原理】

2022-04-27  本文已影响0人  东也_

#此部分内容非常重要

先了解H264编解码相关的概念

1. H264的压缩比
2. GOP
3. I/P/B帧

level:是对视频的描述,level越高,视频的码率、分辨率、帧率越高;


Level等级参数范围表

计算分辨率的相关参数:默认的宏块大小是16 x 16,如果计算宽度就 = (16 + 1) * pic_width_in_mbs_minus1; 如果有裁剪,再减去偏移量

```
pic_width_in_mbs_minus1 : 图像宽度包含的宏块个数 - 1
pic_height_in_mbs_minnus1 : 图像高度包含的宏块个数 - 1
frame_mbs_only_flag :  是帧编码还是场编码,前者是一行一行扫描,一整张图,后者是隔行扫描,会产生两张图,宽度不变,高度则是一张图的两倍
frame_cropping_flag :  图像是否需要裁减,如果需要裁减,通过下面4个参数进行操作
    frame_crop_left_offset  : 减去左侧的偏移量
    frame_crop_right_offset : 减去右侧的偏移量
    frame_crop_top_offset : 减去顶部的偏移量
    frame_crop_bottom_offset : 底部的偏移量
```

获取gop中的帧数
log2_max_frame_num_minus4 表示2的次幂数,帧数就是2的^log2_max_frame_num_minus4次方,如果是0则表示是4;这个参数还能计算出被解码的帧的序号;
获取gop中的参考帧数
max_number_ref_frames
显示帧序号
pic_order_cnt_type 根据这个值计算帧的序号,有三个type,每个type的计算方式不一样,以后用到再补上;
帧率的计算
framerate = sps->vui.vui_time_scale / sps->vui.vui_num_units_in_stick / 2;
  1. PPS是描述一组GOP中的每一幅图像的约束参数,如:id、熵编码选择标识、片数数目、初始量化参数、去方块滤波系数调整标识;


    PPS相关重要参数
4. 帧与分组的关系
帧与GOP
5. 宏块

H264的编解码流程

1. 关键帧编码

  1. 选择帧内预测模式,计算每一个宏块适用的预测模式;
  2. 根据预测数据和原图像做比较,得出每个宏块的残差值;
  3. 将预测数据和残值数据进行转化量化,量化就是先DCT在CABAC;
  4. 将数据封装成NAL包,进行数据分发;
关键帧流程

2. 参考帧编码

  1. 对参考帧和当前帧做运动评估【ME】;
  2. 计算得出运动矢量【MC】;
  3. 比较参考帧的和当前帧,得出残差值;
  4. 将运动矢量得出的评估数据和残差值进行量化;
  5. 将数据封装成NAL包,进行数据分发;

3. 解码流程

解码·

H264参考资料
x264编码器的功能最齐全

H264相关压缩技术

1. 有损压缩

帧内压缩技术

1、因为相邻像素差别不大,宏块的差别也不会很大,为了增加效率,所以以宏块为基础单位,对相邻宏块进行预测;
宏块在预测的时候,有9种预测模式,H264内部提供算法,会自动选择最接近的预判模式,推算出预测的宏块,预测的宏块会保存使用的预测模式,方便解码还原。
2、人的视力对亮度的敏感度比色度更高。所以在进行预测的时候颜色稍微有一些偏差,人眼很难察觉;

帧间压缩技术

1、在同一个GOP中进行帧间压缩,这是条件;
2、后面的帧参考前面的进行编码 ;
3、 运动估计,通过宏块匹配,得到运动矢量。
宏块匹配就是,在一组GOP中拿出两个相邻的帧,将前一个帧的宏块逐个与后一帧的图像中的宏块进行匹配,找到相似度非常高宏块然后记录坐标,算出运动矢量;
宏块匹配的算法有:三步搜索、二维对数搜索、四步搜索、钻石搜索;
4、运动补偿,就是找到残差值,方便解码时还原;

2. 无损压缩

第1步:进行DCT变换(整数离散余弦变换),它的作用就是将分散的数据集中起来,因为经过有损压缩之后,数据在图表中的数据是分散的,不利于压缩,所以需要进行DCT变换,形成滤波,将所有分散的数据集中在某一角;


DCT变换结果

第2步:进行具体的无损压缩,有VLC和CABAC两种方式,后者压缩比更高;
VLC压缩(主要是MPEG2的无损压缩技术),也叫可变长的编码,用短的码代替出现频率高的码,用长的码代替出现频率低的码,这样高频码出现的越多,压缩率就越高;


VLC压缩
CABAC(上下文适配的二进制算数编码),H264就采用这种无损压缩,随着时间的推移,根据上文下联系,使得压缩比更高;
CABAC和CLV比较图

H264的码流结构

H264的码流是进行分层存储的

1. NAL(Network Abstract Layer)层,

2. VCL(Video Coding Layer)层,

3. 码流基本概念

4. Slice 头部相关参数

问题分析

1. 视频花屏

2. 视频卡顿

上一篇 下一篇

猜你喜欢

热点阅读