我与一种大约30fps视频的视频流接口,大部分都是静态的(如静止图片)。当视频中有移动时,我只从流中获得更新。因此,如果视频是静态的5分钟,我只将这5分钟的数据作为单帧数据获取。然后,如果视频流上有移动5秒钟,我也会得到每个帧的数据(例如,大约150帧)。然后,如果它还有5分钟,那么整个时间我将得到1个单帧的数据。所以视频将是10分5秒,但我会得到152帧的数据。
我正在尝试从这些数据创建一个实时视频文件,但是当我对其进行编码时,视频的第一个和最后一个5分钟仅作为一个帧存在,因此不是5分钟的静态视频,而是直接进入我有实际实时帧的2秒钟。
从这些信息创建实际的全长/实时视频的最佳方法是什么?我目前正在使用C ++。
答案 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
}