FFMPEG 和 OPENGL - 原始帧
FFMPEG & OPENGL - RAW Frames
我正在使用 BlackMagic DeckLink 卡制作一台录像机。
该程序使用 OpenGL 显示帧和 FFMPEG(使用 glReadPixels() 方法)记录它们。
我正在我的程序中设置视口以应用自动 letter-/pillarbox 无论 Image/Monitor 是 16:9/4:3.
问题在于,当我捕获此视口的这些帧时,它们当然会记录在我的视口的分辨率中(即全高清源 -> 由于显示器分辨率为 1600x1200 的视口 -> 信箱降至 1600x900)等 FFMPEG 记录在 top/bottom.
处带有黑条的 1600x1200
是否有可能在 RAW 帧通过 setViewport 函数和所有重新缩放的东西之前获取它?
嗯,在某些时候图像被传递给 OpenGL。为什么不直接获取该数据并将其传递给 FFMPEG,而不是通过 OpenGL 进行冗长、低效和昂贵的往返。
如果 OpenGL 用于实时色彩空间转换,我建议您将渲染到 FBO,并在 FBO 上使用附有视频分辨率大小的纹理,使用 glReadPixels(最好是 PBO);最后以 window 分辨率将渲染到纹理的内容绘制到主屏幕上。
但是,如果您可以简单地将原始帧直接提供给 FFMPEG(它也可以进行色彩空间转换),我强烈建议您这样做。
我正在使用 BlackMagic DeckLink 卡制作一台录像机。
该程序使用 OpenGL 显示帧和 FFMPEG(使用 glReadPixels() 方法)记录它们。
我正在我的程序中设置视口以应用自动 letter-/pillarbox 无论 Image/Monitor 是 16:9/4:3.
问题在于,当我捕获此视口的这些帧时,它们当然会记录在我的视口的分辨率中(即全高清源 -> 由于显示器分辨率为 1600x1200 的视口 -> 信箱降至 1600x900)等 FFMPEG 记录在 top/bottom.
是否有可能在 RAW 帧通过 setViewport 函数和所有重新缩放的东西之前获取它?
嗯,在某些时候图像被传递给 OpenGL。为什么不直接获取该数据并将其传递给 FFMPEG,而不是通过 OpenGL 进行冗长、低效和昂贵的往返。
如果 OpenGL 用于实时色彩空间转换,我建议您将渲染到 FBO,并在 FBO 上使用附有视频分辨率大小的纹理,使用 glReadPixels(最好是 PBO);最后以 window 分辨率将渲染到纹理的内容绘制到主屏幕上。
但是,如果您可以简单地将原始帧直接提供给 FFMPEG(它也可以进行色彩空间转换),我强烈建议您这样做。