【发布时间】:2018-06-11 07:30:36
【问题描述】:
在我的应用中,我想生成视频的多个缩略图,最好是高质量的缩略图。我的旧方法是执行 15 次循环,并在不同时间复制 CGImage。如下图
func generateThumbnails(_ fileURL:URL) {
let asset = AVAsset(url: fileURL)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.apertureMode = AVAssetImageGeneratorApertureMode.cleanAperture
imageGenerator.appliesPreferredTrackTransform = true
let duration = asset.duration
let seconds = CMTimeGetSeconds(duration)
let addition = seconds / 15
var number = 1.0
do {
while number < seconds {
let thumbnailCGImage = try imageGenerator.copyCGImage(at: CMTimeMake(Int64(number),1), actualTime: nil)
let image = UIImage(cgImage: thumbnailCGImage)
thumbnails.append(image)
number += addition
}
} catch let err {
return
}
}
但是,在做了更多研究之后,我发现使用异步生成缩略图更合乎逻辑
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.generateCGImagesAsynchronously(forTimes: [NSValue], completionHandler: AVAssetImageGeneratorCompletionHandler)
但是,我真的不知道应该在 [NSValue] 和完成处理程序中输入什么。
我只需要解释一下如何以这种方式生成缩略图,看看这样做是否更好。
【问题讨论】:
-
您没有阅读文档???
An array of NSValue objects, each containing a CMTime, specifying the asset times at which an image is requested. -
记得阅读fffffine手册!
标签: ios swift avasset avassetimagegenerator