iOS 視訊新增濾鏡效果

weixin_33797791發表於2017-11-28

為視訊新增濾鏡效果的思路如下
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

相關文章