H264编码原理

H264压缩比

条件:
1.YUV 格式为 YUV420
2.分辨率为 640 * 480
3. 帧率为15
未编码视频的YUV码流(比特):
640 * 480 * 1.5 * 15 * 8 = 55296000 约等于 55 M
(640 * 480)H264建议码流 : 500kpbs
建议码流参考
压缩比:约1/100

GOP

强相关的一组帧
H264编码原理_第1张图片
H264编码原理_第2张图片
GOP中帧与帧之间的差别小
H264编码原理_第3张图片

I/P/B帧

编码帧的分类

  • I帧(intraframe frame),关键帧,采用帧内压缩技术,IDR帧属于I帧
  • p帧(forward Predicted frame),向前参考帧。压缩时,只参考前面已经处理的帧,采用帧间压缩技术。它占 I 帧的一半大小。
  • B帧(Bidirectionally predicted frame),双向参考帧。压缩时,既参考前面已经处理的帧,也参考后面的帧,帧间压缩技术。它占I帧 1/4 大小。

IDR帧与I帧的区别于联系

  • IDR(Instantaneous Decoder Refresh)解码器立即刷新
  • 每当遇到IDR帧时,解码器就会清空解码器参考buffer的内容
  • 每个GOP中的第一帧就是IDR帧
  • IDR帧时一种特殊的 I 帧

帧与分组的关系

H264编码原理_第4张图片

SPS 与 PPS

在IDR前面,同时出现

  • SPS(Sequence Parameter Set)序列参数集,作用于一串连续的视频图像。如seq_parameter_set_id、帧数及POC(picture order count)的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。
  • PPA(Picture Parameter Set)图像参数集,作用于视频序列中的图像。如pic_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方快滤波系数调整标识等。

H264压缩技术

  • 帧内压缩,解决的是空域数据冗余问题(有损压缩)
  • 帧间压缩,解决的是时域数据冗余问题(有损压缩)
  • 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化(无损压缩)
  • CABAC 压缩(无损压缩)

宏块

  • 宏块是视频压缩操作的基本单元
  • 无论是帧内压缩还是帧间压缩,它们都以宏块为单位
    举例
    原始图像
    H264编码原理_第5张图片
    H264宏块划分
    H264编码原理_第6张图片
    宏块划分完成
    H264编码原理_第7张图片
    子块划分
    H264编码原理_第8张图片
    宏块的尺寸
    H264编码原理_第9张图片

帧内压缩技术

帧内压缩的理论

  • 相临像素差别不大,所以可以进行宏块预测
  • 人们对亮度的敏感度超过色度
  • YUV 很容易将亮度与色度分开

帧内预测

H264编码原理_第10张图片
有 9 种预测模式
H264编码原理_第11张图片

帧内预测图像比较

帧内预测残差值

H264编码原理_第12张图片

预测模式信息与残差值压缩

H264编码原理_第13张图片

帧内压缩的帧类型

  • I 帧
  • IDR 帧

帧间压缩技术

帧间压缩原理

  • GOP
  • 参考帧
  • 运动估计(宏块匹配+运动矢量)
  • 运动补偿(解码)

帧分组GOP

一组强相关的帧
H264编码原理_第14张图片

参考值

后面的帧参考前面的帧
H264编码原理_第15张图片

宏块查找

H264编码原理_第16张图片

宏块查找算法

  • 三步搜索
  • 二维对数搜索
  • 四部搜索
  • 砖石搜索

运动估计

H264编码原理_第17张图片

运动矢量与补偿压缩

H264编码原理_第18张图片

帧间压缩的类型

  • P 帧
  • B 帧

视频花屏原因

如果GOP分组中有帧丢失,会造成解码端的图像发生错误,这会出现马赛克(花屏)

视频卡顿原因

  • 为了避免花屏问题的发生,当发现有帧丢失时,就丢弃GOP内的所有帧,知道下一个IDR帧重新刷新图像,I帧时按照帧周期来的,需要一个比较长的时间周期,如果在下一个 I 帧来之前不显示后来的图像,,那么视频就静止不动了,这就是出现了所谓的卡顿现象

无损压缩

DCT转换
H264编码原理_第19张图片
变换后的结果
H264编码原理_第20张图片

VLC压缩

H264编码原理_第21张图片

CABAC压缩

H264编码原理_第22张图片

H264 编码流程

H264编码原理_第23张图片

H264 参考资料

  • H.264_MPEG-4-Part-10-White-Paper
  • https://en.wikipedia.org/wiki/Advanced_Video_Coding

    H264编码原理_第24张图片

H264码流结构

H264码流分层

  • NAL层(Network Abstraction Layer)视频数据网络抽象层
  • VCL层(Video Coding Layer)视频数据编码层

VCL结构关系

H264编码原理_第25张图片

码流基本概念

  • SODB(String Of Data Bits):二进制位数据串,原始数据比特流,长度不一定是8的倍数,故需要补齐。它是由VCL层产生的。
  • RBSP (Raw Byte Sequence Payload):按字节存储的原始数据,SODB + trailing bits 算法如果是SODB最后一个字节不对齐,则补1和多个0.
  • NALU(Network Abstraction Layer Unit):NAL Header(1B) + BRSP

NAL Unit

H264编码原理_第26张图片

H264切片

H264编码原理_第27张图片

Slice 与 MarcoBlock

H264编码原理_第28张图片

码流分层

H264编码原理_第29张图片

你可能感兴趣的:(音视频)