如何解决使用 AVAssetImageGenerator 得到一些 nil CGImages
我想从视频中提取帧作为 UIImage。这就是我使用 AVAssetimageGenerator
的原因。
首先我保存了 times
var frameCount = 0;
var maximumFrame = 300;
let duration = asset.duration
let vid_length : CMTime = duration
let timeScale = vid_length.timescale
let seconds : Double = CMTimeGetSeconds(vid_length)
var times = [CMTime]()
var timeForGetimage : Double = 0
let step : Double = 0.033
while(frameCount < maximumFrame && timeForGetimage <= seconds) {
let time : CMTime = CMTimeMakeWithSeconds(timeForGetimage,preferredTimescale: timeScale)
times.append(time)
timeForGetimage+=step
frameCount += 1
}
为了将帧作为图像,我使用了这种方法
let imageGenerator : AVAssetimageGenerator = AVAssetimageGenerator.init(asset: asset)
imageGenerator.requestedTimetoleranceAfter = CMTime.zero
imageGenerator.requestedTimetoleranceBefore = CMTime.zero
imageGenerator.appliesPreferredTrackTransform = true
imageGenerator.maximumSize = CGSize(width: height,height: height)
imageGenerator.generateCGImagesAsynchronously(forTimes: times as [NSValue]) { (requestedTime,cgImage,actualTime,result,error) in
if result == .succeeded {
let thumb : UIImage = UIImage.init(cgImage: cgImage!)
/// doing some operation
} else {
print("nil") /// I've found some images are nil
}
}
这里我得到了一些 nil cgImages。我不知道为什么他们是零。但是我需要使用时间段将所有帧作为 cgImages 获取。
怎么解决?
我知道还有另一种使用 imageGenerator.copyCGImage
方法的方法。但是将所有帧生成为 UIImage```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。