我想在特定时间从视频中抓取帧。 我正在调用我的抓帧函数,并使用 Float64 指定的秒数作为时间。 问题是它没有抓取当前帧。 它似乎忽略了小数部分。 如果我用1.22和1.70调用该函数,它将返回相同的帧。 当涉及 Swift 时,我还很新,所以我猜我没有正确理解 CMTime 对象。 那么有人能看出问题在哪里吗?
func generateThumnail(url : NSURL, fromTime:Float64) -> UIImage {
var asset :AVAsset = AVAsset.assetWithURL(url) as! AVAsset
var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
var error : NSError? = nil
var time : CMTime = CMTimeMakeWithSeconds(fromTime, 600)
var img : CGImageRef = assetImgGenerate.copyCGImageAtTime(time, actualTime: nil, error: &error)
var frameImg : UIImage = UIImage(CGImage: img)!
return frameImg
}
var grabTime = 1.22
img = generateThumnail(urlVideo, fromTime: Float64(grabTime))
var actual: CMTime = CMTimeMake(0, 0)
并像这样传递它:var img = assetImgGenerate.copyCGImageAtTime(time, actualTime: &actual, error: &error)
,然后使用以下内容检查:let inf = CMTimeCopyAsDictionary(actual, kCFAllocatorDefault)
println(inf)
。该字典包含用于抓取的实际属性,对于调试和查找良好的时间刻度非常有用。 - Eric Aya