Я хочу применить CIFilter к видео и сохранить тот фильтр, к которому применено видео.
Я использую AVMutableVideoComposition (также пробовал с AVVideoComposition) для применения фильтра к видео и его работы нормально с AVPlayer.но когда я экспортирую отфильтрованное видео, локальное сохранение занимает слишком много времени (20-секундное видео занимает около 6-8 минут).Пожалуйста, объясните мне, что я делаю не так ... Спасибо!
let item = AVPlayerItem(asset: currentAsset!)
let videoComposition = AVMutableVideoComposition(asset: currentAsset!) { request in
let filter = CIFilter(name: "CIColorInvert")!
let source = request.sourceImage.clampedToExtent()
filter.setValue(source, forKey: kCIInputImageKey)
let output = filter.outputImage!.cropped(to: request.sourceImage.extent)
// Provide the filter output to the composition
request.finish(with: output, context: nil)
}
item.videoComposition = videoComposition
self.player.replaceCurrentItem(with: item)
let exporter = AVAssetExportSession(asset: item.asset, presetName: AVAssetExportPresetHighestQuality)
exporter?.videoComposition = videoComposition
exporter?.outputFileType = .mp4
let filename = "filename.mp4"
let documentsDirectory = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask).last!
let outputURL = documentsDirectory.appendingPathComponent(filename)
exporter?.outputURL = outputURL
exporter?.exportAsynchronously(completionHandler: {
guard exporter?.status == .completed else {
print("export failed: \(exporter?.error)")
return
}
print("done: ",outputURL)
}
)