当前位置: 首页 > 面试题库 >

使用Swift抓取视频中的帧

穆铭晨
2023-03-14
问题内容

我想在特定时间从视频中抓取帧。我正在将我的抓取帧函数调用为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))

问题答案:

我设法找出添加:

    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, 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))


 类似资料:
  • 本接口需要客户根据需要上传的视频的各个属性信息来请求该接口,并获取系统分配的视频id(videoid),以便后续接收系统处理视频完成后的回调信息. 本接⼝需要使⽤THQS⽅式进行请求参数校验 (关于THQS算法的细节请参⻅Spark API附录I), 本接口为GET请求,为保护用户APIKey以及其他信息本接口不⽀持跨域访问。 地址为: https://spark.bokecc.com/api/v

  • 什么是抓取频次  抓取频次是搜索引擎在单位时间内(天级)对网站服务器抓取的总次数,如果搜索引擎对站点的抓取频次过高,很有可能造成服务器不稳定,Baiduspider会根据网站内容更新频率和服务器压力等因素自动调整抓取频次。 什么情况下可以进行抓取频次上限调整 首先,Baiduspider会根据网站服务器压力自动进行抓取频次调整。其次,如果Baiduspider的抓取影响了网站稳定性,站长可以通过此

  • 问题内容: 感谢downloadTaskWithURL,我正在下载视频,并使用以下代码将其保存到我的画廊: 它在我的模拟器上可以正常工作,但是在我的iPad上,即使出现视频也不会保存视频。你知道为什么吗? 我的控制台中也出现了该消息 无法从文件创建数据(空) 问题答案: 请通过代码检查注释: Xcode 8•Swift 3

  • 本文向大家介绍使用python实现抓取腾讯视频所有电影的爬虫,包括了使用python实现抓取腾讯视频所有电影的爬虫的使用技巧和注意事项,需要的朋友参考一下 用python实现的抓取腾讯视频所有电影的爬虫 总结 以上所述是小编给大家介绍的使用python实现抓取腾讯视频所有电影的爬虫,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

  • 我正在编写一个Swift应用程序,通过网络发送iPhone摄像头的视频输入(帧),这样我以后就可以在macOS应用程序上显示它们了。

  • 问题内容: 如何在Swift中使用AV Kit Player View Controller播放视频? 问题答案: 雨燕3.x-5.x 必要: 导入AVKit , 导入AVFoundation 即使使用AVPlayer,也需要AVFoundation框架 如果要使用 AVPlayerViewController : 或只是 AVPlayer : 最好将此代码放入方法中: 覆盖func viewDi