h.264 基本知识

H.264是新一代的编码标准,理论依据:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小。B帧之后的C帧如果变化不大,我们可以继续以参考B的方式编码C帧,这样循环下去。这段图像我们称为一个序列(序列就是有相同特点的一段数据),当某个图像与之前的图像变化很大,无法参考前面的帧来生成,那我们就结束上一个序列,开始下一段序列,也就是对这个图像生成一个完整帧A1,随后的图像就参考A1生成,只写入与A1的差别内容。

H.264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。H.264采用的核心算法是帧内压缩帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。

H.264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。一般来说,I帧的压缩率是7(跟JPG差不多),P帧是20,B帧可以达到50。可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。


H.264的压缩方法:

1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。 

2.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧; 

3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧; 

4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。


GOP 是画面组,一个GOP是一组连续的画面。GOP 结构一般两个数字,如M=3,N=12。M指定I帧和P帧之间的距离,N指定两个I帧之间的距离。上面的 M=3,N=12,GOP 结构为:IBBPBBPBBPBBI。在一个GOP内 I frame 解码不依赖任何的其它帧,p frame解码则依赖前面的 I frame或 P frame,B frame解码依赖前最近的一个 I frame或 P frame 及其后最近的一个 P frame。
IDR 帧:I 和 IDR 帧都使用帧内预测,在编码解码中为了方便,首个 I 帧要和其他 I 帧区别开,把第一个 I 帧叫 IDR,这样方便控制编码和解码流程,所以 IDR 帧一定是 I 帧,但I帧不一定是 IDR 帧;IDR 帧的作用是立刻刷新,使错误不再传播,从 IDR 帧开始算新的序列开始编码。I 帧不用参考任何帧,但是之后的 P 帧和 B 帧是有可能参考这个 I 帧之前的帧的(跨帧参考),IDR 则不允许。


通常会见到的码率控制模式有
ABR [ Average Bitrate ](平均目标码率模式)
CBR [ Constant Bitrate ](固定码率模式)
2pass..3pass..npass(二次..三次..n次编码模式..严格来说也属于平均目标码率模式.但其码率浮动较ABR高出不少.)
CRF [ Constant Ratefactor ] (固定码率系数模式)
QP   [ Constant Quantizer ] (固定量化值模式)


CBR 是固定码率(固定录像文件大小),在流式播放方案中使用 CBR 编码最为有效。使用 CBR 编码时,比特率在流的进行过程中基本保持恒定并且接近目标比特率,始终处于由缓冲区大小确定的时间窗内。CBR 编码的缺点在于编码内容的质量不稳定。因为内容的某些片段要比其他片段更难压缩,所以 CBR 流的某些部分质量就比其他部分差。此外,CBR 编码会导致相邻流的质量不同。通常在较低比特率下,质量的变化会更加明显。

VBR 是动态码率(根据环境自动调整录像文件大小),当计划提供内容供用户下载、将内容在本地播放或者在读取速度有限的设备(如 CD 或 DVD 播放机)上播放时,请使用 VBR 编码。(计划流式播放内容时也可以采用峰值 VBR 编码模式。)当编码内容中混有简单数据和复杂数据(例如,在快动作和慢动作间切换的视频)时,VBR 编码是很有优势的。使用 VBR 编码时,系统将自动为内容的简单部分分配较少的比特,从而留出足量的比特用于生成高质量的复杂部分。这意味着复杂性恒定的内容(例如新闻播音)不会受益于 VBR 编码。对混合内容使用 VBR 编码时,在文件大小相同的条件下,VBR 编码的输出结果要比 CBR 编码的输出结果质量好得多。在某些情况下,与 CBR 编码文件质量相同的 VBR 编码文件,其大小可能只有前者的一半。

QP 模式,即为固定量化值(Constant Quantizer)模式来编码视频,需要注意的是这里的量化参值为P帧的量化值,I 帧(IDR帧)和B帧的量化值又由 ipratio 和 bpratio 参数来确定,不过通常这两个参数无需手动设置,简单点说QP 模式就是:相对于压缩前的原视频来说,每一个 P 帧 、I 帧 、B帧都会固定的损失一部分质量,损失判定是固定的。但由于I P B帧的插入是不确定的,所以最终文件的大小是无法确定的。设置为 QP0 时将产生无损的画面输出(输出文件一般会比源文件大出数倍以上),并且相同视觉质量时,QP 模式压出的视频文件比 CRF 模式大。

对于视频来说,绝大多数情况下衡量其清晰度的都是码率(bitrate),1080不一定比720清晰.分辨率并非越高越好,而码率的升高一般都会带来画质的提升(当然有时候烦人的噪点也会虚高码率,这属于Avisynth处理范畴,这里先不谈)。而在线视频的压制,就是在有限的码率内(准确点是在有限的平均码率内)尽可能的保留最好画质,简言之就是尽可能提高视频的压缩率。压缩率和压制时间基本成正相关关系。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值