精华内容
下载资源
问答
  • GOP

    千次阅读 2018-05-10 01:09:14
    GOP 两个IDR帧之间的距离,x264中和GOP中相关的参数有两个,其一是-keyint,控制的是GOP中最大可能距离,另一个是-min-keyint,控制的是允许最小的GOP距离 IDR 和IDR有关的参数除了上面的GOP设定的两个基本参数之

    原文地址:http://bbs.chinavideo.org/viewthread.php?tid=14356&extra=page%3D1

    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的角度说下编码的顺序是怎样的,同时假设我们处理的第一真是IDR帧,此处所有的“向后”指的是回访顺序时间增长的方向:
    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.。。。。。。。即(GOP边界,I I PBBBBBB)


    (二)关于码流中的三种随机接入点的解释:

    BLA、CRA、IDR是文献中提到过的三种随机接入点(RAP),在文献中的解释的确不是很容易理解。更关键的是,与这三个名词相应的还有GOP,open/closed GOP, RASL,RADL等等概念,环环相扣,一个不理解,剩下的也很难弄懂,下面我们一个一个解释,很多也是我自己刚刚想到的,不一定正确全面,欢迎批评。

    (1)关于GOP。这是图像组(Group of Pictures)的意思,表示编码的视频序列分成了一组一组的有序的帧的集合进行编码。每个GOP一定是以一个I帧开始的,但是却不一定指代的是两个I帧之间的距离。因为一个GOP内可能包含几个I帧,只有第一个I帧(也就是第一帧)才是关键帧。在程序cfg中,GOP的长度和两个I帧的距离也是两个不同参数指定的(如IntraPeriod和GOP Size或者类似的参数)。所以,两个I帧的间距不可能大于GOP的长度,一般情况是更小的。

    (2)关于IDR。这个词儿的全称是Instantaneous Decoding Refresh,是在H.264中定义的结构。在H.264中,IDR帧一定是I帧,而且一定是GOP的开始,也是H.264 GOP的关键帧。但是反过来却不成立,I帧不一定是IDR帧。GOP的长度不是定死不变的,在H.264的编码器中,如果判定场景发生变化,那么即使不到原定GOP的末尾,也会在这个位置加入一个IDR,作为新一个GOP的开始。此时这个GOP的长度就被缩小了。

    (3)闭合GOP和开放GOP(closed GOP/open GOP),CRA。闭合GOP是H.264中GOP的格式。在H.264的GOP中,所有的GOP都是独立解码的,与其他GOP无关,即它们都是“封闭”的。但是在HEVC中,GOP的结构发生了变化,采用了“开放”的结构,在解码过程过可能会参考其他GOP的数据。这时,一个GOP的起始帧命名为CRA,clean random access,同样采用帧内编码,但是这个GOP内的帧间编码帧可以越过CRA参考前一个GOP的数据,这便是GOP的open。

    (4)关于BLA。个人感觉BLA只是CRA在视频流切换情况下的一种特例。视频流在某个RAP上要求切换到另一个视频流继续解码,则直接将该CRA同另一个视频流中的接入CRA连接,后者便是BLA。由于BLA之前解码到缓存的视频流与当前视频流无关,因此其特性类似于直接从该点进行随机存取后的CRA。

    (5)RASL和RADL。这是两种GOP间的图像类型。如果解码器从某个CRA随机接入,则按照显示顺序的后面几帧数据由于缺少参考帧而不能解码,这些图像将被解码器抛弃,即skip leading。而对于没有从当前CRA接入的数据,这些图像可以被正常解码显示,因此称为decodable leading。由于这些数据是有可能舍弃的,因此其他图像(trailing pictures)不能参考这些数据,否则万一这些图像被舍弃,将会有更多的图像受其影响而不能正常解码。

    下面举个例子:

    假设视频序列的显示顺序为①,这是一个完整的GOP,解码顺序为②

    ①I B B P B B P B B P

    ②I P B B P B B P B B

    在H.264中,第一个I帧为IDR,GOP为闭合结构,因此两个GOP组成视频的结构为

    I B B P B B P B B P I B B P B B P B B P(显示顺序)

    I P B B P B B P B B I P B B P B B P B B(解码顺序)

    而在HEVC中,两个I帧为CRA,GOP为开放结构,因此GOP的结构为:

    I B B P B B P B B P B B I B B P B B P B (显示顺序)

    I P B B P B B P B B I B B P B B P B B...(解码顺序)

    两个红色的B帧表示的是按照解码顺序在CRA之后,该GOP内参考的前一个GOP进行编码的图像。这样便很容易得知,如果选择在第二个CRA进行随机接入,这两个红色的B帧将会由于没有参考帧无法解码而被舍弃。这两个红色的B帧即RASP。如果没有选择这个CRA进行随机接入,这两个红色B帧将可以顺利解码,即成为RADP。

    对于BLA,情况也是类似的。由于出现码流拼接,第二段码流的CRA之后的B也会因为没有参考帧无法解码而丢弃。很容易理解,此时缓存中的参考帧数据还来自上一段码流,跟当前码流没关系,当然不能用作B的参考了。

    之余HEVC这么设计的目的,我觉得应该是为了编码效率考虑的。因为B帧的压缩比相对是最高的,引入这种设计可以在不影响随机存取性能的前提下,尽可能增大B帧的比重,提高整体压缩编码的性能。

    以下是一些国外研究者在论坛中对这个问题的一些讨论,可以拿来做一下参考:

    www.linkedin.com/groups/IDR-vs-CRA-3724292.S.125836481

    forum.doom9.org/archive/index.php/t-105129.html


    (三)


    1、由图像帧到树形编码单元的分割

    一帧图像分割成树形编码单元(coding tree units,CTUs),CTU包含亮度和色度分量CTB,是基本的处理单元。亮度分量CTB为边长为16、32或者64的矩形块,色度CTB的边长为亮度的一半,CTB的实际大小由码流中的序列参数集合指定。更大尺寸的分块可以更好地处理高清视频信号。

    2、由CTB分割为CB:

    亮度和色度CTB可以按照四叉树结构进一步分解为CB。四叉树结构可以根据视频信号的区域特征将CTB分割成合适大小的CB块。分割过程可反复迭代,知道亮度CB的大小为可支持的最小值8×8。在图像的边界处,CB为最小支持尺寸。解码器对可能“越界”的CTB会做专门处理。

    3、PB和PU

    每个CU的预测模式可能为帧内或者帧间。若预测模式为帧内,除了最小尺寸模式外,PB的尺寸等于CB。若是最小尺寸模式,则用标志位表示是否将CB分割成四个PB块。这样最小可以支持到4×4大小的帧内预测块(此时色度分量PB也为4×4)。

    若预测模式为帧间预测,亮度和色度CB可能分割为1/2/4个PB。只有CB为最小尺寸模式时才能分割为4个PB块。CB分割为四个PB时,每个PB占据CB的1/4;CB分为两个PB时,可选择6种分割模式的一种,其中包含不平均分割模式(只针对16×16及以上的亮度块)。每个帧间预测PB包含一个或者两个运动矢量和参考帧索引。为控制编码效率,4×4亮度块不允许使用帧间预测,8×4和4×8最多只允许单向预测编码。

    (四)

    GOP in MPEG-1

    ISO 11172-2, p24

    Group of Pictures:

    图像组是一个或多个解码后的图像,用于可以随机存取。一个GOP的第一帧为I帧,编码码流中的图像顺序就是解码器输出的顺序;特别的,临近的B帧按照显示顺序编码;按照显示顺序排列的最后一帧需为I或P帧。一个GOP的长度不定,至少要包含一个I帧,支持随机接入、调速播放的应用,应该使用相对较小的GOP。在场景切换以及其他运动估计不好的地方也可以作为GOP的起始位置。B帧的数目也是可变的。


    GOP in MPEG-2

    ISO 13818-2, p6

    Group of Pictures headers:

    在MPEG-2中,GOP的概念由Group of Pictures headers来实现(p6)。GOP头是视频序列中的可选结构,在序列头(sequence header)之后。在一个序列之中,有多帧之前可能存在重复序列头(repeat sequence header)或者(group of picture header),或者二者兼备(p16)。在编码码流的某些I帧前面,可能会加入一个GOP头,以向解码器说明在将该位置作为随机接入点及后续B帧能不能正常解码(p18)。

    MPEG-2中的Group of Pictures headers是一个结构体,包含group_start_code,time_code, closed_gop和broken_link等元素(p34)。


    Syntax Element Structs in H.264/AVC

    到了H.264/AVC中,语法元素的结构发生了重大变化。在H.264中图像组GOP的概念被大大弱化了。比如,在标准文档ISO/IEC 14496-10中,用GOP或者group of picture这类关键词搜索,几乎得不到什么结果。同时,在JM86的代码的配置文件中,也没有指定如GOP长度之类的设置。

    配置文件中,I帧周期IntraPeriod设置的值不包括B帧,仅仅表示I帧在I/P序列中的周期;B帧的位置和数目由跳过帧数FrameSkip和B帧数目NumberBFrames决定。

    在H.264中,编码层的语法元素分为了五层结构:序列参数集、图像参数集、条带(slice)、宏块和子块。序列层和图像层被取消了,并将二者的头结构中的数据分离出来形成了参数集。在解码过程中,图像参数集会参考序列参数集,而条带会参考图像参数集,真正在编解码中发挥具体作用的是条带这一结构。参考同一个图像参数集的各个条带,并不一定属于同一帧图像。

    H.264定义了IDR图像,通常是一串图像序列的第一帧。引入该概念是为了解码同步的因素,当解码器解码到一个IDR图像时,立刻清空参考帧队列,输出或抛弃解码的数据并重新查找参数集,开始一个新的序列。

    (五)HEVC及其RPS

    【参考文献主要来自HM代码自带的software-manual.pdf和Overview of HEVC High-Level Syntax and Reference Picture Management
    GOP in HEVC
    software-manual.pdf in HM-10.0, p2
    定义了视频序列中重复出现的GOP帧结构。在配置文件的的Coding Structure部分,定义了I帧结构,DecodingRefreshType和GOPSize;此外还有GOP种每一帧的参数设置,列表中按照解码顺序排列。各个帧的参数设置中指定了当前以及以后用到的参考帧等数据。其中各个参数的具体含义如下:
        Type:条带类型,为I,B,P之一;
        POC:GOP内图像的显示顺序,取值范围为1-GOPSize;
        QPOffset:量化参数偏移量,用于计算本帧的实际量化参数;
        QPFactor:用于率失真优化的权值;
        tcOffsetDiv2:环路滤波器参数的偏移量;
        betaOffsetDiv2:环路滤波器参数的偏移量;
        temporal_id:当前帧所在的时域子层的序号;
        num_ref_pics_active:参考图像列表(reference picture lists)L0和L1的大小;表明在编码过程中使用了多少个参考帧;
        num_ref_pics:当前帧所保有的参考帧数,包括当前帧以及未来帧所用到的参考帧;
        reference pictures:保存相对于当前帧POC的参考帧的POC,数量又num_ref_pics指定。
        predict:定义inter_ref_pic_set_prediction_flag的值。0表示编码RPS不需要RPS预测,并忽略后面的deltaRIdx-1, deltaRPS等参数;1表示需要RPS预测,使用deltaRIdx-1, deltaRPS, num ref idcs和Reference idcs;2表示需要RPS预测,但仅使用deltaRIdx-1;
        deltaRIdx-1:当前RPS索引同预测RPS索引的差值-1;
        deltaRPS:预测RPS同当前RPS的POC之差;
        num_ref_idcs:编码当前RPS的ref_idcs的数量;
        reference_idcs:指定RPS间预测的ref_idcs。
    该文档举例如下图所示:
    【HEVC学习与研究】22、回顾:让人崩溃的GOP(下)——HEVC及其RPS
    该序列的GOPSize=4,Frame 1对应POC=4,参考POC=0,因此-4为参考帧;Frame 2对应POC=2,参考POC=0、4,因此参考帧为2,-2;Frame 3对应POC=1,参考POC=0、2,也要参考POC=0、4,因此参考帧为-1,1,3;Frame 4对应POC=3,参考帧为-1,1;
    Frame 2-4 支持RPS间预测,因此predict参数设置为1;Frame 2 使用Frame1作为predictor,因此deltaRIdx-1设置为0,同理可得Frame 3、4的deltaRIdx-1值;deltaRPS为参数predict减去当前POC的值;
    这两个值的含义区别:根据标准文档的说明,deltaRIdx-1表示选定的短线RPS元素同stRpsIdx(该值可认为等于当前活动SPS中num_short_term_ref_pic_sets的值,即短线RPS的个数),即在predictor中选定一个参考帧【此处尚存疑问......】;deltaRPS的作用是根据当前POC和deltaRPS寻找predictor。
    最后,reference_idcs有一串0/1/2数字组成,共有num_ref_idcs个。其中最后一个代表该帧的predictor,其余表示predictor的RPS。取0/1/2分别对应该帧为当前帧的参考、后续帧的参考以及不用做参考。

    RPS

    A. 引言
    描述了DPB中解码图像如何管理以用作参考。HEVC的RPS同前期标准的参考帧管理方法完全不同,每一个slice均需标明DPB状态("短期参考/长期参考/非参考")。其目的在于增强容错鲁棒性。

    B. 背景

    C.RPS概念
    HEVC提出来一种全新的参考帧管理方法,对当前和后续图像的每一个slice,均使用一个完整的参考图像集合,所以需要保存DPB中完整图像的集合供当前和后续图像参考。与此不同的是H.264/AVC中只标识了DPB中相关的变化。借助RPS,不再需要之前解码图像的信息来维护DPB中参考帧的状态。

    D. RPS举例
    根据上图,每一帧的RPS列在下表。
    B4的RPS中不包含I0,因此对B4,I0被标记为“不用作参考”,因此I0不能被用作B4以及按解码顺序在B4之后的帧的参考帧。

    E. 图像解码和DPB操作的顺序
    在H.264/AVC中,当前帧解码完成后,进行参考帧标记和DPB操作(从缓存中输出和移出图像);在HEVC中,首先从当前帧的slice头中解码出RPS,并在解码当前帧之前进行参考帧标记和DPB操作。

    F. RPS数据传递
    HEVC中每一个slice header都要包含当前帧的RPS数据(IDR条带除外,其RPS隐含为空);除此之外,即使是I帧的slice可能也包含RPS数据,因为按照解码顺序在它后面的帧可能会参考它之前的数据;RPS中图像的数量不能超过DPB的大小。
    RPS使用POC标识参考帧,除了所在当前帧的POC之外,每一个slice header都直接包含(或者继承自SPS)RPS中每一帧图像的POC。
    每个图像的RPS包含5个不同的参考图像表:
        RefPicSetStCurrBefore:解码和输出顺序均在当前帧之前的短线参考帧,可用于当前帧的帧间预测;
        RefPicSetStCurrAfter:解码顺序在当前帧之前,输出顺序在当前帧之后的短线参考帧,可用于当前帧的帧间预测;
        RefPicSetStFoll:按解码顺序在当前帧之后的图像可用的短线参考帧,不能用于当前帧的帧间预测;
        RefPicSetLtCurr:可用于当前帧的帧间预测的长线参考帧;
        RefPicSetLtFoll:按解码顺序在当前帧之后的图像可用的长线参考帧,不能用于当前帧的帧间预测;
    RPS根据参考图像类型的不同,分别使用三个循环迭代来传递数据:POC比当前帧更低的短线参考帧、POC比当前帧更高的短线参考帧、长线参考帧;除此之外,还将为每一帧传递一个标识used−by−curr−pic−X−flag来说明是否用作了当前帧的参考帧;
    下图为一组图像的例子:
    在上图中,B14这一帧包含了上述5个不同的RPS子集的元素:
        P8:属于RefPicSetStCurrBefore——该帧在B14之前,且用作B14的参考帧;
        P12:属于RefPicSetStCurrAfter——该帧在B14解码顺序之后,且用作B14的参考帧;
        P13:属于RefPicSetStFoll——短线参考帧,不用于当前帧的参考,可用于后续图像(B15)的参考;
        P4:属于RefPicSetLtCurr——长线参考帧,用于B14的参考;
        I0:属于RefPicSetLtFoll——长线参考帧,不能用于B14的参考,可用于后续图像(B15)的参考;
        【疑问:长线和短线具体是怎么区分的?】
    1). 传输RPS中的短线参考帧:
    RPS的短线参考帧可以直接包含在slice头中。另外slice头可以只包含一个表示索引值的语法元素指向活动SPS中传输的RPS预定义的表。RPS的短线参考帧可使用Intra RPS或者Inter RPS(下一节详述)方式传递。使用Intra RPS时,传递num−negative−pics和num−positive−pics两个参数表示两个参考帧列表的长度,分别包含POC相对当前帧为正和为负的参考帧。表中的每个元素采用定长编码,表示与列表中前一个元素的POC差值-1;
    2). 采用Inter RPS传输PRS中的短线参考帧:
    所谓Inter RPS,表示编码SPS中的循环RPSs时,可以通过参考SPS中已经编码的其他RPS的方式实现。采用这样的设计源于当前图像的RPS可以从先前解码的图像RPS中预测,因为当前帧的参考帧必须是前帧的参考帧或者前帧自身,只需标记那些帧是参考帧,可用于当前帧的预测。Inter RPS语法由以下组成:指向用作predictor的RPS的索引,predictor PRS和当前PRS的差值,指示那些图像是参考帧及是否用于当前和后续图像预测的标识。
    3). 传输PRS中的长线参考帧:
    采用长线参考帧必须将SPS中的long−term−ref−pics−present−flag标志位设为1。slice头中的定长编码字段poc−lsb−lt表示每一个长线参考帧POC的least significant bits,该值是为某特定长线参考帧传输的码字pic−order−cnt−lsb的拷贝。除此之外也可以在SPS将一系列长线参考帧表示为POC LSB的列表,并在slice头中设定POC LSB作为该表的索引。语法元素delta−poc−msb−cycle−lt−minus1可用于计算长线参考帧同当前帧的完整POC距离,需要为RPS中与其他参考帧的POC LSB相同的帧指定delta−poc−msb−cycle−lt−minus1值。

    G. 图像标记
    在解析slice头时,图像标记过程在解码slice数据之前进行,DPB中被标记为“used for reference”但未被包含在RPS中的图像被标记为“unused for reference"。如果图像的used−by−curr−pic−X−flag为0,且被包含在RPS中但是DPB中不存在,则该帧被忽略,但是若used−by−curr−pic−X−flag为1,则意味着该帧本应该用于参考但是发生了丢失,这种情况由解码器处理。
    当前帧解码完成后,该帧被标记为“用于短线参考”。

    H. POC, FrameNum和不存在的帧
    HEVC不传输FrameNum或者产生和处理不存在的帧。由于RPS中包含了DPB中各个参考帧的状态因此不再需要产生和处理不存在的帧。在RPS中参考帧以POC识别,这样即使图像从码流中移除或者出现丢帧的情况下也能确定输出顺序。

    I. RPS的差错恢复
    只要used−by−curr−pic−X−flag设置为1但DPB中不存在,解码器便可以检测到参考帧意外丢失发生。这时解码器可以创建一个隐藏帧,或者通过反馈渠道向编码端发送消息。


    展开全文
  • GOP结构

    万次阅读 2020-07-15 08:49:41
    GOP结构 在使用HM编码器时我们经常要使用预定义的配置文件,在配置文件里有关于GOP的相关定义,这里定义了GOP的结构和相关参数,GOP结构在视频序列中重复使用。定义中包含GOPSize行,按解码顺序每行一帧,所以Frame...

    GOP结构

    在使用HM编码器时我们经常要使用预定义的配置文件,在配置文件里有关于GOP的相关定义,这里定义了GOP的结构和相关参数,GOP结构在视频序列中重复使用。定义中包含GOPSize行,按解码顺序每行一帧,所以Frame1是解码第一帧,Frame2是解码第二帧,依次类推。而且定义了每帧的参考图像,包括当前帧的参考图像和后续帧的参考图像。编码器不会自动计算哪一帧会在将来用作参考,所以必须指定。注意在第一个GOP的IDR帧后的图像为其指定的参考图像有些可能不可用,编码器会自动处理。

    下面是LDP配置文件中GOP结构的相关定义:

     

     

    下面逐项解释每列的意思:

    Type:表示slice type,可取I、P、B。

    POC:播放顺序,取值为1到GOPSize。

    QPOffset:当前帧的最终QP等于QPOffset+QP。

    QPOffsetModelOff:线性模型的偏移值,用于调整最终QP即QPOffset+QP。

    QPOffsetModelScale:线性模型的缩放值,用于调整最终QP即QPOffset+QP。

    CbQPOffset:Cb的QP offset。

    CrQPOffset:Cr的QP offset。

    QPFactor:RDO中使用的权重。取较大的值意味着较小的码率和较低的质量。典型取值在0.3到1间。

    tcOffsetDiv2:在去方块滤波中最终的 tc_offset_div2 = LoopFilterTcOffset_div2 + tcOffsetDiv2。最终的tc_offset_div2取值为-6到6间的整数。

    betaOffsetDiv2:在去方块滤波中最终的 beta_offset_div2 = LoopFilterBetaOffset_div2+ betaOffsetDiv2。最终的tc_offset_div2取值为-6到6间的整数。

    temporal_id:表示该帧的时域层。低时域层的帧不能参考高时域层的帧。如果某帧的参考图像里有时域层大于自己的帧,则在参考时不会使用它,但是会保留它可能将来的帧会用到。

    num_ref_pics_active:L0和L1的大小,表示在编码中每个方向使用多少个参考图像。

    num_ref_pics:当前帧保存的参考图像数量。包括当前帧使用的和未来帧会使用的参考图像。

    reference_pictures:包含num_ref_pics个整数,用空格分隔开。表示参考图像相对于当前图像的POC。这个列表是有序的,以负数开始从大到小,然后是正数,从小到大,例如(-1 -3 -5 1 3)。注意,该列表不包含的图像会被丢弃,即未来的帧无法参考不在该列表中的图像。

    predict:定义语法元素inter_ref_pic_set_prediction_flag的值。0表示RPS编码时不适用帧间RPS预测,且deltaRIdx-1, deltaRPS, num_ref_idcs和Reference_idcs参数被忽略不需要传输。1表示RPS编码时使用帧间RPS预测且使用deltaRIdx-1, deltaRPS, num_ref_idcs和Reference_idcs参数。2表示RPS编码时使用帧间RPS预测且仅使用deltaRIdx-1参数,deltaRPS, num_ref_idcs和Reference_idcs参数编码器可以通过POC和refPic值自动推导,且deltaRIdx-1指向RPS。

    deltaRIdx -1:表示当前RPS和预测RPS-1索引的差值。

    deltaRPS:预测RPS的POC和当前RPS的POC差值。

    num_ref_idcs:当前RPS需要编码的ref_idcs数,其值等于预测RPS的num_ref_pics+1。

    reference_idcs:包含 num_ref_idcs个整数的用空格分隔开的列表,表示帧间RPS预测的参考索引。取值可以为0,1和2,分别表示该参考图像是当前图像的参考图像,未来图像的参考图像,不用作参考。前面num_ref_pics个值代表了预测RPS内的参考图像,最后一个值代表预测图像本身。

     

    以上图为例,每个GOP包含4帧图像,按解码顺序排列。Frame1对应POC=4的图像,它参考了图像0,所以参考图像为-4。Frame2对应POC=2的图像,它参考了图像0和4,所以参考图像为-2,2。Frame3对应POC=1的图像,它比较特别虽然只参考了图像0和2,但是还需要保存图像4用作未来图像参考,所以参考图像为-1,1,3。Frame4对应POC=3的图像,参考了图像2和4所以参考图像为-1,1。

    Frame2、Frame3、Frame4可以使用帧间RPS预测,所以这些帧的predict参数置为1。Frame2使用Frame1作为预测值所以deltaRIdx-1=0。同理,Frame3和Frame4分别使用Frame2和Frame3作为预测值,deltaRIdx-1=0。deltaRPS等于预测帧的POC减当前帧的POC,因此Frame2的deltaRPS=4-2=2,Frame3的deltaRPS=2-1=1,Frame4的deltaRPS=1-3=-2。

    Frame2的参考图像POC为0和4,所以对应的reference_idcs为1,1,第1个1表示参考RPS(Frame1的RPS)中的-4仍作为参考,第2个1表示Frame1本身也用作参考。

    Frame3的reference_idcs为1,1,1,第1个和第2个1表示参考RPS(Frame2的RPS)中的-2,2仍作为参考,最后一个1表示Frame2本身也用作参考。

    Frame4的reference_idcs为0,1,1,0,第1个0表示参考RPS(Frame3的RPS)中的-1在Frame4中不用作参考,接下来的两个1表示参考RPS(Frame3的RPS)中的1,3仍作为参考,最后一个0表示Frame3本身不用作参考。

    该GOP对应的参数如下:

     

    其中用作参考的帧通过使用较小的QPOffset来提高质量。同时非参考帧时域层设置较大值。

    FrameK的deltaRIdx-1, deltaRPS, num_ref_idcs和Reference_idcs参数可以通过其POC和FrameM的POC,num_ref_idcs,reference_pictures值生成。K表示待编码RPS的索引,M是参考RPS的索引。生成过程如下:

     

    该生成过程集成到了编码器当中,需要通过设置predict=2开启。

    感兴趣的请关注微信公众号Video Coding

     

    展开全文
  • open GOP & close GOP

    2020-10-10 09:50:11
    open GOP & close GOP FlyingPenguin关注 2018.04.27 15:41:50字数 689阅读 2,049 GOP的两种结构 MPEG的格式支持open GOP或者close GOP格式。Close GOP是指帧间的预测都是在GOP中进行的。而使用open GOP...

    open GOP & close GOP

    FlyingPenguin关注

    2018.04.27 15:41:50字数 689阅读 2,049

    GOP的两种结构

    MPEG的格式支持open GOP或者close GOP格式。Close GOP是指帧间的预测都是在GOP中进行的。而使用open GOP,后一个GOP会参考前一个GOP的信息。使用这种方式就大大降低了码率。

    Close-GOP

    By definition, closed GOPs cannot contain any frame that refers to a frame in the previous or next GOP.

    closed GOP中的帧不可以参考其前后的其它GOP.

    Closed GOPs created by Compressor always begin with an I-frame.

    Closed GOP一般以I帧开头。

    Open-GOP

    Open-GOP:informal structure. 在一个GOP里面的某一帧在解码时要依赖于前一个GOP中的某一些帧,这种GOP结构叫做Open-GOP。一般码流里面含有B帧的时候才会出现Open-GOP。

    Open GOPs are most efficient because they allow an extra B-frame in the GOP pattern.
    Open GOPs start with a B-frame that is able to look at the last P-frame from the preceding GOP as well as the first I-frame of its own GOP.
    open GOPs begin with one or more B-frames that reference the last P-frame of the previous GOP.

    Open GOP以一个或多个B帧开始,参考之前GOP的P帧和当前GOP的I帧

    Open and Closed GOPs

    Open GOPs generally provide slightly better compression than do closed GOPs of the same structure and size.
    The illustration above shows that a closed GOP contains one more P-frame than does an open GOP of the same length. Since P-frames generally require more bits than do B-frames, the open GOP achieves slightly better compression.

    同等条件下,Open GOP比closed GOP具有更高的压缩效率。

    H264中的I帧

    主要有2种I帧:I(IDR帧)、I(非IDR I帧)。

    I(IDR帧)

    NALU_type = 0x65。
    IDR帧是一种特殊的I帧,在解码IDR帧前,清空所有前后向参考缓冲区,IDR帧随后的所有帧不能参考IDR前面的任何帧
    IDR帧是视频安全的随机访问点,找到一个IDR帧可以丢弃前面所有帧数据而正确解码

    I(非IDR帧)

    NALU_type = 0x61。
    i帧是帧内预测帧,它的解码不依赖与任何其他帧

    区别

    有些解码器没有区分这两种I帧,将所有的i帧都缺省的认为是IDR帧,这样会造成解码错误。
    这两种i帧在open-GOP的结构中需要明确区分,而在close-GOP中可以视为相同

    展开全文
  • GOP update工具

    2021-02-17 13:13:59
    GOP update工具
  • update gop

    2018-12-17 10:03:46
    用于修复修改bios造成的gop失效,支持大部分a/n显卡,操作不当可能造成硬件损坏,谨慎使用
  • gop cache

    2020-11-20 20:56:22
    <div><p>Hello! Do you have plans to implement gop cache in this fork ? </p><p>该提问来源于开源项目:sergey-dryabzhinsky/nginx-rtmp-module</p></div>
  • gop overview

    2013-08-04 15:28:26
    Agenda •VGA HW •VBIOS Background •Why GOP ? •GOP Technical Concept •BIOS Consideration •Summary
  • gop2p-源码

    2021-03-10 05:55:33
    gop2p
  • GOP - Group of picture(影像集团),它指的是两个I帧之间的距离。 Reference(基准期)。 它指的是两个P帧之间的距离。 简而言之, 跨参考gop的,变open gop; 在相同的参考gop它被称为closed gop。  ...



    GOP - Group of picture(影像集团),它指的是两个I帧之间的距离。


    Reference(基准期)。  它指的是两个P帧之间的距离。

    简而言之, 跨参考gop的,变open gop;
    在相同的参考gop它被称为closed gop。

    

    版权声明:本文博主原创文章,博客,未经同意不得转载。

    转载于:https://www.cnblogs.com/lcchuguo/p/4842164.html

    展开全文
  • GOP-crx插件

    2021-04-06 20:57:46
    语言:English 将所有图像交换到2016年选举的GOP候选图片的图片 在您的生活中不想有点乐趣吗?
  • Close gop与Open Gop

    2017-10-09 14:40:00
    GOP和Reference  在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下图3.1所示。  ● I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码 ● P帧即Predictive-...
  • iemgui GOP broken

    2020-12-27 12:14:14
    <div><p>When loading a patch with iemguis in a GOP, they are not visible until you open the subwindow and close it again. Then they disappear if the window is minimized and maximized again <p>Test ...
  • GOP Overview

    千次阅读 2013-08-04 15:32:00
    Agenda •VGA HW •VBIOS Background •Why GOP ? •GOP Technical Concept •BIOS Consideration •Summary GOP Overview
  • gop_source_config-源码

    2021-02-07 21:14:43
    gop_source_config
  • GOP讲解

    2013-04-24 16:18:59
    GOP 两个IDR帧之间的距离,x264中和GOP中相关的参数有两个,其一是-keyint,控制的是GOP中最大可能距离,另一个是-min-keyint,控制的是允许最小的GOP距离 IDR 和IDR有关的参数除了上面的GOP设定的两个基本参数...
  • 视频编码GOP

    2019-04-08 22:38:00
    GOP group of pictures GOP 指的就是两个I帧之间的间隔. 比较说GOP为120,如果是720 p60 的话,那就是2s一次I帧. 在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下图所示。 1. I帧即Intra-coded picture(帧...
  • 视频编码之GOP

    2021-03-11 09:35:13
    GOP(Group of Pictures)策略影响编码质量,所谓GOP,意思是画面组,一个GOP就是一组连续的画面。GOP是序列中的一个图片集,用来辅助随机存取。GOP的第一个图像必须为I帧,这样就能保证GOP不需要参考其他图像,...
  • kaldi-gop

    2020-09-22 20:53:55
    shell脚本位置kaldi-master/egs/gop/s5/run.sh 跑完log: feat-to-len scp:../s1/data/test-1000_hires/feats.scp ark,t:data/test_10short/tmp.len utils/subset_data_dir.sh: reducing #utt from 1000 to 10 ...
  • rav1e-by-gop 介绍 rav1e-by-gop是一种通过将rav1e编码分割成GOP(在关键帧点)来多线程编码的工具。 这允许多线程处理,而不会降低图块的质量。 免责声明:此工具通过在整个编码步骤中仅打开一个读取器来尝试提高...
  • Open gop and Closed gop of H264

    千次阅读 2014-04-14 13:55:08
    In temporal order : ...closed gop : PbbbPbbbPI open gop : PbbbPbbbbI In coding order : Code: closed gop : PPbbbPbbbI open gop : PPbbbIbbbb Note how, in coding order (ie, in the b
  • 关于GOP, open GOP, close GOP

    千次阅读 2006-09-22 13:02:00
    from: http://www.videohelp.comGOP: Group Of PicturesA Group Of Pictures (GOP) consists of all the pictures that follow a GOP header before another GOP header.The GOP layer allows random access b
  • 老显卡增加gop模块 1、用gpuz下载显卡固件 2、GOPupd.bat 3、按照菜单选择
  • GOP是一个项目管理工具,用于从全局GOPATH中构建golang应用程序。 实际上,gop将保留全局GOPATH和每个项目GOPATH。 但这意味着您的项目将无法实现。 当然,GOP本身就是可实现的。 GOP将所有依赖项从全局GOPATH复制...
  • fix iem gop again

    2020-12-26 04:45:10
    <p>Closes #477, that was happening again, when loadbang-setting a receive/send name of an iemgui located inside of a GOP, itself contained into a non-GOP patch.</p><p>该提问来源于开源项目:...
  • <p>Change --irefresh-type from 1 (open gop) to 2 (closed gop) to improve seekability in all major web browsers and various media players. <p>The default --irefresh-type of 1 (open gop) results in ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,613
精华内容 645
关键字:

GOP