【发布时间】:2021-01-04 22:55:01
【问题描述】:
有一个持续时间为 3 秒的视频文件。我需要创建 30 帧 - UIImages。每 0.1 秒捕获一次图像。 我尝试使用 AVAssetImageGenerator 和 CMTimeMake,但我总是得到 30 个相似的图像,或者 15 个相似的图像和 15 个相似的图像。
请帮助了解如何从该视频中制作这种幻灯片。或者也许有更好的方法来做到这一点。
请看下面的代码:
static func generate_Thumbnails(forVideoWithURL url : URL) -> [UIImage]? {
let asset = AVAsset(url: url)
var result: [UIImage] = []
let assetImgGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerator.appliesPreferredTrackTransform = true
for i in 1...30 {
let time: CMTime = CMTimeMake(value: Int64(i), timescale: 10)
do {
let img: CGImage = try assetImgGenerator.copyCGImage(at: time, actualTime: nil)
let frameImg: UIImage = UIImage(cgImage: img)
result.append(frameImg)
} catch {
//return nil
}
}
return result
}
【问题讨论】:
-
可能是因为您没有要求低时间容忍度。
-
@matt 你能解释一下吗?
-
这只是一个想法。请参阅docs:“生成图像的实际时间在 [requestedTime-requestedTimeToleranceBefore, requestedTime+requestedTimeToleranceAfter] 范围内,可能与请求的时间不同以提高效率。”听起来可能很相关。
标签: ios swift video-processing avassetimagegenerator