我应该为我的用户提供一种非常简单的方法,即从我的OpenGL应用程序的主窗口中捕获视频剪辑。我正在考虑添加用于启动和停止捕获的按钮和/或键盘快捷键;当开始时,我可以要求一个文件名和其他选项,如果有的话。它必须在Windows(XP/Vista)下运行,但我也不想关闭我迄今为止能够保持开放的Linux门。从Windows中的OpenGL窗口捕获视频
该应用程序使用OpenGL片段和着色器程序,由此我绝对需要在最终的视频中产生的效果。
它看起来对我来说,有可能是有可能满足我的要求,甚至几种不同的方法(但我真的不知道我应该在哪里开始):
与喜欢的startRecording功能的编码库(文件名),stopRecording和captureFrame。我可以在每帧渲染(或每秒/三分之一)之后调用captureFrame()。如果这样做会让我的程序运行速度变慢,那不是一个真正的问题。
独立的外部程序,可以从我的应用程序进行编程控制。毕竟,一个独立的程序,可以而不是几乎可以做到我需要的东西......但正如所说的,它应该是非常简单的用户操作,我也很感激无缝;我的应用程序通常全屏运行。此外,应该可以作为我目前使用NSIS准备的应用程序的安装包的一部分进行分发。
使用Windows API逐帧捕获屏幕截图,然后使用(例如)libraries mentioned here之一。似乎很容易找到如何在Windows中捕获屏幕截图的示例;然而,我很喜欢这样的解决方案,它并不会强迫我在WinAPI级别上弄脏我的手。
使用OpenGL渲染到屏幕外目标,然后使用库来产生视频。我不知道这是否有可能,我担心它可能不会是最轻微的痛苦之路。特别是,我不希望实际渲染根据视频是否被捕获而采取不同的执行路径。此外,我会避免任何可能会降低正常非捕获模式下的帧速率的内容。
如果解决方案在这个词的任何一个意义上都是免费的,那么这会很好,但这不是绝对的要求。一般来说,越少膨胀越好。另一方面,由于原因超出这个问题,不幸的是,我无法链接任何GPL专用代码。
关于文件格式,我不能指望我的用户开始使用Google的任何编解码器,但只要还显示视频是一个基本级别的Windows用户很容易,我真的不关心什么格式是。但是,如果可以控制输出的压缩质量,那将是非常好的。
只是为了澄清:我不需要从像摄像机外部设备捕获视频,我也不是在鼠标的移动我真正感兴趣的,即使让他们没有任何伤害。对音频没有要求;该应用程序不会产生任何噪音。
我使用Visual Studio 2008编写C++,这个应用程序也受益于GLUT和GLUI。我对C++和链接库以及类似的东西有着深刻的理解,但另一方面,对于我来说,OpenGL对我来说是非常新的:到目前为止,我只学到了实际完成工作的必要位。
我并不需要一个解决方案超急,可以随意把你的时间:)
是:LGPL没问题。 – Reunanen 2008-09-30 20:22:11
glReadPixels()似乎是我需要的第一个问题,谢谢! – Reunanen 2008-09-30 20:37:20
@MikeF:该链接是胸围 – 2011-11-17 09:26:27