目录

  • 背景与基本概念
    • 特点
    • H.264的应用场景
  • 编码整体架构
    • 编码结构
    • H.264对一个宏块编码
  • H.264标准采用的编码工具
    • 帧内预测
    • 帧间预测
    • MV的亚像素差值
    • 整数变换与量化
    • 无损熵编码
    • 其他技术

本文是对H.264编码标准研究系列的开端

背景与基本概念

  • 发起者:
    ITU-T的VCEG(Video Coding Experts Group)
  • 发起时间:
    2003

最初版本支持8bit/sample,4:2:0色度采样,主要针对大部分通用视频处理与传输场合,(#`O′)对特殊应用做处理
特殊应用可能需求:

  • 源视频数据精度超过8bit/sample
  • 色度采用使用4:2:2或4:4:4
  • 超高码率和超高分辨率编码
  • 超高保真度,或部分无损编码

为了解决这些专业应用场景的需求,2004年JVT公布:“fidenlily range extension”,即H.264FRExt

特点

同MPEG-4标准关注的灵活性和可交互性不同,H.264专注于采用新技术提高视频信号的编码效率和提高网络传输亲和性(NAL)

H.264的应用场景

  • 数字电视广播
  • 视频实时通信
  • 网络视频流媒体
  • DVD视频存储
  • 视频点播

编码整体架构


z真题的编码框架方面,H.264依然采用块结构的混合编码框架;整个结构可以分为网络抽象层(NAL)和视频编码成(VCL)

  • 首先通过帧内预测,帧间预测获取预测数据。并且对他的残差进行量化操作。(Intra(prediction)、Motion Comp)

  • 然后将编码后的语法元素进行熵编码来形成压缩后的码流(Transform/Scaling/Quant)

在编码的过程中,每一帧被分为一个或多个条带(slice)进行编码;每一个条带包含多个宏块(MB,Macroblock)

宏块是H.264编码的基本单元,结构包含一个包含16 x 16亮度快+两个8 x 8色度块+其他一些宏块头信息

编码结构

编码结构大致可以分为两层

  • VLC(video coding layer)
    帧内预测、运动搜索、运动补偿、变化、量化,都可以归为视频编码层。在整个结构中处于一个比较底层的位置
  • NAL(natwork abstract layer)
    在slice以上主要考虑的是压缩之后的码流以及更上一层,通常被称作网络抽象层。设置这一层的意义,主要在于提升H.264格式视频对于网络传输和数据存储的亲和性

简单的理解就是,如果h264是一段代码,VCL是负责视频编码的部分,NAL是负责和网络传输接轨的部分。
再通俗点来说,h264就像是卖产品。VCL是具体的产品,NAL是和快递打交道的部分,快递员会给你一个标准,比如多大的快递箱,放多少减震棉,放哪。
再回到h264,NAL就是为了使得VCL部分更容易被网络解析而存在的。

H.264对一个宏块编码

H.264的宏块编码提供了更加灵活的编码方式

  • 每一个宏块会分割成多宗不同大小的子块进行预测
  • 相比早期标准只能按照整个宏块或半个宏块进行运动补偿的方法,H.264更细分的宏块分割方式提供了更高的预测精度及编码效率
    • 帧内预测采用的块大小可能为16x16或4x4(以亮度为例)
    • 帧间预测/运动补偿采用的块可能有7种不同的形状:16x16、16x8、8x16、8x8、8x4、4x8、4x4
  • 针对预测残差数据进行变换编码的变换块大小为4x4或8x8(仅在FRext版本支持)
  • 效率更高的熵编码方法:CAVLC和CABAC

H.264标准采用的编码工具

工具主要包括

  • 帧内预测
  • 帧间预测
  • 变换和量化编码
  • 无损熵编码
  • 其他技术(环路滤波器)

帧内预测

H.264中采用了基于像素块的帧内预测技术,用于降低图像空间内的像素相关性

  • 在H.263、MPEG-等前期标准中,帧内预测数据由变换域实现;
  • H.264使用空间域的左方与上方的相邻像素预测当前编码的像素值

若H.264的一个宏块为Intra宏块,也就是说这个宏块采用帧内预测进行编码,那么其亮度有两种分割模式:一个16x16像素块或16个4x4像素块

  • 对于每个4x4像素块,共定义9种宇哥模式
  • 对于16x16像素块,共定义4种预测模式

H.264的一个宏块种包含两个8x8的色度分量,对色度分量定义4种预测模式,同16x16的亮度分量

帧内预测模式如下
以下9种是对4x4的亮度分量进行预测的模式

垂直、水平、均值及6种角度模式模式

对16x16的亮度块及色度块的预测就比较简单了


最后一种是平面模式。
如果把整个宏块的像素值看成一个三维的图(类似等高线),那么整个像素块呈或倾斜或水平的平面

也可以这么理解。
圈出的三个点可以确定一个平面。那么这个平面在水平面上的投影的高度(幅度值)就是整个像素块的预测值

帧间预测

H.264采用运动补偿的方式进行帧间编码,消除视频的时间冗余信息

H.264支持的帧间预测类型

  • 单项帧间预测: P slice
  • 双向帧间预测: B slice

H.264的帧间预测方法类似于H.263等前期标准的方法,在具体的算法上进行了一定的改进

  • 更多种的块分割模式:16x16到4x4
  • 更高的运动矢量精度:亮度MV可达1/4像素精度
  • 支持多个候选参考帧
  • 对于交错视频基于帧或者场的运动估计

帧间预测的宏块分割方式

MV的亚像素差值

  • 红色的块表示整像素的像素点
  • 绿色的块是1/2的像素点,对整像素进行差值得到
  • 紫色的快是1/4的像素点,绿色像素和红色像素进一步差值得到

由于差值的精度更高,H.264可以获得相对前期标准更为精确的估计值,可以进一步降低运动估计的残差来提高编码效率

整数变换与量化

图像的能量大部分集中在低频区域,将图像变换至频域处理可以减小图像编码的动态范围,有效降低码率

相比于前期编码标准,H.264对图像/残差数据采用4x4的整数DCT变换,在FRExt中,还支持8x8的变换矩阵

H.264的量化方法使用标量量化。在量化/反量化的过程中,量化参数QP决定量化步长的值,QP每增加6,量化步长增加一倍。量化步长越大,编码长度越小,信息损失越大。在H.264中QP可以取0~51。

无损熵编码

熵编码利用信源的统计特性进行编码,在编码过程中无信息损失,即生成的码流可以无失真的恢复出原始数据

所有编码造成的信息损失都是来自于量化这一部分
其他部分不存在信息损失部分

其他很多研究包括图像与视频的无损编码,其中一种比较流行的方式是直接采用量化和熵编码的方式。

经典的熵编码算法

  • 哈夫曼编码
  • 香浓-费诺编码

H.264正对不同的语法元素制定了不同的熵编码算法

  • UVLC(Universal Variabble Length Coding)——主要采用指数哥伦布编码
    视频的参数集
  • CAVLC(Context Adaptive Variable Length Coding) ——上下文自适应的变长编码
    用于预测模式、宏块类型、残差的数据等
  • CABAC(Context Adaptive Variable Leng Coding)——上下文自适应的二进制算术编码

其他技术

  • 环路去块滤波器
    H.264是通过分割宏块进行编码,环路滤波器主要用于消除在这个过程中块的边际效应
  • 帧/场编码
  • SI/SP帧
  • 码率控制

H.264——H.264的基本介绍相关推荐

  1. 网页播放海康威视大华华为摄像头RTSP流,不需转码转流,延迟毫秒级,支持多路播放、H.264/H.265及1080P/2K/4K

    一.背景: 在遍地都是摄像头的今天,往往需要在各种信息化.数字化.可视化B/S系统中集成实时视频流播放等功能,海康.大华.华为等厂家摄像头或录像机等设备一般也都遵循监控行业标准,支持国际标准的主流传输 ...

  2. M-JPEG、H.261/H.263、MPEG4、H.264这4种压缩方式有什么区别

     1.JPEG/M-JPEG JPEG是一种静止图像的压缩标准,它是一种标准的帧内压缩编码方式.当硬件处理速度足够快时,JPEG能用于实时动图像的视频压缩.在画面变动较小的情况下能提供相当不错的图像质 ...

  3. 视频格式那么多,MP4/RMVB/MKV/AVI 等,这些视频格式与编码压缩标准 mpeg4,H.264.H.265 等有什么关系?

    还是从MPEG-4说起吧 ,MPEG-4是一套用于 音频. 视频信息的 压缩编码 标准,由 国际标准化组织( ISO)和 国际电工委员会( IEC)下属的"動態影像专家组"(Mov ...

  4. 4K视频编码 H 264 H 265 VP9谁主沉浮

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 4K视频 ...

  5. render函数介绍,以及 render: h =gt; h(App)

    原地址 很多朋友对于长篇大论看不下去,有的呢是有接触过这些,所以我们今天吧总结写在前边.需要的朋友可以往下看:  总结:  1. render方法的实质就是生成template模板:  2. 通过调用 ...

  6. H.264VS H.265

    前言: 目前各大视讯媒体和视讯厂商纷纷推出了H.265协议产品,那么H.265相对H.264有什么不同之处或优势呢,今天小编就与大家一起来探讨一下,H.265相对H.264同等画质体积仅为一半.带宽占 ...

  7. 视频编解码——主流视频编码标准的发展(H.261/H.263/MPEG-1/MPEG-2/MPEG-4))

    目录 制定标准的组织 两种编码方式 基于波形的编码 基于内容的编码 H.261 系统图 信源编码器 复合编码器 H.263 MPEG-1 码流结构 MPEG-2 码流结构 MPEG-4 制定标准的组织 ...

  8. linux sed 空间模式,整理:SED的模式空间与缓冲区及n,N,d,D,p,P,h,H,g,G,x解析...

    sed命令n,N,d,D,p,P,h,H,g,G,x解析 1.sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2.p打印当前模式空间所有内容,追加到 ...

  9. linux 网络内核 ko文件,编译内核模块 .ko文件缺少:mmzone.h bounds.h

    出现的问题:编译的时候提示缺少头文件 mmzone.h ....bounds.h...等 include/linux/mmzone.h:18:26: error: linux/bounds.h: No ...

  10. 手机信号上的G、E、O、3G、H、H+是什么意思?

    手机信号上的G.E.O.3G.H.H+是什么意思?   使用智能手机的朋友会发现,在手机信号旁边都会有一些奇怪的字母,比如3G.E.H等等,这些字母都代表什么意思呢?哪种网络状态速度最快?下面让我们详 ...

最新文章

  1. maven多项目打包报错---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到 package xxx does not exist
  2. 人生必做清单-----持续更新
  3. 自己动手写web服务器一(浏览器的访问信息)
  4. criteras for what techniques to learn in future
  5. delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点
  6. 【CF603E】Pastoral Oddities cdq分治+并查集
  7. csdn中一篇sock 经验贴..
  8. 【HTML+CSS网页设计与布局 从入门到精通】第13章-块元素div和内联元素span格式布局
  9. vue打包放到Java项目里_【vue】webpack打包vue项目并且运行在Tomcat里面
  10. 微软VMM2008实战之P2V迁移攻略
  11. 思步网6月底再次重磅出击:《CrystalBall User Manual 7.3(水晶球操作手册7.3)中英文对照版》
  12. u深度重装系统详细教程_u深度启动u盘安装win7系统教程
  13. 连接上局域网打开计算机卡,win7怎么玩局域网游戏,win7怎么玩局域网游戏卡
  14. wooyun镜像容器逆向分析
  15. 多宽带联网(五) 仅使用Windows进行多宽带叠加
  16. 微信视频号视频保存,微信视频号视频下载的方法
  17. 华为 MA5800设备防盗
  18. 一种绘制有向图的方法<TSE93> - 2. 最优层级分配
  19. centos 计算器_计算初学者进行服务器centos 7.6系统及orca、xtb、gaussian 16软件的安装乱谈...
  20. vim编辑器替换以及全局替换

热门文章

  1. 中国100句绝美爱情诗
  2. Dapper大规模分布式系统问题跟踪系统
  3. 迭代器Iterator的用法
  4. 荣耀MagicOS 7.0正式发布 打造以人为中心的智慧生活解决方案
  5. 鸿蒙第三代手机,原创 荣耀Magic 3最新确认,鸿蒙系统+双6400万,最期待的荣耀来了...
  6. 播放res/raw文件(MP4)
  7. WoShop跨境电商国际支付Paypal支付商城全开源无加密商城源码
  8. JavaWeb09_Cookie Session
  9. Java break outer和continue outer的用法
  10. 手淘双十一系列(一) | 521 性能优化项目揭秘