我正在尝试将我的应用程序(使用OpenGL)的视图写入文件。 这就是我获取OpenGL框架的方式:
glBindTexture(GL_TEXTURE_2D, renderTexture->getTextureData()->glId);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
这很好,并且颜色正确。 (我通过将像素渲染到单个图像文件来检查这一点。)
现在,因为我想在视频中使用ffmpeg进行编码。这是我的命令:
ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i - -vf vflip -vcodec mpeg1video -q:v 4 -bufsize 500KB -maxrate 5000KB
这也“有效”,但与从OpenGL获得的实际输入相比,我的视频非常饱和。我怎么解决这个问题? (如果可能的话,我可以通过仅更改命令中的内容来完成此操作吗?)
答案 0 :(得分:0)
ffmpeg读取像素的方式很可能与您从OpenGL中获得的布局不匹配。使用glPixelStorei和GL_PACK_ ...参数来确定OpenGL发布的布局。
另一个问题可能是色彩空间。您必须确保ffmpeg在与OpenGL上下文完全相同的颜色空间中运行。如果没有,您可以确定颜色空间并在ffmpeg的处理链中添加转换过滤器。