2015-09-25 70 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的参考清单中,但是我怀疑你想走得那么远(除非这是学术性的)。 –