iPhone Read UIimage (frames) from video with AVFoundation

后端 未结 5 2079
耶瑟儿~
耶瑟儿~ 2020-11-29 18:14

Sorry for my english) Looking for information about read frames from a video with iPhone i found this project, http://www.codza.com/extracting-frames-from-movies-on-iphone/c

5条回答
  •  野性不改
    2020-11-29 18:21

    In Swift 4 this worked for me with some modifications, mainly changing the "at" parameter of imageGenerator.copyCGImage to a CMTime type:

    func showFrame(from file:String) {
        let file = file.components(separatedBy: ".")
        guard let path = Bundle.main.path(forResource: file[0], ofType:file[1]) else {
            debugPrint( "\(file.joined(separator: ".")) not found")
            return
        }
        let url = URL(fileURLWithPath: path)
        let image = previewImageForLocalVideo(url: url)
        let imgView = UIImageView(image: image)
        view.addSubview(imgView)
    }    
    
    func previewImageForLocalVideo(url:URL) -> UIImage? {
        let asset = AVAsset(url: url)
        let imageGenerator = AVAssetImageGenerator(asset: asset)
        imageGenerator.appliesPreferredTrackTransform = true
        let tVal = NSValue(time: CMTimeMake(12, 1)) as! CMTime
        do {
            let imageRef = try imageGenerator.copyCGImage(at: tVal, actualTime: nil)
            return UIImage(cgImage: imageRef)
        }
        catch let error as NSError
        {
            print("Image generation failed with error \(error)")
            return nil
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        showFrame(from:"video.mp4")
    }
    

    Source

提交回复
热议问题