2013-05-05 64 views
3

我是一種類型的視頻流,大約是靜態的30fps視頻(如靜態圖片)。視頻中有移動時,我只會從流中獲取更新。因此,如果視頻靜止5分鐘,我只能將這5分鐘的數據作爲單幀數據。然後,如果視頻流上有5秒的移動,我也會獲得這些幀的每個數據(例如,大約150幀)。如果還剩下5分鐘,那麼我將在整個時間內獲得1個單幀數據。所以視頻將是10分鐘和5秒,但是我會在那段時間獲得152幀數據。如何對一系列快照中的視頻進行編碼?

我試圖從這個數據創建一個實時視頻文件,但是當我編碼它時,視頻的第一個和最後5分鐘只作爲一個單獨的幀存在,所以不是5分鐘的靜止視頻,而是直接到2秒我有那實際實時框架。

從這些信息中創建實際的全長/實時視頻的最佳方法是什麼?我目前正在使用C++。

+0

你問一個圖書館使用?或者你已經有一個想法? – flup 2013-05-05 19:51:50

+0

任何C++庫都可以。無論是最常見和最簡單的。我對這種方法更感興趣。 – NotDan 2013-05-05 20:59:50

回答

0

你沒有提及任何有關編解碼器或工具,但你暗示你已經在做編碼。

大多數視頻編碼器需要固定的幀速率。所以簡單的解決辦法是繼續餵它同一幀,直到已經過了足夠的「幀時間」,才能到達下一組。

下面是一些僞代碼:

frames_per_second = 30; 
encoder = CreateEncoder(frames_per_second, width, height); 
milliseconds_per_frame = 1000.0/fps; 
timestamp = frameset[0].timestamp; 
x = 0; 

while (x < frameset.count) 
{ 
    AddNextFrameToEncoder(encoder, frameset[x].framedata); 
    timestamp += milliseconds_per_frame; 

    if ((x < frameset.count-1) && (timestamp >= frameset[x+1].timestamp)) 
    { 
     x++; 
    } 
    // else - keep repeating the same source frame until "timestamp" is incremented to the timestamp of the next still 
}