如何在c++中录制具有精确帧时间戳的视频

How to record video with exact frames timestamp in c++

本文关键字:的视频 时间戳 c++      更新时间:2023-10-16

我想用c++录制相机的帧。相机帧速率不是恒定的,我需要存储每个图像及其时间戳(我使用操作系统时钟,并存储图像毫秒精度(。我已经将捕获的图像存储为一系列图像文件,但独立存储的图像(如.png(太重(因为我处理的是长序列,而且它们很多(。因此,我想利用连续图像之间的相似性(作为视频压缩技术(,创建一个利用这一事实的无损视频。然后,我想使用这个视频来单独提取图像,以保存时间戳。

换句话说,我只是使用视频格式来压缩图像序列(而不会丢失信息(,但我需要跟踪捕获图像时的确切时间戳。

所以我的问题是:如何以无损格式使用每帧的确切时间戳在视频中记录相机的流媒体

我一直在尝试使用OpenCV库,尤其是VideoWriter类。然而,VideoWriter接口不提供任何将帧和时间戳作为输入的方法。

我的另一个选择是将每一帧的时间戳与录制的视频一起存储在一个单独的txt文件中。然后,我可以使用时间戳从视频中检索帧。然而,我不确定我是否会检索到确切的帧,这是没有任何信息插值的。

提前感谢

格式必须是可移植的吗?

如果没有,这里有一个想法:将一堆图片中的像素交错排列(数字可能会随着时间的推移而变化,具体取决于变化的大小(。

因此,在你的文件中有N张图片的区块将包含:

N: the number of pictures in the chunk
timestamp 1: from picture 1
timestamp 2: from picture 2
...
timestamp N: from picture N
pixel 1: from picture 1, pixel 0,0
pixel 2: from picture 2, pixel 0,0
...
pixel N: from picture N, pixel 0,0
pixel N+1: from picture 1, pixel 0,1
pixel N+2: from picture 2, pixel 0,1
...
pixel N*X*Y: from picture N, pixel X-1,Y-1

然后使用无损压缩库来压缩块(现在包含一个3D图像(,然后继续下一个块。

也许已经有小波/fft库能够实现类似的功能。