我正在尝试编写一个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中有一个简单的布尔值。如果是关键帧,则为真
答案 0 :(得分:2)
av_seek_frame 能够在视频文件中寻找特定时间戳。它需要4个参数:指向 AVFormatContext 的指针,流索引,要搜索的时间戳和标记选择方向和寻找模式。
然后,该函数将在给定时间戳之前搜索第一个关键帧。
Check the documentation of that function for more information