如何快速生成 1 秒视频的拇指图像?
Posted
技术标签:
【中文标题】如何快速生成 1 秒视频的拇指图像?【英文标题】:How to generate thumb image for 1 second video in swift? 【发布时间】:2021-04-14 12:46:47 【问题描述】:我无法生成 1 秒视频的缩略图。我试过下面的代码,但它每次都会生成黑色图像。我尝试将时间刻度传递为(0,30),(0,1)。如果视频超过 1.5 秒,它就可以工作。
static func thumbnailFromVideo(videoUrl: URL, time: CMTime) -> UIImage
let asset: AVAsset = AVAsset(url: videoUrl) as AVAsset
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
do
let cgImage = try imgGenerator.copyCGImage(at: time, actualTime: nil)
let uiImage = UIImage(cgImage: cgImage)
return uiImage
catch
return UIImage()
【问题讨论】:
【参考方案1】:如果您需要帧精确的缩略图,您需要将请求的前后时间公差设置为零:
来自文档:
将requestedTimeToleranceBefore和requestedTimeToleranceAfter的值设置为零以请求帧精确的图像生成;这可能会导致额外的解码延迟。
imgGenerator.requestedTimeToleranceBefore = .zero
imgGenerator.requestedTimeToleranceAfter = .zero
【讨论】:
【参考方案2】:这对我有用。
func getvideosnapshot(url : URL , completion : @escaping ((UIImage?) ->()))
DispatchQueue.global().async
let asset: AVAsset = AVAsset(url: url)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
let timestamp = CMTime(value: 1, timescale: 600)
do
let thumbnail = try imageGenerator.copyCGImage(at: timestamp, actualTime: nil)
DispatchQueue.main.async
completion(UIImage(cgImage: thumbnail))
catch let err as NSError
// print(err)
completion(nil)
【讨论】:
以上是关于如何快速生成 1 秒视频的拇指图像?的主要内容,如果未能解决你的问题,请参考以下文章