3

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

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

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

4

1 回答 1

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
}
于 2013-05-05T20:11:39.767 回答