我正在尝试使用以下代码从视频生成缩略图。它确实会生成UIImages,但图像在不同的时间都是相同的。例如,对于一个持续3秒的视频,它将生成6个图像,但所有图像在视频的开头都是相同的图像。你知道我做错了什么吗?
let asset = AVAsset(url: videoURL)
let imageGenerator = AVAssetImageGenerator(asset: asset)
let scale = 2
let step = 1
let duration = Int(CMTimeGetSeconds(asset.duration) * Double(scale))
var epoches = [NSValue]()
for i in stride(from: 1, to: duration, by: step) {
//let time = CMTimeMake(Int64(i), Int32(scale))
let time = CMTimeMakeWithSeconds(Double(i)/Double(scale), Int32(scale))
let cgImage = try! imageGenerator.copyCGImage(at: time, actualTime: nil)
let uiImage = UIImage(cgImage: cgImage)
self?.imagePool.append(uiImage)
epoches.append(NSValue(time: time))
}发布于 2016-09-17 08:15:35
默认情况下,当获取给定时间的帧时,AVAssetImageGenerator为自己提供了非常宽松的容差。如果你使用copyCGImage的actualTime,你会在实践中看到它大约是一到两秒,尽管从技术上讲它是kCMTimeFlags_PositiveInfinity,所以在你的短视频中有一半的帧将是重复的。
因此,将公差设置为较小的值以查看独特的帧:
imageGenerator.requestedTimeToleranceBefore = CMTimeMake(1, 15)
imageGenerator.requestedTimeToleranceAfter = CMTimeMake(1, 15)https://stackoverflow.com/questions/39525253
复制相似问题