File OpenGL-创建视频输出文件
我希望能够使用OpenGL创建视频输出文件,而不是通常的屏幕显示输出。我的想法是不使用glutPostRedisplay()或(SFML版本,类似于以下内容:)window.Display(),而是使用glReadPixels() glReadPixels将像素内容放入内存中的数组(您可能已经知道),但如何将其转换为一个帧,并将多个帧串在一个视频文件中?视频文件的格式是什么,这样我就可以播放它了File OpenGL-创建视频输出文件,file,opengl,video,video-capture,glreadpixels,File,Opengl,Video,Video Capture,Glreadpixels,我希望能够使用OpenGL创建视频输出文件,而不是通常的屏幕显示输出。我的想法是不使用glutPostRedisplay()或(SFML版本,类似于以下内容:)window.Display(),而是使用glReadPixels() glReadPixels将像素内容放入内存中的数组(您可能已经知道),但如何将其转换为一个帧,并将多个帧串在一个视频文件中?视频文件的格式是什么,这样我就可以播放它了 我应该解释我为什么要这么做:很多物理模拟可能需要很长时间才能计算出足够的信息来显示一帧,所以最好让它
我应该解释我为什么要这么做:很多物理模拟可能需要很长时间才能计算出足够的信息来显示一帧,所以最好让它运行一夜,第二天早上播放视频文件。你不想每5分钟就回来看看发生了什么事。
glutPostRedisplay
是GLUT的一部分,而不是OpenGL特有的东西
通常使用PBuffer或使用隐藏窗口和帧缓冲区对象进行屏幕外渲染
可以通过多种方式将图像转换为视频。例如,您可以使用image2pipe
作为输入格式,并将原始图像数据写入ffmpeg过程标准输入。更简单的方案是将每个帧转储到单独的图像文件中。使用是简单的。然后可以将各个图像合并到视频中
但是,在进行物理模拟时,不应将最终渲染转储到文件中。相反,您应该存储模拟数据以供以后播放,因为这样可以调整渲染参数,而无需重新模拟所有内容。您必须对渲染器进行调整 glutPostRedisplay是GLUT的一部分,而不是OpenGL特有的东西 通常使用PBuffer或使用隐藏窗口和帧缓冲区对象进行屏幕外渲染 可以通过多种方式将图像转换为视频。例如,您可以使用
image2pipe
作为输入格式,并将原始图像数据写入ffmpeg过程标准输入。更简单的方案是将每个帧转储到单独的图像文件中。使用是简单的。然后可以将各个图像合并到视频中
但是,在进行物理模拟时,不应将最终渲染转储到文件中。相反,您应该存储模拟数据以供以后播放,因为这样可以调整渲染参数,而无需重新模拟所有内容。您必须对渲染器进行调整 您可以将其存储在原始帧(RGBA)中,然后使用gstreamer等进行处理。(这也允许将转换管道嵌入到应用程序中)。因此,gstreamer是一种我可以包含在代码中并向其传递一些原始帧的东西,我将获得ogg或mpeg或其他输出,或多或少。它是一个完整的框架,因此对于一个应用程序来说,它至少显得过于臃肿;但是,如果你已经知道了unix风格的管道和过滤器,那么就没有那么多的学习曲线了。你可以将它存储在原始帧(RGBA)中,然后用gstreamer等进行处理。(这也允许将转换管道嵌入到应用程序中)。因此,gstreamer是一种我可以包含在代码中并向其传递一些原始帧的东西,我将获得ogg或mpeg或其他输出,或多或少。它是一个完整的框架,因此对于一个应用程序来说,它至少显得过于臃肿;但是,如果你已经知道了unix风格的管道和过滤器,那么学习曲线就不多了。