从 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 程序生成视频的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows XP 中使用多个视频卡进行 OpenGL 渲染