2011-07-04 75 views
10

我试图找出在保留Alpha通道透明度的同时在GL纹理上显示视频的最佳方法。iOS:使用alpha透明度的GL纹理视频

关于视频作为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透明度,但不应用商店友好的是在这里: iPhone: Display a semi-transparent video on top of a UIView?

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

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

  1. 视频寻找绿色的实时阈值处理,以除去
  2. 图如何使用上述的Quicktime编解码器以保留alpha通道
  3. 混合两个视频一起:1)RGB 2主视频)与阿尔法独立的视频面具

我很想得到iOS和OpenGL ES 2.0的

感谢最好的办法你的看法。

+0

对我来说这是完全不清楚你想要做什么。你如何获得视频到应用程序? – tomk

+0

最有可能存储在本地主束 – ryatkins

+0

你总是可以做到的颜色键控在着色器,这是一个非常简单的操作。 –

回答

0

苹果表现出一个示例应用程序在WWDC 2011年称为色度,说明如何处理视频传递给一个OpenGL纹理操作的框架,以及可选写到视频文件。

(在一个非常高性能的方式)

这是写使用从摄像机饲料,并使用一种非常粗糙的色度算法。

至于其他的海报说,你可能会想跳过色度代码,做颜色淘汰赛自己事前。

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

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

4

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

图片,电影和实时相机可以用作来源,但是如果您希望在电影背后使用OpenGL ES内容进行渲染,我建议将OpenGL ES内容渲染为纹理支持的FBO并传递通过GPUImageTextureInput获取该纹理。

你可能利用此输出包含与所述带键颜色由恒定颜色用0 alpha通道代替影片帧的纹理,以及。可以使用GPUImageTextureOutput提取此纹理,以便以后在OpenGL ES场景中使用。

0

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

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