如何从一系列快照中编码视频?

时间:2013-05-05 19:49:41

标签: c++ c video video-encoding

我与一种大约30fps视频的视频流接口,大部分都是静态的(如静止图片)。当视频中有移动时,我只从流中获得更新。因此,如果视频是静态的5分钟,我只将这5分钟的数据作为单帧数据获取。然后,如果视频流上有移动5秒钟,我也会得到每个帧的数据(例如,大约150帧)。然后,如果它还有5分钟,那么整个时间我将得到1个单帧的数据。所以视频将是10分5秒,但我会得到152帧的数据。

我正在尝试从这些数据创建一个实时视频文件,但是当我对其进行编码时,视频的第一个和最后一个5分钟仅作为一个帧存在,因此不是5分钟的静态视频,而是直接进入我有实际实时帧的2秒钟。

从这些信息创建实际的全长/实时视频的最佳方法是什么?我目前正在使用C ++。

1 个答案:

答案 0 :(得分: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
}