我一直在研究利用最新技术在iOS上进行视频处理的最佳方法,并得到了一些不同的结果。使用Core、OpenGL和一些开源框架似乎也有办法做到这一点。我想避开开源选项,这样我就可以了解幕后发生了什么,所以问题是:
我最好的处理方法是什么(滤光片、亮度、对比度等)在iOS上预先录制的视频?
我知道Core有很多很好的内置过滤器,并且有一个相对简单的API,但是我还没有找到任何关于如何将视频分解成图像然后重新编码的资源。在这个问题上的任何帮助都是非常有用的,谢谢。
发布于 2015-08-15 16:53:55
正如您所述,您有几个选项可供选择。无论你认为哪一个“最好”,都将取决于你的具体需要。
也许你最简单的非开源途径是使用核心图像。从核心图像视频过滤中获得最佳性能仍然需要一些工作,因为您需要确保您正在进行GPU端处理。
在基准应用程序中,我在GPUImage框架中使用了以优化方式使用Core的代码。为此,我设置了AV基金会视频捕获,并从像素缓冲区创建了一个CIImage。核心图像上下文被设置为呈现为OpenGL ES上下文,以及该上下文上的属性(颜色空间等)。设置为快速呈现。我使用的设置是由核心图像团队建议的,当我和他们讨论这个问题时。
走原始的OpenGL ES路线是我谈到的这里 (并在那里有一个链接样例应用程序),但是它确实需要一些设置。它可以给你比核心图像更多的灵活性,因为你可以写完全自定义的着色器,以操纵图像的方式,你可能无法在核心图像。过去,这比核心映像快,但现在实际上没有性能上的差距。
然而,构建您自己的OpenGL ES视频处理管道并不简单,它涉及大量样板代码。这就是我写这的原因,我和其他人花了很多时间来优化它的性能和易用性。如果您不了解这一切是如何工作的,请阅读该框架内的GPUImageVideo类代码。这就是从摄像机中提取帧并启动视频处理操作的原因。它比我的基准应用程序要复杂一些,因为它从相机中获取YUV平面帧,并在大多数情况下将它们转换为RGBA,而不是抓取原始的RGBA框架。后者稍微简单一些,但前者有一些性能和内存优化。
以上提到的都是实时视频,但是预先录制的视频几乎是一样的,只有不同的AV Foundation输入类型。我的GPUImageMovie类中有代码可以接收预先录制的电影,并从中处理单个帧。他们最终在同一个地方,你会从相机捕捉到的帧。
https://stackoverflow.com/questions/32015496
复制相似问题