使用 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...