首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从AVAssetImageGenerator生成镜像会在不同时间提供相同的镜像副本

从AVAssetImageGenerator生成镜像会在不同时间提供相同的镜像副本
EN

Stack Overflow用户
提问于 2016-09-16 14:44:24
回答 1查看 1.7K关注 0票数 4

我正在尝试使用以下代码从视频生成缩略图。它确实会生成UIImages,但图像在不同的时间都是相同的。例如,对于一个持续3秒的视频,它将生成6个图像,但所有图像在视频的开头都是相同的图像。你知道我做错了什么吗?

代码语言:javascript
运行
复制
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))
                }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-17 08:15:35

默认情况下,当获取给定时间的帧时,AVAssetImageGenerator为自己提供了非常宽松的容差。如果你使用copyCGImageactualTime,你会在实践中看到它大约是一到两秒,尽管从技术上讲它是kCMTimeFlags_PositiveInfinity,所以在你的短视频中有一半的帧将是重复的。

因此,将公差设置为较小的值以查看独特的帧:

代码语言:javascript
运行
复制
imageGenerator.requestedTimeToleranceBefore = CMTimeMake(1, 15)
imageGenerator.requestedTimeToleranceAfter = CMTimeMake(1, 15)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39525253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档