加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Swift从视频中抓取帧

发布时间:2020-12-14 05:44:42 所属栏目:百科 来源:网络整理
导读:我想在特定时间从视频中抓取帧.我正在调用我的抓取框架函数,其时间指定为秒为Float64. 问题是它没有抓住当前帧.它似乎忽略了小数.如果我用例如1.22和1.70调用该函数,它将返回相同的帧.对于Swift来说,我是新手,所以我猜我没有把CMTime对象搞定.所以有人能看出
我想在特定时间从视频中抓取帧.我正在调用我的抓取框架函数,其时间指定为秒为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))
感谢@ eric-d发现这篇文章:
iOS Take Multiple Screen Shots

我设法找出添加:

assetImgGenerate.requestedTimeToleranceAfter = kCMTimeZero;
    assetImgGenerate.requestedTimeToleranceBefore = kCMTimeZero;

…对我的功能将做的伎??俩.

我更新的函数如下所示:

func generateThumnail(url : NSURL,fromTime:Float64) -> UIImage {
    var asset :AVAsset = AVAsset.assetWithURL(url) as! AVAsset
    var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
    assetImgGenerate.appliesPreferredTrackTransform = true
    assetImgGenerate.requestedTimeToleranceAfter = kCMTimeZero;
    assetImgGenerate.requestedTimeToleranceBefore = kCMTimeZero;
    var error       : NSError? = nil
    var time        : CMTime = CMTimeMakeWithSeconds(fromTime,fromTime: Float64(grabTime))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读