gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:17:50 24 4
gpt4 key购买 nike

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

我正在尝试根据这些数据创建一个实时视频文件,但是当我对其进行编码时,视频的前 5 分钟和最后 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
}

关于c++ - 如何从一系列快照中编码视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com