通过 FFmpeg 的 GOP 结构

chr*_*tic 5 ffmpeg h.264 mpeg-4

我有两个关于 MPEG4 视频中的图片组 (GOP) 的问题(对于 MPEG4 Part2 和 H.264):

  1. 如何使用 FFmpeg 提取视频序列的 GOP 结构和大小?我知道av_get_picture_type_char该结构体的功能AVPicture会产生每一帧的图片类型,但我想知道是否有更直接的方法来获取GOP信息?

  2. 如何检测序列是否具有开放 GOP 或封闭 GOP,即是否允许一个 GOP 中的 B 帧引用相邻 GOP 中的 I 和 P 帧?

Ron*_*tje 6

这些都不是直接导出到 ffmpeg 中的,因此您必须自己解决这些问题。所以 1 的简短答案是“否”。如果您解析帧(不需要解码它们)并获取帧类型,您应该能够在 AVPacket.pos 中识别文件中的位置(偏移量,以字节为单位)。对于序列中的每个 I 帧,搜索其后面的数据包并记下AVPacketposAVPacket。如果 B(pos) > I(pos) 但 B(pts) < I(pts),则为开放 GOP,否则为封闭 GOP。如果你想更精确,找到一些方法从 h264 解析器导出 POC,它与时间戳成正比。

解析循环就是av_read_frame ()。