从 OpenGL C 程序生成视频

Posted

技术标签:

【中文标题】从 OpenGL C 程序生成视频【英文标题】:Produce video from OpenGL C program 【发布时间】:2011-02-08 11:49:06 【问题描述】:

我有一个运行科学模拟并在 OpenGL 窗口中显示可视化的 C 程序。我想把这个可视化做成一个视频,最终会在 YouTube 上播放。

问题:从 C/OpenGL 程序制作视频的最佳方法是什么?

我过去的做法是使用屏幕捕获程序,但这非常耗费人力(必须启动/停止屏幕捕获程序,保存视频文件等...)。似乎应该有一种方法可以自动化从 C 程序中制作视频的过程。然后我可以让它整夜运行,早上有 20 个视频要浏览,然后选择最好的一个放到 YouTube 上。

YouTube recommend“MPEG4 (Divx, Xvid) 格式,640x480 分辨率”。

我正在使用GLUT 3.7.6_3,如果这有什么不同的话。如果有充分的理由,我可以更改窗口系统。

我运行的是 Windows (XP),因此更喜欢在 Windows 上运行的答案,但 Linux 答案也可以。如果在 Windows 上无法轻松完成视频制作,我可以使用 Linux。我有一个朋友为视频的每一帧制作了一个 .png 图像,然后在 Linux 上使用“mencoder”将它们拼接在一起。

【问题讨论】:

保存单个帧并在外部工具中转换为视频(mencoder 可能是一个不错的猜测)对我来说是最好的解决方案。 在此处查看有关主题的更大讨论:***.com/questions/154730/… @DavidM:非常感谢 - 这真的很有用。 【参考方案1】:

您可以使用 glReadPixels 函数(请参阅example)

但是,如果您要显示的内容是由简单的对象(即球体、杆等)组成的,我会将每一帧“导出”到 POV-ray 文件中,渲染它们,然后制作视频从这些照片中。你会达到这样的更高质量。

【讨论】:

并不是说它对于这个特定实例来说太重要了,但是使用 PBO 比 glReadPixels() 更有效,因为 PBO 允许 DMA。【参考方案2】:

使用像FRAPS 这样的第三方应用程序为您完成这项工作。

Fraps 可以捕获音频和视频 2560x1600 自定义帧率 每秒 1 到 120 帧!

所有电影都以优秀的方式录制 质量。

他们在网站上有视频示例。他们看起来不错。

编辑:

您可以执行一个工具来记录您的 C 应用程序中的屏幕,方法是像 system("C:\screen_recorder_app.exe -params") 这样调用它。检查camstudio,它有一个命令行版本。

【讨论】:

谢谢,但这似乎只是一个常规的屏幕捕获程序。你可以从 C 程序中运行它吗?

以上是关于从 OpenGL C 程序生成视频的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 纹理映射内存泄漏

使用 OpenGL(和 OpenGL ES)渲染 SVG

在 Windows XP 中使用多个视频卡进行 OpenGL 渲染

在 iPhone 上的 openGl 应用程序的背景中播放视频

C++ OpenGL 窗口只跟踪背景

语义 OpenGL 扩展支持