簡體   English   中英

如何從一系列快照中編碼視頻?

[英]How to encode a video from a series of snapshots?

我是一種視頻流的接口,大約是30fps的視頻,大部分是靜態的(如靜止圖像)。 當視頻中有移動時,我只從流中獲得更新。 因此,如果視頻是靜態的5分鍾,我只將這5分鍾的數據作為單幀數據獲取。 然后,如果視頻流上有移動5秒鍾,我也會得到每個幀的數據(例如,大約150幀)。 然后,如果它還有5分鍾,那么整個時間我將得到1個單幀的數據。 所以視頻將是10分5秒,但我會得到152幀的數據。

我正在嘗試從這些數據創建一個實時視頻文件,但是當我對其進行編碼時,視頻的第一個和最后一個5分鍾僅作為一個幀存在,因此不是5分鍾的靜態視頻,而是直接進入2秒我有那個實際的實時幀。

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

您沒有提及有關編解碼器或工具的任何內容,但您暗示您已經在進行編碼。

大多數視頻編碼器都期望固定的幀速率。 因此,簡單的解決方案就是一直保持相同的框架,直到足夠的“幀時間”到達你的套裝中的下一個靜止時間。

這是一些偽代碼:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM