【问题标题】:Best Practice for iOS video processingiOS 视频处理的最佳实践
【发布时间】:2015-11-08 00:43:57
【问题描述】:

我一直在研究使用最新技术在 iOS 上进行视频处理的最佳方法,并获得了一些不同的结果。似乎有办法使用 Core Image、OpenGL 和一些开源框架来做到这一点。我想避开开源选项,以便了解幕后发生的事情,所以问题是:

在 iOS 上处理预录视频的最佳选择是什么(滤镜、亮度、对比度等)?

我知道 Core Image 有很多很棒的内置过滤器并且有一个相对简单的 API,但是我还没有找到任何关于如何将视频实际分解为图像然后重新编码的资源。对此主题的任何帮助都将非常有用,谢谢。

【问题讨论】:

    标签: ios video opengl-es-2.0 video-processing core-image


    【解决方案1】:

    正如您所说,您有多种选择。您认为哪个“最佳”取决于您的具体需求。

    您最简单的非开源途径可能是使用 Core Image。从 Core Image 视频过滤中获得最佳性能仍然需要一些工作,因为您需要确保您正在为此进行 GPU 端处理。

    a benchmark application 我的GPUImage 框架中,我有以优化方式使用Core Image 的代码。为此,我设置了 AV Foundation 视频捕获并从像素缓冲区创建 CIImage。核心图像上下文设置为渲染到 OpenGL ES 上下文,并且其属性(颜色空间等)设置为快速渲染。我使用的设置是我与 Core Image 团队讨论时建议的设置。

    走原始 OpenGL ES 路线是我所说的 here(并在那里有一个链接的示例应用程序),但它确实需要一些设置。它可以为您提供比 Core Image 更多的灵活性,因为您可以编写完全自定义的着色器来以您在 Core Image 中可能无法做到的方式来操作图像。过去这比 Core Image 更快,但现在实际上没有性能差距。

    但是,构建自己的 OpenGL ES 视频处理管道并不简单,它涉及大量样板代码。这就是我写this 的原因,我和其他人已经投入大量时间来调整它以提高性能和易用性。如果您担心不了解这一切是如何工作的,请通读该框架内的GPUImageVideo 类代码。这就是从相机中提取帧并开始视频处理操作的原因。它比我的基准应用程序复杂一点,因为它从相机中获取 YUV 平面帧,并在大多数情况下在着色器中将其转换为 RGBA,而不是抓取原始 RGBA 帧。后者稍微简单一些,但前者有性能和内存优化。

    以上所有内容都是关于实时视频,但预先录制的视频大致相同,只是使用了不同的 AV Foundation 输入类型。我的GPUImageMovie 类中包含用于接收预先录制的电影并从中处理单个帧的代码。它们最终与您从相机捕获的帧位于同一位置。

    【讨论】:

    • 感谢您的详尽回答!实际上,我之前已经研究过您的 GPUImage 框架,这真是太棒了,干得好!这是我将在未来的项目中使用的东西,但是现在因为这是我第一次处理视频,我想看看它在幕后是如何工作的,希望能更好地理解像你这样的框架。另外,我正在为我的项目使用 Swift,并希望继续这样做。再次感谢您的回答
    • 在过去 2 年中将 Brad 的 GPUImage 库用于多个项目之后,我可以说,如果您处于我的问题所描述的情况,这是最好的起点之一。了解“幕后”发生的事情可能需要数月或数年的学习和理解 AVFoundation 和 OpenGL。不适合胆小的人。如果您想在 iOS 中进行图像/视频处理,我强烈建议您阅读上面 Brad 的回答。
    • @Brad 谢谢你在这里的回答。您是否愿意描述一下使用您的框架与 Metal 处理视频的优缺点?
    • @StefanVasiljevic - 好吧,希望有了这个新版本的框架,这不会是一个非此即彼的命题:github.com/BradLarson/GPUImage3。那里还有一些工作要做,最近几个月我们有点偏离了方向。除此之外,Core Image 现在在引擎盖下使用 Metal,所以这是另一个你不需要担心底层计算的包装器。如果你想直接去 Metal,我关于 OpenGL 的 cmets 也将适用于那里。设置基本渲染需要大量样板文件,但您拥有最大的灵活性。
    猜你喜欢
    • 2012-06-23
    • 2018-07-30
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多