2009-09-25 91 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