将CIFilter与AVFoundation一起使用(iOS)

 白色的睡 发布于 2023-02-09 21:43

我正在尝试将过滤器应用于在iOS上使用AVFoundation创建的视频合成(过滤器可能是,例如,模糊,像素化,棕褐色等).我需要实时应用效果并能够将复合视频渲染到磁盘,但我很高兴从一个或另一个开始.

不幸的是,我似乎无法想出这个.这是我能做的:

我可以为正在播放电影的UIView添加一个动画层,但是我不清楚我是否可以这样处理传入的视频图像.

我可以向AVPlayerLayer添加一组CIFilter,但事实证明这些在iOS中被忽略(它只适用于Mac OS X).

我可以将一个AVVideoCompositionCoreAnimationTool添加到AVVideoCompopsition,但我不确定这会完成视频处理(而不是动画),并且它会因为无法设计用于实时播放的消息而崩溃.我相信这是渲染到磁盘时渲染动画的解决方案.

其他应用程序这样做(我认为),所以我认为我错过了一些明显的东西.

注意:我已经研究过GPUImage,我很乐意使用它,但它对电影,尤其是带有音频的电影效果不佳.参见例如:

GPUImage在AVMutableComposition上运行时过滤

https://github.com/BradLarson/GPUImage/issues/1339

小智.. 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];

然后使用Apple的文档中描述的OpenGL渲染像素缓冲区.这将允许您实现所需的任意数量的转换或过滤器.然后,您可以设置AVAssetExportSession.videoCompostion,然后您就可以将合成视频导出到磁盘.

1 个回答
  • 您可以使用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];
    

    然后使用Apple的文档中描述的OpenGL渲染像素缓冲区.这将允许您实现所需的任意数量的转换或过滤器.然后,您可以设置AVAssetExportSession.videoCompostion,然后您就可以将合成视频导出到磁盘.

    2023-02-09 21:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有