【问题标题】:iOS: Video as GL texture with alpha transparencyiOS:视频作为具有 alpha 透明度的 GL 纹理
【发布时间】:2011-09-28 07:44:53
【问题描述】:

我正在尝试找出在 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 透明度,但不适合应用商店: iPhone: Display a semi-transparent video on top of a UIView?

视频源将在绿色屏幕前拍摄以进行色度键控。视频可以保持原样离开绿屏或在视频编辑套件中处理并导出到 Quicktime Animation 或 Apple Pro Res 4444 with Alpha。

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

  1. 视频的实时阈值处理寻找绿色来移除
  2. 了解如何使用上述 Quicktime 编解码器来保留 Alpha 通道
  3. 将两个视频混合在一起:1) 使用 RGB 的主视频 2) 使用 alpha 蒙版的单独视频

我很想听听您对 iOS 和 OpenGL ES 2.0 最佳方法的看法

谢谢。

【问题讨论】:

  • 对我来说完全不清楚你想做什么。如何将视频传送到应用程序?
  • 很可能本地存储在主包中
  • 你总是可以在着色器中进行颜色键控,这是一个非常简单的操作。
  • 那么这将是每个视频帧的实时颜色键控?这会影响性能吗?
  • @ryatkins 您最终选择了上述任何选项吗?我刚刚开始对此进行一些研究,并且遇到了您的问题,这正是我在这个阶段问自己的问题。任何帮助将不胜感激。

标签: ios video opengl-es transparency alpha


【解决方案1】:

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

图像、电影和实时摄像机可用作源,但如果您希望在电影后面使用 OpenGL ES 内容进行渲染,我建议您将 OpenGL ES 内容渲染到支持纹理的 FBO 并将其传递通过 GPUImageTextureInput 输入纹理。

您也可以使用它来输出包含电影帧的纹理,其中键颜色替换为具有 0 alpha 通道的恒定颜色。可以使用 GPUImageTextureOutput 提取此纹理,以供以后在 OpenGL ES 场景中使用。

【讨论】:

    【解决方案2】:

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

    (以非常高效的方式)

    它是为使用来自摄像机的馈送而编写的,并且使用了一种非常粗糙的色键算法。

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 2011-04-09
        • 2011-05-13
        • 1970-01-01
        相关资源
        最近更新 更多