2014-06-22 43 views
1

我開始處理ffmpeg API(不是命令提示符)來構建一個電影編輯器,並且我試圖找到一個關於如何從視頻中提取關鍵幀的好教程,但是我沒有找到它。ffmpeg代碼(API)

  1. 有人以前做過,可以在這裏寫代碼?
  2. 有人有關於ffmpeg API的很好的教程?

謝謝!

回答

1

在你的多路分解循環,爲您在AVPacket::flagsAV_PKT_FLAG_KEY標誌調用av_read_frame()AVFormatContext並確認讀取數據包是從輸入的正確流之後。例如:

AVPacket packet; 

if (av_read_frame(pFormatCtx, &packet) < 0) { 
    break; 
} 

if (videoStream/* e.g. 0 or 1 */ == packet.stream_index) { 
    if (packet.flags & AV_PKT_FLAG_KEY) { //do something 

需要注意的是,在我的經驗,你有時需要解碼到期望的幀之前2個關鍵幀,以產生良好的畫面。

查看ffmpeg發行版中的doc/examples目錄中的某些API使用示例,例如, demuxing_decoding.c。如果您勇敢並且/或者擁有良好的IDE,您也可以參考ffmpeg.c(着名CLI的來源)。

+0

如果您解碼N個幀並且沒有找到任何,請確保您停止查找關鍵幀。有很少編碼的電影只有一個關鍵幀,所以在查找前五個關鍵幀時,最終可能會看完整部電影。 –