Я хочу применить CIFilter к видео и сохранить этот фильтр примененного видео.[экспорт занимает слишком много времени] - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу применить 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)
    }
    )
...