FFMPEG读取关键帧

发布于 2024-11-15 03:20:12 字数 549 浏览 4 评论 0原文

我正在尝试编写一个 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 中有一个简单的布尔值。如果是关键帧则为 True

I am trying to write a c++ program that would read key frames from the video file using ffmpeg.
So far I managed to get all the frames using av_read_frame where you sequentially read
frame by frame.

But I having some problems using av_seek_frame which (if I am correct) supposed to do the trick for keyframes.

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

I have FormatContext but what are other correct arguments to sequentially get only all keyframes ?

Is there other function that I can use instead?

Thanks

EDIT: In av_read_frame i am getting AVPacket, which I can use to get frame data, but how I can get packet by using av_seek_frame ?

SOLUTION: OK there is a simple boolean value in AVFrame->key_frame. True if its a keyframe

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北方的韩爷 2024-11-22 03:20:12

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

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

查看该函数的文档以获取更多信息

av_seek_frame has the ability to seek to a certain timestamp in a video file. It takes 4 parameters: a pointer to the AVFormatContext, a stream index, the timestamp to seek to and flags to select the direction and seeking mode.

The function will then seek to the first key frame before the given timestamp.

Check the documentation of that function for more information.

勿忘初心 2024-11-22 03:20:12

对于未来的任何人,我注意到 AVFrame->key_frame 有时不可靠(缺少一些关键帧)。

AVFrame->key_frame || 的条件AVFrame->pict_type == AVPictureType::AV_PICTURE_TYPE_I 对我来说效果更好。

To anyone here in the future, I've noticed AVFrame->key_frame to be unreliable at times (missing some keyframes).

A condition of AVFrame->key_frame || AVFrame->pict_type == AVPictureType::AV_PICTURE_TYPE_I has worked better for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文