iOS:视频为GL纹理,具有Alpha透明度

时间:2011-07-04 18:11:27

标签: ios video opengl-es transparency alpha

我正在尝试找出在GL纹理上显示视频的最佳方法,同时保留Alpha通道的透明度。

有关视频作为GL纹理的信息在此处:Is it possible using video as texture for GL in iOS?iOS4: how do I use video file as an OpenGL texture?

使用ffmpeg来帮助提高Alpha透明度,但不是app store友好的在这里: iPhone: Display a semi-transparent video on top of a UIView?

视频源将在绿色屏幕前拍摄,用于色度键控。视频可以不受影响而离开绿屏或在视频编辑套件中处理,并导出到带有Alpha的Quicktime Animation或Apple Pro Res 4444.

我认为有多种方法可能有效,但我还没有找到完整的解决方案。

  1. 视频的实时阈值处理,寻找绿色以移除
  2. 了解如何使用上述Quicktime编解码器来保存Alpha通道
  3. 将两个视频混合在一起:1)带RGB的主视频2)带alpha掩码的单独视频
  4. 我很想了解iOS和OpenGL ES 2.0的最佳方法

    感谢。

3 个答案:

答案 0 :(得分:4)

对电影和另一个场景的简单混合进行色度键控的最简单方法是使用我GPUImage框架中的GPUImageChromaKeyBlendFilter。您可以将电影源作为GPUImageMovie提供,然后将其与背景内容混合。色度键过滤器允许您指定颜色,与该颜色的接近度以及在替换操作中使用的混合平滑度。所有这些都是通过调整着色器加速GPU。

图像,电影和实时摄像头可以用作信号源,但是如果您希望使用电影背后的OpenGL ES内容进行渲染,我建议将OpenGL ES内容渲染到纹理支持的FBO并传递通过GPUImageTextureInput纹理。

您可以使用它来输出包含电影帧的纹理,其键控颜色也替换为带有0 Alpha通道的常量颜色。可以使用GPUImageTextureOutput提取此纹理,以便以后在OpenGL ES场景中使用。

答案 1 :(得分:0)

Apple于2011年在WWDC上展示了一个名为ChromaKey的示例应用程序,该应用程序展示了如何处理传递给OpenGL纹理的视频帧,操作并可选地写入视频文件。

(以非常高效的方式)

编写它是为了使用摄像机的输入,并使用非常粗糙的色度键算法。

正如另一张海报所说,您可能希望跳过色度键代码并事先自己进行颜色淘汰。

重写Chromakey示例应用程序以使用视频文件作为输入而不是相机输入应该不难,并且很容易禁用chormakey代码。

您需要修改视频输入上的设置以期望RGBA数据而不是RGB或Y / UV。示例应用程序设置为使用RGB,但我看到Apple的其他示例应用程序使用Y / UV代替。

答案 2 :(得分:0)

查看应用商店中的免费“APNG”应用。它显示了如何将动画PNG(.apng)直接呈现到iOS视图。关键是APNG支持文件格式的alpha通道,因此您不需要处理对您的所有视频内容都不起作用的色度技巧。这种方法比多层或色度技巧更有效,因为每次在循环中显示纹理时都不需要进行另一轮处理。

如果你想看一个小例子xcode项目,它在OpenGL ES2的旋转立方体一侧显示一个alpha通道动画,可以在Load OpenGL textures with alpha channel on iOS找到它。示例代码显示了对glTexImage2D()的简单调用,该调用将纹理上载到图形卡一次,用于每个显示链接回调。

相关问题