从AVAssetImageGenerator生成图像会在不同时间生成相同的图像副本

时间:2016-09-16 06:44:24

标签: ios avfoundation

我正在尝试使用以下代码从视频生成缩略图图像。它确实生成了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))
                }

1 个答案:

答案 0 :(得分:5)

默认情况下,AVAssetImageGenerator在获取给定时间的帧时会给出非常宽松的容差。如果你使用copyCGImage' actualTime,你会在实践中看到它只有一两秒钟,虽然从技术上来说它是{{1} },所以在你的短视频中,你的一半帧将是重复的。

因此,将公差设置为较小的值以查看唯一的框架:

kCMTimeFlags_PositiveInfinity