Aplicar un CIFilter a un archivo de video y guardarlo

¿Existe alguna forma rápida y ligera de aplicar unCIFilter a un video? Antes de que se mencione, yotener miró aGPUImage - parece muy poderosomagia código, pero es realmente excesivo para lo que estoy tratando de hacer.

Esencialmente, me gustaría

Tome un archivo de video, digamos almacenado en/tmp/myVideoFile.mp4Aplicar unCIFilter a este archivo de videoGuarde el archivo de video en una ubicación diferente (o la misma), digamos/tmp/anotherVideoFile.mp4

He podido aplicar un CIFilter a un video que se reproduce de manera extremadamente fácil y rápida usandoAVPlayerItemVideoOutput

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
        }
    }
}

Esto funciona muy bien, pero he estado teniendomucho solo un pequeño problema para descubrir cómo aplicar un filtro a un archivo de video ya guardado. Existe la opción de hacer básicamente lo que hice anteriormente, usando unAVPlayer, reproducir el video y obtener el búfer de píxeles de cada fotograma a medida que se reproduce, pero esto no funcionará para el procesamiento de video en segundo plano. No creo que los usuarios agradecerían tener que esperar mientras su video sea para que se aplique el filtro.

En forma de código demasiado simplificado, estoy buscando algo como esto:

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"))

¿Hay alguna forma rápida (una vez más, sin involucrar a GPUImage e idealmente trabajando en iOS 7) para aplicar un filtro a un archivo de video y luego guardarlo? Por ejemplo, esto tomaría un video guardado, cárguelo en unAVAsset, aplicar unCIFilter, y luego guarde el nuevo video en una ubicación diferente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta