【发布时间】:2023-03-22 09:35:01
【问题描述】:
我正在 Swift3 中开发基于视频的应用程序。根据视频时长,我有一个视频网址和一个范围滑块,用户可以从滑块中选择任何最小值和最大值。如果假设用户选择了最小值 3 秒和最大值 7 秒,那么在此期间我需要生成一个视频缩略图图像。为此,我使用AVAssetImageGenerator 来生成它,我尝试了以下两个代码来实现这一点:
func createThumbnailOfVideoFromFileURL(_ strVideoURL: URL) -> UIImage?{
let asset = AVAsset(url: strVideoURL)
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMake(1, 30)
let img = try? assetImgGenerate.copyCGImage(at: time, actualTime: nil)
guard let cgImage = img else { return nil }
let frameImg = UIImage(cgImage: cgImage)
return frameImg
}
func generateThumbnailForUrl(vidUrl:URL) -> UIImage {
let asset = AVURLAsset(url: vidUrl, options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
var thmbnlImg = UIImage()
do{
let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
thmbnlImg = UIImage(cgImage: cgImage)
thmbnlImg = thmbnlImg.imageRotatedByDegrees(degrees: 90.0, flip: false)
}
catch{
print(error)
}
// !! check the error before proceeding
return thmbnlImg
}
但问题是我使用上述两种方法都得到了相同的缩略图,因为我没有在这两种方法中设置持续时间。如何添加最小和最大持续时间来为每个不同的持续时间生成不同的缩略图。请帮我解决我的问题。谢谢!
编辑:我尝试将持续时间设置为:
let time: CMTime = CMTimeMakeWithSeconds(rangeSlider!.lowerValue, 1)
然后我得到不同的缩略图图像,但对于某些滑块范围,我也得到零缩略图图像。谁能知道如何在CMTimeMakeWithSeconds 中设置preferredTimeScale 值?
【问题讨论】:
标签: ios swift video avasset video-thumbnails