我正在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