Crear una miniatura del video local en swift

¿Cómo crear una miniatura en swift desde un file de video local?

Por ejemplo, si la ruta del file de video se encuentra aquí:

file:///Users/Dev/Library/Developer/CoreSimulator/Devices/F33222DF-D8F0-448B-A127-C5B03C64D0DC/data/Containers/Data/Application/4BC62DBF-0108-453C-9324-5BC0E356FE24/tmp/trim.059D11E6-F0EF-43DB-9E97-CA4F1F95D6B6.MOV

Gracias.

Traducido con algunas ediciones de:

Primer fotogtwig de un video con AVFoundation

  var err: NSError? = nil let asset = AVURLAsset(URL: NSURL(fileURLWithPath: "/that/long/path"), options: nil) let imgGenerator = AVAssetImageGenerator(asset: asset) let cgImage = imgGenerator.copyCGImageAtTime(CMTimeMake(0, 1), actualTime: nil, error: &err) // !! check the error before proceeding let uiImage = UIImage(CGImage: cgImage) let imageView = UIImageView(image: uiImage) // lay out this image view, or if it already exists, set its image property to uiImage 

La respuesta de BaseZen traducida Swift 3 / Swift 4

Debe establecer la location del video en el que desea hacer una miniatura como ruta de acceso de resources de url, como:

No te olvides de import AVFoundation

 func getThumbnailFrom(path: URL) -> UIImage? { do { let asset = AVURLAsset(url: path , options: nil) let imgGenerator = AVAssetImageGenerator(asset: asset) imgGenerator.appliesPrefernetworkingTrackTransform = true let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil) let thumbnail = UIImage(cgImage: cgImage) return thumbnail } catch let error { print("*** Error generating thumbnail: \(error.localizedDescription)") return nil } } 

Para todos los que tienen problemas con esto, he creado la siguiente caída en el ejemplo alojado en Github

La respuesta de BaseZen se tradujo a Swift 2:

 import UIKit import AVFoundation do { let asset = AVURLAsset(URL: NSURL(fileURLWithPath: "/that/long/path"), options: nil) let imgGenerator = AVAssetImageGenerator(asset: asset) imgGenerator.appliesPrefernetworkingTrackTransform = true let cgImage = try imgGenerator.copyCGImageAtTime(CMTimeMake(0, 1), actualTime: nil) let uiImage = UIImage(CGImage: cgImage) let imageView = UIImageView(image: uiImage) // lay out this image view, or if it already exists, set its image property to uiImage } catch let error as NSError { print("Error generating thumbnail: \(error)") } 

Es mejor escribir un código less simple para entenderlo. Esto es lo que convierto las soluciones en Swift 3.1

 import AVFoundation func videoPreviewUIImage(moviePath: URL) -> UIImage? { let asset = AVURLAsset(url: moviePath) let generator = AVAssetImageGenerator(asset: asset) generator.appliesPrefernetworkingTrackTransform = true let timestamp = CMTime(seconds: 2, prefernetworkingTimescale: 60) if let imageRef = try? generator.copyCGImage(at: timestamp, actualTime: nil) { return UIImage(cgImage: imageRef) } else { return nil } } 

Espero que ayude a alguien.