1
我开始处理ffmpeg API(不是命令提示符)来构建一个电影编辑器,并且我试图找到一个关于如何从视频中提取关键帧的好教程,但是我没有找到它。ffmpeg代码(API)
- 有人以前做过,可以在这里写代码?
- 有人有关于ffmpeg API的很好的教程?
谢谢!
我开始处理ffmpeg API(不是命令提示符)来构建一个电影编辑器,并且我试图找到一个关于如何从视频中提取关键帧的好教程,但是我没有找到它。ffmpeg代码(API)
谢谢!
在你的多路分解循环,为您在AVPacket::flags
的AV_PKT_FLAG_KEY
标志调用av_read_frame()
你AVFormatContext
并确认读取数据包是从输入的正确流之后。例如:
AVPacket packet;
if (av_read_frame(pFormatCtx, &packet) < 0) {
break;
}
if (videoStream/* e.g. 0 or 1 */ == packet.stream_index) {
if (packet.flags & AV_PKT_FLAG_KEY) { //do something
需要注意的是,在我的经验,你有时需要解码到期望的帧之前2个关键帧,以产生良好的画面。
查看ffmpeg发行版中的doc/examples
目录中的某些API使用示例,例如, demuxing_decoding.c
。如果您勇敢并且/或者拥有良好的IDE,您也可以参考ffmpeg.c
(着名CLI的来源)。
如果您解码N个帧并且没有找到任何,请确保您停止查找关键帧。有很少编码的电影只有一个关键帧,所以在查找前五个关键帧时,最终可能会看完整部电影。 –