Intel Media SDK H264 encoder GOP setting

1 I帧,P帧,B帧,IDR帧,NAL单元

I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物;

P frame: 前向预测编码帧,又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame: 双向预测内插编码帧,又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

IDR frame:I和IDR帧都是使用帧内预测的,在编码和解码中为了方便,要首个I帧和其他I帧区别开,把第一个I帧叫IDR,这样就方便控制编码和解码流程,所以IDR帧一定是I帧,但I帧不一定是IDR帧;IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。

NAL单元:全称Network Abstract Layer,即网络抽象层,在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧。

2 GOP(Group of pictures)

所谓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。

3 H264 encoder GOP setting

Intel Media SDK Encoding Sample 用法如下

sample_encode.exe h264 -i video.yuv -w 640 -h 480 -o out.mkv -hw -d3d -mkv -b 1000 -f 30

sample_encode.exe h264 -i video.yuv -w 640 -h 480 -o out.mp4 -hw -d3d -mux -b 1000 -f 30

编码参数包括:输入格式、帧速率、输出比特率、输入视频流宽高、输出视频流宽高等等。这里我们发现,比没有设置I、B、P帧信息的相关参数,也就是说Demo中并没有开发这样的参数设置。通过查看Intel Media SDK的Guide,发现Intel有提供这样的参数让我们可以调整I、B、P的构成,具体就是GopOptFlag:
GopOptFlag
Description
The GopOptFlag enumerator itemizes special properties in the GOP (Group of Pictures) sequence.
Name/Description
MFX_GOP_CLOSED
B-frames of the first B-interval can never reference the previous GOP
MFX_GOP_STRICT
The encoder must strictly follow the given GOP structure as defined by parameter GopPicSize,
GopRefDist etc in the mfxVideoParam structure. Otherwise, the encoder can adapt the GOP structure
for better efficiency, whose range is constrained by parameter GopPicSize and GopRefDist etc

而GopOptFlag所在的位置是:
mfxVideoParam -> mfxInfoMFX -> GopOptFlag
此外还需要利用到的相关参数可以参考mfxInfoMFX的说明,主要包括:

mfxU16 GopPicSize;
mfxU16 GopRefDist;
mfxU16 GopOptFlag;
mfxU16 IdrInterval;

GopPicSize
Number of pictures within the current GOP (Group of Pictures); if GopPicSize=0, then the GOP size is unspecified.
If GopPicSize=1, only I-frames are used.
当前GOP中画面的个数,若GopPicSize=0,则认为GOP尺寸未指定,若GopPicSize=1,则将只使用I帧

GopRefDist
Distance between I- or P- key frames; if it is zero, the GOP structure is unspecified. Note:
If GopRefDist = 1, there are no B-frames used.
I或P关键帧之间的距离;若为零,则认为GOP结构未指定,若GopRefDist=1,则将不使用B帧

GopOptFlag
ORs of the GopOptFlag enumerator indicate the additional flags for the GOP specification;

IdrInterval
the sequence header before every Nth I-frame. If IdrInterval=0(default), SDK inserts the sequence header once at the beginning of the stream
对于H264,IdrInterval指定了IDR帧的间隔,单位为I帧;若IdrInterval=0,则每个I帧均为IDR帧。若IdrInterval=1,则每隔一个I帧为IDR帧,以此类推。对于
MPEG2, IdrInterval定义了序列头间隔,单位为I帧,若IdrInterval=N,SDK将在每第N个I帧之前插入序列头;若IdrInterval=0(默认),SDK将在流开头一次 性插入序列头。

这里写图片描述

图 1

这里写图片描述

图 2

这里写图片描述

图 3

以上图1和图2中红色表示I帧蓝色表示P帧绿色表示B帧,其中图2和图3是同一个H264文件,图3可体现IdrInterval = 1的作用,即两个Idr帧间隔一个I帧,所以也可以把IDR帧看做是SPS和PPS后面第一个I帧!

参考:

http://www.cnblogs.com/cslunatic/p/3565984.html

http://en.wikipedia.org/wiki/Group_of_pictures

http://blog.csdn.net/jtujtujtu/article/details/6565287

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信用卡申请被拒原因分析

第一种情况:基本资料的问题1、年龄未达到银行要求,或超出银行要求;2、申请表签名与证件不符或者申请表签名与规定不符;3、申请人身份证件类型不符规定;4、申请人证件失效或过期;5、申请表填写潦草&#xff…

按键控制实验

按键控制实验 #include "key.h"void KEY_Init(void) {EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK 1;// 开启GPIO时钟//KEY端口配置GpioCtrlRegs.GPAMUX1.bit.GPIO120;GpioCtrlRegs.GPADIR.bit.GPIO120;GpioCtrlRegs.GPAPUD.bit.GPIO120;GpioCtrlRegs.GPAMUX1.bit.…

贷款能否成功,这4个人说了算

贷款谁都希望一枪命中,顺顺利利的拿到钱,可是在贷款的过程中参与的人员较多,稍微出现一些差错都可能会影响贷款的审批事实上,在贷款的过程中,你的贷款能否成功,是由这四个人决定的。一、信贷经理信贷经理是…

哪些房产不能抵押做贷款?

我们都知道,房产抵押贷款相对要求较低,而且贷款利息低,额度也高,但并不是所有的房产都是可以抵押的,下面我们就来盘点下,哪些房产不能作为抵押进行贷款.1、小产权房小产权房,又叫自建房&#xf…

直流电机实验

直流电机实验 #ifndef DC_MOTOR_H_ #define DC_MOTOR_H_#include "DSP2833x_Device.h" // DSP2833x 头文件 #include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件#define DC_MOTOR_INA_SETH (GpioDataRegs.GPASET.bit.GPIO21) #define DC_M…

什么样的人贷款更容易?

有过贷款经历的朋友应该知道,贷款并不是件简单的事情,有时候即使愿意支付更多的利息,仍然不能贷到款,所以大家可能会有疑惑,到底什么样的人最好贷款呢?通常来说贷款公司更偏向于公务员、事业单位、上市公司…

为什么别人有微粒贷,而你没有?

大家都知道,微粒贷纯线上申请,500-30万额度,利息低至日息0.045%,手续简单方便,额度高,因此想借钱的朋友都希望自己有微粒贷,但是截至目前为止,只有几千万人有微粒贷,大部…

步进电机实验

步进电机实验 #include "step_motor.h"void Step_Motor_Init(void) {EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK 1;// 开启GPIO时钟//Step_MOTOR端口配置GpioCtrlRegs.GPAMUX1.bit.GPIO20;GpioCtrlRegs.GPADIR.bit.GPIO21;GpioCtrlRegs.GPAMUX1.bit.GPIO30;GpioCt…

常用IP核

前言 记录自己用到的模块,随时补充。 主要分类: 一、常用模块 1-FIFO FIFO分为两种,一是输入输出时钟相同(Common clock)的 fifo ;二是输入输出时钟不相同(Independent clocks)FIFO常用于&#…

F28335中断系统

F28335中断系统 DSP中断管理分为3个层次:外设级,PIE级,CPU级

notepad++与ISE/Vivado关联

转自:http://www.cnblogs.com/ninghechuan/p/6172237.html 1、notepad与vivado关联 打开vivado软件,选择菜单栏“Tools——>Options…”,在弹出的对话框中,选择General选项卡,如图1所示。 拉动右边的滚动条到Text E…

花呗不还会怎样?

现如今花呗以其短平快俘获很多网购朋友的心,随借随还,确实很好用,但是问题来,如果花呗忘记还了,或者不还会有什么后果呢?先来看下一个网友的真实经历:3个月前,我拖欠了花呗2000多块钱…

外部中断实验

外部中断实验 #include "exti.h" #include "leds.h" #include "key.h"void EXTI1_Init(void) {EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK 1; // GPIO input clockEDIS;EALLOW;//KEY端口配置GpioCtrlRegs.GPAMUX1.bit.GPIO120;GpioCtrlReg…

有法院被执行人记录还能贷款吗?

贷款除了看个人的资质之外,还会查看借款人的一些社会信息,比如法院被执行人记录。通常来说,有法院被执行记录的人是很难通过贷款申请的。1、什么叫法院被执行人记录?被执行人指的是通过法院判决,需要承担对应执行义务的…

如何找到安全的贷款机构

贷款谁都希望找一家安全可靠的机构,不希望碰到骗子或不正规的公司,但是对于很多缺乏贷款经验的朋友来说,他们并不知道哪些贷款机构是正规的,也不知道哪些贷款是安全的,下面我们就来给大家说下如何找一个正规安全的贷款…

梅森增益公式

梅森增益公式 式中 P——从源节点到阱节点的传递函数(或总增益); n——从源节点到阱节点的前向通路总数; pk——从源节点到阱节点的第条前向通路总增益; △——流图特征式 式中

为什么销售员贷款比较难?

销售员其实是一个相对高收入的群体,按道理来说去贷款应该是比较好下的,但是在实际的贷款审批过程中,销售人员去贷款要么比较难下,要么就是额度比较低。为什么会这样呢?这其实跟销售员的工作性质有关。第一、销售员工作…

老公贷款还不上,妻子有偿还责任吗?

如果贷款不还,可能会涉及到夫妻共同还款的情况,也就是说,如果一方的贷款是用于家庭所需或者双方有共同利益的项目,一旦贷款还不上,那夫妻中的另一方就需要承担偿还责任,这就是我们通常所说的夫妻共同负债。…

银行流水你真的会看吗?

(1)银行流水的的构成每个银行流水的构成要素可能有所差距,但是总整体上来说,银行流水的构成基本是差不多的。正常的银行流水一般都会包含以下几个构成因素:账号、户名、交易日期、对方帐号、对方户名、交易代码&#x…