Création de vignettes à partir de la video locale dans Swift

Comment créer une vignette dans swift à partir d'un file video local?

Par exemple si le path du file video se trouve ici:

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

Je vous remercie.

Traduit avec quelques modifications de:

Première image d'une video utilisant 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 réponse de BaseZen a traduit Swift 3 / Swift 4

Vous devez définir l'location de la video dont vous souhaitez créer une miniature en tant que path d'access de l'URL, comme:

Ne pas oublier d' import AVFoundation

 func getThumbnailFrom(path: URL) -> UIImage? { do { let asset = AVURLAsset(url: path , options: nil) let imgGenerator = AVAssetImageGenerator(asset: asset) imgGenerator.appliesPreferredTrackTransform = 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 } } 

Pour tout le monde ayant des problèmes avec cela, j'ai créé la baisse suivante dans l'exemple hébergé sur Github

Réponse de BaseZen traduite en Swift 2:

 import UIKit import AVFoundation do { let asset = AVURLAsset(URL: NSURL(fileURLWithPath: "/that/long/path"), options: nil) let imgGenerator = AVAssetImageGenerator(asset: asset) imgGenerator.appliesPreferredTrackTransform = 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)") } 

Il est préférable d'écrire un code less simple pour la compréhension. C'est ce que je convertis les solutions dans Swift 3.1

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

J'espère que ça va aider quelqu'un.