我正在GNU/Linux上开发C语言的视频服务器,并且我使用ffmpeg来管理每个视频文件的数据。所以,我打开文件,获取有关其容器的所有信息,然后对其编解码器执行相同的操作,并逐一读取帧。识别视频容器中的I帧
不幸的是,ffmpeg和更精确的avcodec没有很好的记录。我需要知道一个帧是I帧还是B帧才能保留一条记录,所以我该怎么做?
在此先感谢。
我正在GNU/Linux上开发C语言的视频服务器,并且我使用ffmpeg来管理每个视频文件的数据。所以,我打开文件,获取有关其容器的所有信息,然后对其编解码器执行相同的操作,并逐一读取帧。识别视频容器中的I帧
不幸的是,ffmpeg和更精确的avcodec没有很好的记录。我需要知道一个帧是I帧还是B帧才能保留一条记录,所以我该怎么做?
在此先感谢。
画面类型是由struct AVFrame
的pict_type
字段给出。您在FFMPEG中定义了4种类型。对于I帧,pict_type
设置为FF_I_TYPE
。
例如,我的调试代码这给我的信中调试消息设置:
/* _avframe is struct AVFrame* */
switch(_avframe->pict_type)
{
case FF_I_TYPE:
return "I";
break;
case FF_P_TYPE:
return "P";
break;
case FF_S_TYPE:
return "S";
break;
case FF_B_TYPE:
return "B";
break;
}
Manuel,
您是否尝试过FF探针?它是一款多媒体流分析器,可让您查看每个帧的类型。你可以从SourceForget.net下载它。为了编译它,你需要Gnu autoconf,一个C编译器和一个FFmpeg的工作安装。让我知道这是否有帮助。
谢谢,我会看看源代码。 – 2009-09-26 10:49:11
谢谢!这*完全是我需要的。目前我一直在使用关键帧,但识别所有类型非常有用。 – 2009-10-02 10:19:03
不客气;)祝你的代码好运... – neuro 2009-10-05 07:37:30