相关疑难解决方法(0)

在Windows中从OpenGL窗口捕获视频

我应该为我的用户提供一种从我的OpenGL应用程序主窗口中捕获视频剪辑的简单方法.我正在考虑添加按钮和/或键盘快捷键来启动和停止捕获; 在开始时,我可以要求提供文件名和其他选项,如果有的话.它必须在Windows(XP/Vista)中运行,但我也不想关闭我迄今为止能够保持打开的Linux门.

该应用程序使用OpenGL片段和着色器程序,我最终需要在最终视频中使用这些效果.

在我看来,甚至可能有几种不同的方法可以满足我的要求(但我真的不知道应该从哪里开始):

  • 具有startRecording(filename),stopRecording和captureFrame等函数的编码库.我可以在渲染的每一帧之后调用captureFrame()(或者每隔一秒/三次/无论如何).如果这样做会使我的程序运行速度变慢,那真的不是问题.

  • 一个独立的外部程序,可以通过我的应用程序进行编程控制.毕竟,一个无法控制的独立程序几乎可以满足我的需求...但正如所说,用户操作应该非常简单,我也会欣赏它的无缝性; 我的应用程序通常全屏运行.此外,应该可以作为我的应用程序的安装包的一部分进行分发,我目前正在使用NSIS进行准备.

  • 使用Windows API逐帧捕获屏幕截图,然后使用(例如)此处提到库之一.似乎很容易找到如何在Windows中捕获屏幕截图的示例; 但是,我会喜欢一个解决方案,它并没有真正迫使我在WinAPI级别上让我的手变得非常脏.

  • 使用OpenGL渲染到屏幕外目标,然后使用库来生成视频.我不知道这是否可能,我担心它可能不是最不痛苦的道路.特别是,我不希望实际渲染采用不同的执行路径,具体取决于是否捕获视频.此外,我会避免在正常的非捕获模式下可能降低帧速率的任何事情.

如果解决方案在任何一个意义上都是免费的,那么这将是很好的,但这并不是一个绝对的要求.一般来说,臃肿越少越好.另一方面,由于超出此问题的原因,遗憾的是,我无法链接任何仅限GPL的代码.

关于文件格式,我不能指望我的用户开始使用谷歌搜索任何编解码器,但只要显示视频对于基本级别的Windows用户来说也很容易,我并不关心格式是什么.但是,如果可以控制输出的压缩质量,那将是很好的.

只是为了澄清:我不需要从像摄像机这样的外部设备捕获视频,也不需要对鼠标移动感兴趣,即使它们也没有伤害.音频没有要求; 应用程序不会产生任何噪音.

我使用Visual Studio 2008编写C++,因为这个应用程序也受益于GLUT和GLUI.我对C++和库中的链接以及那些东西有着深刻的理解,但另一方面,OpenGL对我来说是一个全新的东西:到目前为止,我真的只学到了实际完成工作所必需的部分.

我不急需一个解决方案,所以随时抽出你的时间:)

c++ opengl video screenshot video-capture

11
推荐指数
1
解决办法
9429
查看次数

标签 统计

c++ ×1

opengl ×1

screenshot ×1

video ×1

video-capture ×1