2011-06-11 69 views
3

我想寫一個C++程序,它將使用ffmpeg從視頻文件中讀取關鍵幀。 到目前爲止,我設法使用av_read_frame所有的幀,你順序閱讀 逐幀。FFMPEG閱讀關鍵幀

但我有一些問題,使用av_seek_frame哪些(如果我是正確的)應該做關鍵幀的伎倆。

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags); 

我有FormatContext但什麼都別正確的參數順序只得到所有關鍵幀?

是否還有其他功能可以使用?

感謝

編輯:av_read_frame我得到AVPacket,我可以用得到的幀數據,但我如何通過使用函數av_seek_frame得到包?

解決方案:確定在AVFrame-> key_frame中有一個簡單的布爾值。如果其關鍵幀爲真

+0

你正在用'av_seek_frame()'完成什麼問題? – karlphillip 2011-06-11 14:25:23

回答

2

av_seek_frame有能力尋求視頻文件中的某個時間戳。它需要4個參數:一個指針到AVFormatContext,一個流索引,所述時間戳尋求和標誌選擇方向並尋求模式。

該功能將在給定的時間戳之前尋找第一個關鍵幀。

Check the documentation of that function for more information

+1

根據我的經驗,它會在給定的時間戳之後尋找第一個關鍵幀。我們應該記住,libav是在DTS中尋找的,而不是PTS。 – 2013-03-27 11:54:37