iOS 视频添加滤镜效果

为视频添加滤镜效果的思路如下
1.使用AVPlayer + CIFilter进行渲染

参考文档 Processing Video with AV Foundation

关键代码

//1
AVURLAsset *asset1 = [AVURLAsset assetWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample_clip1" ofType:@"m4v"]]];

//2
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
AVVideoComposition *composition1 = [AVVideoComposition videoCompositionWithAsset:asset1 applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest * _Nonnull request) {
//3
    CIImage *source = request.sourceImage.imageByClampingToExtent;
    int currentTime = request.compositionTime.value / request.compositionTime.timescale;
    if (currentTime < 3) {
        [request finishWithImage:source context:nil];
    } else {
        [filter setValue:source forKey:kCIInputImageKey];
//4
        CIImage *output = [filter.outputImage imageByCroppingToRect:request.sourceImage.extent];
        [request finishWithImage:output context:nil];
    }
}];

//5
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:asset1];
item.videoComposition = composition;

步骤1:读取本地的视频路径
步骤2:设置CIFilter效果,使用AVVideoComposition处理渲染过程
步骤3:获取视频帧并转换成CIImage以供CIFilter进行渲染,可以设定渲染的时间
步骤4:将渲染完成的CIImage返还给request
步骤5:将视频组成装入播放文件中播放即可

存在问题:
1.播放与导出时加入滤镜的情况下cpu占用100%

实例参见 github Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容