H.264——H.264的基本介绍
目录
- 背景与基本概念
- 特点
- 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的基本介绍相关推荐
- 网页播放海康威视大华华为摄像头RTSP流,不需转码转流,延迟毫秒级,支持多路播放、H.264/H.265及1080P/2K/4K
一.背景: 在遍地都是摄像头的今天,往往需要在各种信息化.数字化.可视化B/S系统中集成实时视频流播放等功能,海康.大华.华为等厂家摄像头或录像机等设备一般也都遵循监控行业标准,支持国际标准的主流传输 ...
- M-JPEG、H.261/H.263、MPEG4、H.264这4种压缩方式有什么区别
1.JPEG/M-JPEG JPEG是一种静止图像的压缩标准,它是一种标准的帧内压缩编码方式.当硬件处理速度足够快时,JPEG能用于实时动图像的视频压缩.在画面变动较小的情况下能提供相当不错的图像质 ...
- 视频格式那么多,MP4/RMVB/MKV/AVI 等,这些视频格式与编码压缩标准 mpeg4,H.264.H.265 等有什么关系?
还是从MPEG-4说起吧 ,MPEG-4是一套用于 音频. 视频信息的 压缩编码 标准,由 国际标准化组织( ISO)和 国际电工委员会( IEC)下属的"動態影像专家组"(Mov ...
- 4K视频编码 H 264 H 265 VP9谁主沉浮
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 4K视频 ...
- render函数介绍,以及 render: h =gt; h(App)
原地址 很多朋友对于长篇大论看不下去,有的呢是有接触过这些,所以我们今天吧总结写在前边.需要的朋友可以往下看: 总结: 1. render方法的实质就是生成template模板: 2. 通过调用 ...
- H.264VS H.265
前言: 目前各大视讯媒体和视讯厂商纷纷推出了H.265协议产品,那么H.265相对H.264有什么不同之处或优势呢,今天小编就与大家一起来探讨一下,H.265相对H.264同等画质体积仅为一半.带宽占 ...
- 视频编解码——主流视频编码标准的发展(H.261/H.263/MPEG-1/MPEG-2/MPEG-4))
目录 制定标准的组织 两种编码方式 基于波形的编码 基于内容的编码 H.261 系统图 信源编码器 复合编码器 H.263 MPEG-1 码流结构 MPEG-2 码流结构 MPEG-4 制定标准的组织 ...
- 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打印当前模式空间所有内容,追加到 ...
- linux 网络内核 ko文件,编译内核模块 .ko文件缺少:mmzone.h bounds.h
出现的问题:编译的时候提示缺少头文件 mmzone.h ....bounds.h...等 include/linux/mmzone.h:18:26: error: linux/bounds.h: No ...
- 手机信号上的G、E、O、3G、H、H+是什么意思?
手机信号上的G.E.O.3G.H.H+是什么意思? 使用智能手机的朋友会发现,在手机信号旁边都会有一些奇怪的字母,比如3G.E.H等等,这些字母都代表什么意思呢?哪种网络状态速度最快?下面让我们详 ...
最新文章
- maven多项目打包报错---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到 package xxx does not exist
- 人生必做清单-----持续更新
- 自己动手写web服务器一(浏览器的访问信息)
- criteras for what techniques to learn in future
- delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点
- 【CF603E】Pastoral Oddities cdq分治+并查集
- csdn中一篇sock 经验贴..
- 【HTML+CSS网页设计与布局 从入门到精通】第13章-块元素div和内联元素span格式布局
- vue打包放到Java项目里_【vue】webpack打包vue项目并且运行在Tomcat里面
- 微软VMM2008实战之P2V迁移攻略
- 思步网6月底再次重磅出击:《CrystalBall User Manual 7.3(水晶球操作手册7.3)中英文对照版》
- u深度重装系统详细教程_u深度启动u盘安装win7系统教程
- 连接上局域网打开计算机卡,win7怎么玩局域网游戏,win7怎么玩局域网游戏卡
- wooyun镜像容器逆向分析
- 多宽带联网(五) 仅使用Windows进行多宽带叠加
- 微信视频号视频保存,微信视频号视频下载的方法
- 华为 MA5800设备防盗
- 一种绘制有向图的方法<TSE93> - 2. 最优层级分配
- centos 计算器_计算初学者进行服务器centos 7.6系统及orca、xtb、gaussian 16软件的安装乱谈...
- vim编辑器替换以及全局替换
热门文章
- 中国100句绝美爱情诗
- Dapper大规模分布式系统问题跟踪系统
- 迭代器Iterator的用法
- 荣耀MagicOS 7.0正式发布 打造以人为中心的智慧生活解决方案
- 鸿蒙第三代手机,原创 荣耀Magic 3最新确认,鸿蒙系统+双6400万,最期待的荣耀来了...
- 播放res/raw文件(MP4)
- WoShop跨境电商国际支付Paypal支付商城全开源无加密商城源码
- JavaWeb09_Cookie Session
- Java break outer和continue outer的用法
- 手淘双十一系列(一) | 521 性能优化项目揭秘