Bjo*_*che 7 video core-image avfoundation ios
我正在尝试将过滤器应用于在iOS上使用AVFoundation创建的视频合成(过滤器可能是,例如,模糊,像素化,棕褐色等).我需要实时应用效果并能够将复合视频渲染到磁盘,但我很高兴从一个或另一个开始.
不幸的是,我似乎无法想出这个.这是我能做的:
其他应用程序这样做(我认为),所以我认为我错过了一些明显的东西.
注意:我已经研究过GPUImage,我很乐意使用它,但它对电影,尤其是带有音频的电影效果不佳.参见例如:
小智 6
您可以使用AVVideoCompositing和AVAsynchronousVideoCompositionRequest协议来实现自定义合成器.
CVPixelBufferRef pixelBuffer = [AVAsynchronousVideoCompositionRequest sourceFrameByTrackID:trackID];
CIImage *theImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIImage *motionBlurredImage = [[CIFilter *filterWithName:@"CIMotionBlur" keysAndValues:@"inputImage", theImage, nil] valueForKey:kCIOutputImageKey];
CIContext *someCIContext = [CIContext contextWithEAGLContext:eaglContext];
[someCIContext render:motionBlurredImage toCVPixelBuffer:outputBuffer];
Run Code Online (Sandbox Code Playgroud)
然后使用Apple的文档中描述的OpenGL渲染像素缓冲区.这将允许您实现所需的任意数量的转换或过滤器.然后,您可以设置AVAssetExportSession.videoCompostion,然后您就可以将合成视频导出到磁盘.
您可以使用 AVAssetReader 读取 AVComposition (它是 AVAsset 子类)。获取像素缓冲区,将其传递给 CIFilter(对其进行设置,以便它使用 GPU 进行渲染(无颜色管理等),并根据您的需要将其渲染在屏幕/输出缓冲区上。我不认为模糊可以实时实现,除非您直接使用GPU。
您可以阅读有关 CIFilter 应用到视频的信息(将过滤器应用到视频部分):