如何在 Swift 中使用 copyCGImageAtTime 从视频中创建缩略图?

Posted

技术标签:

【中文标题】如何在 Swift 中使用 copyCGImageAtTime 从视频中创建缩略图?【英文标题】:How do I create a thumbnail from a video using copyCGImageAtTime in Swift? 【发布时间】:2015-07-02 16:33:35 【问题描述】:

我正在尝试使用 copyCGImageAtTime 从视频创建缩略图,但我不断收到以下错误:

致命错误:在展开 Optional 时意外发现 nil 价值。

我在调用copyCGImageAtTime 后使用了线路中断,发现imgnil。我做错了什么?

这是我的代码:

 func generateThumbnail() -> UIImage
 
        var fileArray = NSBundle.mainBundle().pathsForResourcesOfType    (".mp4", inDirectory: "")
        var moviePath : String = fileArray[1] as! String
        let url = NSURL(string: moviePath)
        var asset : AVAsset = AVAsset.assetWithURL(url) as! AVAsset
        var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
        assetImgGenerate.appliesPreferredTrackTransform = true
        var durationSeconds: Float64 = CMTimeGetSeconds(asset.duration)
        var time: CMTime = CMTimeMakeWithSeconds(durationSeconds/2.0, 600)
        var actualTime: UnsafeMutablePointer<CMTime> = nil
        var error: NSErrorPointer = nil
        var img: CGImage! = assetImgGenerate.copyCGImageAtTime(time, actualTime: actualTime, error: error)
        var frameImg : UIImage = UIImage(CGImage: img)!
        return frameImg

【问题讨论】:

【参考方案1】:

这对我有用。但是,我从这种方法中得到了信息。也许你可以根据你的代码调整它。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) 
let tempImage = info[UIImagePickerControllerMediaURL] as! NSURL!
let pathString = tempImage.relativePath

var url:NSURL = NSURL(fileURLWithPath: pathString!)!
var asset:AVAsset = AVAsset.assetWithURL(url) as! AVAsset
var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
var time: CMTime = asset.duration
    time.value = 0

var imageRef: CGImage! = assetImgGenerate.copyCGImageAtTime(time, actualTime: nil, error: nil)

var frameImg : UIImage = UIImage(CGImage: imageRef)!

return framImg

【讨论】:

以上是关于如何在 Swift 中使用 copyCGImageAtTime 从视频中创建缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 kotlin native 中使用 swift 库?

如何在 Swift 中使用 Apple 地图 - 你必须使用 C 还是 Swift 可以?

如何在 Swift 中使用 MKPolylineView

如何在 Swift 中使用`syslog`

如何在 swift 项目中使用 TPKeyboardAvoiding?

如何在 Playground 中使用 Swift 包管理器