日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Intel Media SDK H264 encoder GOP setting

發(fā)布時(shí)間:2023/12/15 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Intel Media SDK H264 encoder GOP setting 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 I幀,P幀,B幀,IDR幀,NAL單元

I frame:幀內(nèi)編碼幀,又稱intra picture,I 幀通常是每個(gè) GOP(MPEG 所使用的一種視頻壓縮技術(shù))的第一個(gè)幀,經(jīng)過(guò)適度地壓縮,做為隨機(jī)訪問(wèn)的參考點(diǎn),可以當(dāng)成圖象。I幀可以看成是一個(gè)圖像經(jīng)過(guò)壓縮后的產(chǎn)物;

P frame: 前向預(yù)測(cè)編碼幀,又稱predictive-frame,通過(guò)充分將低于圖像序列中前面已編碼幀的時(shí)間冗余信息來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫預(yù)測(cè)幀;

B frame: 雙向預(yù)測(cè)內(nèi)插編碼幀,又稱bi-directional interpolated prediction frame,既考慮與源圖像序列前面已編碼幀,也顧及源圖像序列后面已編碼幀之間的時(shí)間冗余信息來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫雙向預(yù)測(cè)幀;

IDR frame:I和IDR幀都是使用幀內(nèi)預(yù)測(cè)的,在編碼和解碼中為了方便,要首個(gè)I幀和其他I幀區(qū)別開(kāi),把第一個(gè)I幀叫IDR,這樣就方便控制編碼和解碼流程,所以IDR幀一定是I幀,但I(xiàn)幀不一定是IDR幀;IDR幀的作用是立刻刷新,使錯(cuò)誤不致傳播,從IDR幀開(kāi)始,重新算一個(gè)新的序列開(kāi)始編碼。

NAL單元:全稱Network Abstract Layer,即網(wǎng)絡(luò)抽象層,在H.264/AVC視頻編碼標(biāo)準(zhǔn)中,整個(gè)系統(tǒng)框架被分為了兩個(gè)層面:視頻編碼層面(VCL)和網(wǎng)絡(luò)抽象層面(NAL)。其中,前者負(fù)責(zé)有效表示視頻數(shù)據(jù)的內(nèi)容,而后者則負(fù)責(zé)格式化數(shù)據(jù)并提供頭信息,以保證數(shù)據(jù)適合各種信道和存儲(chǔ)介質(zhì)上的傳輸。因此我們平時(shí)的每幀數(shù)據(jù)就是一個(gè)NAL單元(SPS與PPS除外)。在實(shí)際的H264數(shù)據(jù)幀中,往往幀前面帶有00 00 00 01 或 00 00 01分隔符,一般來(lái)說(shuō)編碼器編出的首幀數(shù)據(jù)為PPS與SPS,接著為I幀。

2 GOP(Group of pictures)

所謂GOP,意思是畫(huà)面組,一個(gè)GOP就是一組連續(xù)的畫(huà)面。GOP結(jié)構(gòu)一般涉及兩個(gè)數(shù)字,例如,M=3,N=12。第一個(gè)數(shù)字M指定I幀和P幀之間的距離,第二個(gè)數(shù)字N指定兩個(gè)I幀之間的距離:及畫(huà)面組的大小。對(duì)于上面的例子M=3,N=12,GOP結(jié)構(gòu)表示為:IBBPBBPBBPBBI。在一個(gè)GOP內(nèi)I frame的解碼不依賴于任何的其它幀,而p frame的解碼則依賴于其前面的I frame或者P frame,B frame的解碼則依賴于其前的最近的一個(gè)I frame或者P frame 及其后的最近的一個(gè)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

編碼參數(shù)包括:輸入格式、幀速率、輸出比特率、輸入視頻流寬高、輸出視頻流寬高等等。這里我們發(fā)現(xiàn),比沒(méi)有設(shè)置I、B、P幀信息的相關(guān)參數(shù),也就是說(shuō)Demo中并沒(méi)有開(kāi)發(fā)這樣的參數(shù)設(shè)置。通過(guò)查看Intel Media SDK的Guide,發(fā)現(xiàn)Intel有提供這樣的參數(shù)讓我們可以調(diào)整I、B、P的構(gòu)成,具體就是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
此外還需要利用到的相關(guān)參數(shù)可以參考mfxInfoMFX的說(shuō)明,主要包括:

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.
當(dāng)前GOP中畫(huà)面的個(gè)數(shù),若GopPicSize=0,則認(rèn)為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關(guān)鍵幀之間的距離;若為零,則認(rèn)為GOP結(jié)構(gòu)未指定,若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
對(duì)于H264,IdrInterval指定了IDR幀的間隔,單位為I幀;若IdrInterval=0,則每個(gè)I幀均為IDR幀。若IdrInterval=1,則每隔一個(gè)I幀為IDR幀,以此類推。對(duì)于
MPEG2, IdrInterval定義了序列頭間隔,單位為I幀,若IdrInterval=N,SDK將在每第N個(gè)I幀之前插入序列頭;若IdrInterval=0(默認(rèn)),SDK將在流開(kāi)頭一次 性插入序列頭。

圖 1

圖 2

圖 3

以上圖1和圖2中紅色表示I幀藍(lán)色表示P幀綠色表示B幀,其中圖2和圖3是同一個(gè)H264文件,圖3可體現(xiàn)IdrInterval = 1的作用,即兩個(gè)Idr幀間隔一個(gè)I幀,所以也可以把IDR幀看做是SPS和PPS后面第一個(gè)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

總結(jié)

以上是生活随笔為你收集整理的Intel Media SDK H264 encoder GOP setting的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。