FFMPEG读取关键帧
我正在尝试编写一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
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.
对于未来的任何人,我注意到
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.