我有一个OpenGL游戏,我想将屏幕上显示的内容保存到视频中。
我该怎么做?有没有图书馆或如何做?
我不在乎压缩,我需要最有效的方式,所以希望FPS不会掉落。将OpenGL渲染保存为视频
编辑:
它的OpenGL 1.1和它的工作在Mac OSX上,虽然我需要它是便于携带。
我有一个OpenGL游戏,我想将屏幕上显示的内容保存到视频中。
我该怎么做?有没有图书馆或如何做?
我不在乎压缩,我需要最有效的方式,所以希望FPS不会掉落。将OpenGL渲染保存为视频
编辑:
它的OpenGL 1.1和它的工作在Mac OSX上,虽然我需要它是便于携带。
绝对有很棒的视频捕捉软件可以用来捕捉屏幕,即使在运行全屏OpenGL游戏时也是如此。
如果您正在使用新版本的OpenGL,正如genpfault所提到的,您可以使用PBO。如果您使用的是旧版的OpenGL(1.x版本),这里是你如何捕获屏幕:
glFinish(); // Make sure everything is drawn
glReadBuffer(GL_FRONT);
glPixelStorei(GL_PACK_ALIGNMENT, 4);
glPixelStorei(GL_PACK_ROW_LENGTH, 0);
glPixelStorei(GL_PACK_SKIP_ROWS, 0);
glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
glReadPixels(blx, bly, w, h, mode, GL_UNSIGNED_BYTE, GL_BGRA);
其中blx
和bly
是要捕捉屏幕部分的左下角坐标(在你的案例(0, 0)
)和w
和h
是要捕获的盒子的宽度和高度。有关更多信息,请参阅glReadPixels
的参考资料,例如最后一个参数。
将捕获的屏幕(以您想要的速率,例如24 fps)写入视频文件是选择所需文件格式(例如原始视频)的简单方法,写入视频的标题并写入图像(如果原始图像,或在其他格式的图像差异等)
我试过屏幕截图软件,但我得到帧丢失,并且事件如果游戏不冻结几秒钟,视频会。我需要以60fps捕捉。如果我可以直接从游戏中保存视频,那么我可以将游戏更新增量时间固定为1/60秒,即使有冻结,视频也会看起来很流畅。 – Damian
这是OpenGL 1.1,因为这款游戏也适用于Mac和iPhone,所以我猜PBO不是一种选择,对吧? – Damian
60fps的视频看起来像是矫枉过正,但这是您的选择。您可以在1/60秒处固定帧率,但可以捕获每一帧(因此在交替帧中捕捉)。我不记得我在以前的电脑上使用过哪些捕捉软件,但是我捕捉到了一个星际争霸II游戏,它非常完美(没有冻结没有帧丢弃)。当然,你的游戏比星际争霸II更便宜!您只需要搜索我搜索的更好的软件 – Shahbaz
可能重复[caputre OpenGL窗口在X11与快速framerate - 可能吗?](http://stackoverflow.com/questions/7615474/caputre- opengl-window-in-x11-with-fast-framerate-possible) – genpfault
这里的目标是哪个平台?解决方案可能会因此而有所不同。 –
现在正在使用OSX,但由于所有代码都相当便携,所以解决方案也应该如此。 – Damian