Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File OpenGL-创建视频输出文件_File_Opengl_Video_Video Capture_Glreadpixels - Fatal编程技术网

File OpenGL-创建视频输出文件

File OpenGL-创建视频输出文件,file,opengl,video,video-capture,glreadpixels,File,Opengl,Video,Video Capture,Glreadpixels,我希望能够使用OpenGL创建视频输出文件,而不是通常的屏幕显示输出。我的想法是不使用glutPostRedisplay()或(SFML版本,类似于以下内容:)window.Display(),而是使用glReadPixels() 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风格的管道和过滤器,那么学习曲线就不多了。