【问题标题】:FFMPEG reading keyframesFFMPEG 读取关键帧
【发布时间】:2011-06-17 06:28:09
【问题描述】:

我正在尝试编写一个 c++ 程序,该程序将使用 ffmpeg 从视频文件中读取关键帧。 到目前为止,我设法使用您按顺序阅读的av_read_frame 获取所有帧 一帧一帧。

但是我在使用av_seek_frame 时遇到了一些问题(如果我是正确的)应该可以解决关键帧问题。

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);

我有FormatContext,但还有什么其他正确的参数可以顺序获取所有关键帧?

我可以使用其他功能吗?

谢谢

编辑:在av_read_frame 中,我得到了 AVPacket,我可以用它来获取帧数据,但是如何使用 av_seek_frame 来获取数据包?

解决方案:好的,在 AVFrame->key_frame 中有一个简单的布尔值。如果是关键帧则为真

【问题讨论】:

  • av_seek_frame() 到底有什么问题?

标签: c++ ffmpeg keyframe


【解决方案1】:

av_seek_frame 具有寻找视频文件中某个时间戳的能力。它需要 4 个参数:指向 AVFormatContext 的指针、流索引、要查找的 时间戳标志选择方向和寻找模式。

然后该函数将寻找给定时间戳之前的第一个关键帧。

Check the documentation of that function for more information.

【讨论】:

  • 根据我的经验,它会在给定的时间戳之后寻找第一个关键帧。请记住,libav 在 DTS 中搜索,而不是在 PTS 中搜索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 2012-12-16
相关资源
最近更新 更多