Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating thumbnail from local video in swift

How to create thumbnail in swift from a local video file ?

For example if the video file path is located here :

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

Thank you.

like image 656
Ralph Avatar asked Aug 03 '15 03:08

Ralph


2 Answers

Translated with some edits from:

First frame of a video using 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 
like image 118
BaseZen Avatar answered Sep 22 '22 05:09

BaseZen


BaseZen's answer translated Swift 3 / Swift 4

You need to set the location of the video you want to make a thumbnail of as the url asset path, like:

Don't forget to import AVFoundation

func generateThumbnail(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(value: 0, timescale: 1), actualTime: nil)         let thumbnail = UIImage(cgImage: cgImage)         return thumbnail     } catch let error {         print("*** Error generating thumbnail: \(error.localizedDescription)")         return nil     } } 

For everyone having issues with this I have created the following drop in example hosted on Github

like image 44
David Seek Avatar answered Sep 21 '22 05:09

David Seek