426 根据gop 讲解x264整个过程

GOP 两个IDR帧之间的距离,x264中和GOP中相关的参数有两个,其一是-keyint,控制的是GOP中最大可能距离,另一个是-min-keyint,控制的是允许最小的GOP距离

IDR 和IDR有关的参数除了上面的GOP设定的两个基本参数之外,还有一个scenecut控制了如何自适应的通过判断场景的变化加入IDR帧,用来override之前的判断。具体做法是通过计算本帧和前一帧之间visual difference 在根据scenecut和minkeyint的设定值形成判断,判定此处是否存在scenechange,判断成立的话将本帧判断为IDR帧,反之则有可能为I帧(判断依据的前半成立)或者BP.

Ref frames 首先这是一个针对sub-mb level而言的参数,而不是一个从frame角度说的参数。假定在b-pyramid关掉的前提下,ref frames控制的是p帧内每个P sub-macroblock(8x8),它可以选择的前向一遍吗P/I帧的最大值,已编码帧一般放在decoded picture buffer(DPB)中,而DPB的允许大小又level控制,这也是不同分辨率下DXVA Compatible Profile中ref设置的参照标准。在编码过程中,P Frame中每个P的8x8 sub-MB,都会在ref规定的DPB中寻找最合适(比如difference最小)的某一帧的某一位置作为它的参考块。在没有weightp引入 的前提下,对每一个P Sub-MB而言,最终作为参考总对象的只可能有一个。

Weightp,我们来看weightp下的情况()


编码顺序:
我们回到最基本的无weightp下,站在frame level的角度说下编码的顺序是怎样的,同时假设我们处理的第一真是DIR帧,此处所有的“向后”指的是回访顺序时间增长的方向:
1.        编码IDR帧
2.        根据scenecut 和 min-keyint的设置,向后移动 min-keyint的距离,开始判定是否为scenechange,直到判定满足,或者到达keyint设置值的距离时候停止。同时记录判定条件不完全满足时候的位置。
3.        编码找到的为指针,亦为IDR帧,GOP形成。
4.        根据2步中得到的判定条件不完全满足的位置,将对应帧按时间顺序用I编码。
5.        找到最头上IDR和离其最近的I帧形成的Sub-GOP(严格意义上说此处并非GOP因为GOP之间不能交换信息,)结合bframes的设定大小,推断P帧出现的位置。具体而言,按时间顺序走每一帧比较该帧用P编码和B编码时的视觉误差和复杂度何者更大,根据某些公式推导出此处应该用何种帧类型,再向后移一帧;如果直到bframes规定的值都未出现P,则强制插入一帧P。这样就决定了每个sub-GOP内P帧的位置。
6.        最后一步,根据I/IDR/P形成的子区间,按时间顺序编码各帧为B帧。

例子
100-120帧这样的一段视频
第一步结束后编码完成 100帧
第二步结束后可能编码完成 120帧和110帧 (IDR帧)同时找出了104,108, 115帧应该编码为I
第四步结束后编码完成104 108 115 帧为I
第五步对 100-104  104- 108  108-110   110 – 115  115-120五个子区间,判断P帧出现的位置并编码有可能判断出102  113  118 为p帧
最后一步在编码之间的部分为B帧
于是解码过程的输出帧顺序其实是
100  110  104  108  102  101  103  105 106   109.。。。。。。。

原文地址:https://www.cnblogs.com/hatreds/p/2471137.html