Применение CIFilter к видеофайлу и его сохранение

Есть ли какой-нибудь быстрый и легкий способ нанесенияCIFilter к видео? Прежде чем это упомянуто, яиметь посмотрел наGPUImage - выглядит очень мощномагия код, но это действительно излишне для того, что я пытаюсь сделать.

По сути, я хотел бы

Возьмите видеофайл, скажем, хранится в/tmp/myVideoFile.mp4ПрименитьCIFilter к этому видеофайлуСохраните видеофайл в другом (или том же) месте, скажем/tmp/anotherVideoFile.mp4

Я смог применить CIFilter к видео, которое воспроизводится очень легко и быстро, используяAVPlayerItemVideoOutput

let player = AVPlayer(playerItem: AVPlayerItem(asset: video))
let output = AVPlayerItemVideoOutput(pixelBufferAttributes: nil)
player.currentItem?.addOutput(self.output)
player.play()

let displayLink = CADisplayLink(target: self, selector: #selector(self.displayLinkDidRefresh(_:)))
displayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)

func displayLinkDidRefresh(link: CADisplayLink){
    let itemTime = output.itemTimeForHostTime(CACurrentMediaTime())
    if output.hasNewPixelBufferForItemTime(itemTime){
        if let pixelBuffer = output.copyPixelBufferForItemTime(itemTime, itemTimeForDisplay: nil){
            let image = CIImage(CVPixelBuffer: pixelBuffer)
            // apply filters to image
            // display image
        }
    }
}

Это прекрасно работает, но у меня былимного просто малейшая проблема с поиском того, как применить фильтр к уже сохраненному видеофайлу. Есть возможность в основном просто делать то, что я делал выше, используяAVPlayerвоспроизведение видео и получение пиксельного буфера из каждого кадра во время воспроизведения, но это не сработает для обработки видео в фоновом режиме. Я не думаю, что пользователи оценят необходимость ждать, пока в их видео будет применен фильтр.

В смысле упрощенного кода, я ищу что-то вроде этого:

var newVideo = AVMutableAsset() // We'll just pretend like this is a thing

var originalVideo = AVAsset(url: NSURL(urlString: "/example/location.mp4"))
originalVideo.getAllFrames(){(pixelBuffer: CVPixelBuffer) -> Void in
    let image = CIImage(CVPixelBuffer: pixelBuffer)
        .imageByApplyingFilter("Filter", withInputParameters: [:])

    newVideo.addFrame(image)
}

newVideo.exportTo(url: NSURL(urlString: "/this/isAnother/example.mp4"))

Есть ли какой-нибудь быстрый (опять же, не связанный с GPUImage и идеально работающий в iOS 7) способ применить фильтр к видеофайлу и затем сохранить его? Например, это займет сохраненное видео, загрузите его вAVAsset, применитьCIFilterи затем сохраните новое видео в другом месте.

Ответы на вопрос(1)

Ваш ответ на вопрос