2015-09-25 97 views
3

我有一個關於(GOP)的MPEG4視頻圖像組的最(用於MPEG4第2部分和H.264兩種)兩個問題:GOP結構通過FFmpeg的

  1. 我怎樣才能提取GOP結構和使用FFmpeg的視頻序列大小?我知道AVPicture結構的av_get_picture_type_char函數爲每一幀生成圖片類型,但我想知道是否有更直接的方法來獲取GOP信息?

  2. 如何檢測序列是否有開放的GOP或閉合的GOP,即是否允許來自一個GOP的B幀引用相鄰GOP中的I和P幀?

回答

3

這些都不是直接導出在ffmpeg中,所以你必須自己弄清楚這些事情。所以1的簡短答案是「否」。如果您解析幀(您不需要解碼它們)並獲取幀類型,則應該能夠在AVPacket.pos中識別文件中的位置(偏移量,以字節爲單位)。對於序列中的每個I幀,搜索後面的數據包並注意AVPacketposAVPacketpts。如果B(pos)> I(pos)但B(pts)< I(磅),則已打開GOP,否則關閉GOP。如果你想更精確一點,可以找一些方法從h264解析器中導出POC,這與時間戳成正比。

解析循環只是av_read_frame()。

+0

謝謝。如果B(pos)> I(pos)但B(pts) chronosynclastic

+0

PTS = POC。如果在I幀之後有一個幀(按比特流/編碼順序),但在它之前有一個POC/pts,它幾乎普遍意味着它將該I用作參考,從而打開GOP。官方確認的方法是解析頭文件中的參考列表並確保我在B的參考清單中,但是我懷疑你想走得那麼遠(除非這是學術性的)。 –