2014-06-22 42 views
1

我开始处理ffmpeg API(不是命令提示符)来构建一个电影编辑器,并且我试图找到一个关于如何从视频中提取关键帧的好教程,但是我没有找到它。ffmpeg代码(API)

  1. 有人以前做过,可以在这里写代码?
  2. 有人有关于ffmpeg API的很好的教程?

谢谢!

回答

1

在你的多路分解循环,为您在AVPacket::flagsAV_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的来源)。

+0

如果您解码N个帧并且没有找到任何,请确保您停止查找关键帧。有很少编码的电影只有一个关键帧,所以在查找前五个关键帧时,最终可能会看完整部电影。 –