如何将视频帧保存到缓冲区中?

Posted

技术标签:

【中文标题】如何将视频帧保存到缓冲区中?【英文标题】:How can i save video frames into a buffer? 【发布时间】:2016-05-31 09:14:23 【问题描述】:

我使用 VideoCapture 从网络摄像头读取帧并使用 VideoWriter 写入目录。但是我想到了一个新想法,比如如果我想在按下按钮时将视频保存在 50 帧之前,然后继续使用实时帧。 有没有办法做到这一点。 正如我所观察到的,从源写入应该是连续的,如果我们要更改源,我们需要重新初始化 VideoWriter.open()

【问题讨论】:

【参考方案1】:

因此您需要存储最后 50 帧并按需将它们写入视频文件。

您可以使用ring buffer (circular queue)。用传入的帧填充它,每次都用新的帧更新最旧的帧。什么是网络摄像头帧格式和目标操作系统/计算机平台?在某些情况下,内存消耗可能是个问题。

开始重新编码时,一一提取帧并将它们添加到 VideoWriter。在此过程中,将传入的帧插入缓冲区以避免丢帧,直到缓冲区为空。

【讨论】:

是的,我需要存储 50 帧,当我开始录制旧的 50 帧时,应该使用 VideoWriter 然后输入帧,这样我就可以记录视频录制开始之前发生的事情. 好的。我已经描述了你需要的一切。

以上是关于如何将视频帧保存到缓冲区中?的主要内容,如果未能解决你的问题,请参考以下文章

如何保存帧缓冲区然后将其取回

渲染到窗口帧缓冲区和 FBO 以保存全尺寸纹理图像

如何在 iOS 中制作 OpenGL ES 帧缓冲区的副本?

如何访问 WPF 应用程序中的视频卡帧缓冲区?

C 缓冲区到 C# 位图对象

如何在 libgdx 中重用帧缓冲纹理