2009-09-25 89 views
1

我正在GNU/Linux上开发C语言的视频服务器,并且我使用ffmpeg来管理每个视频文件的数据。所以,我打开文件,获取有关其容器的所有信息,然后对其编解码器执行相同的操作,并逐一读取帧。识别视频容器中的I帧

不幸的是,ffmpeg和更精确的avcodec没有很好的记录。我需要知道一个帧是I帧还是B帧才能保留一条记录,所以我该怎么做?

在此先感谢。

回答

1

画面类型是由struct AVFramepict_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; 

} 
+0

谢谢!这*完全是我需要的。目前我一直在使用关键帧,但识别所有类型非常有用。 – 2009-10-02 10:19:03

+0

不客气;)祝你的代码好运... – neuro 2009-10-05 07:37:30

0

Manuel,

您是否尝试过FF探针?它是一款多媒体流分析器,可让您查看每个帧的类型。你可以从SourceForget.net下载它。为了编译它,你需要Gnu autoconf,一个C编译器和一个FFmpeg的工作安装。让我知道这是否有帮助。

+0

谢谢,我会看看源代码。 – 2009-09-26 10:49:11