2013-04-23 85 views
4

我用這個循環中,FFMPEG讀取視頻流幀讀出特定的視頻幀該幀能夠讀取特定的幀(按幀號)。它是如何完成的?使用FFMPEG API

+2

這裏有用的答案 - http://stackoverflow.com/q/504792/2065121 – 2013-04-23 07:43:45

回答

6

你可能想看看

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

以上API將尋求在給定時間戳的關鍵幀。尋求後你可以閱讀框架。另外下面的教程解釋位置和時間戳之間的轉換。

http://dranger.com/ffmpeg/tutorial07.html

+0

時間戳以幀爲單位測量? – 2013-04-23 07:46:40

+0

時間戳依賴於流的time_base – Pete 2013-04-23 07:54:38

+0

是的av_seek_frame似乎是正確的。如果您爲基於幀的seek添加整個設置,我會將您的答案標記爲正確。我發現如何在此處執行此操作stackoverflow.com/q/504792/2065121(最後一個答案),但只是爲了讓其他人看到它是如何完成的。 :) – 2013-04-23 09:17:13

2

由於在視頻大多數幀依賴於先前幀和下一幀,一般來說,在視頻訪問隨機幀並不簡單。然而,一些幀,獨立於任何其他幀編碼,並且在整個視頻中定期發生。這些幀被稱爲I幀。訪問這些幀直接通過尋求。

如果你想在視頻中爲「隨機」訪問任何框架,那麼你必須:

  1. 尋求到前一個I幀
  2. 閱讀框架逐一直到你到達框架你想要的數字

你已經得到了第二點的代碼,所以你所需要做的就是照顧第一點,你就完成了。以下是人們經常提到的Dranger教程的updated version--它可能有幫助。