gpt4 book ai didi

ios - AVAssetImageGenerator.generateCGImagesAsynchronously 的错误帧

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:52 26 4
gpt4 key购买 nike

根据文档,generateCGImagesAsynchronously 接受一个 NSValue 数组,并根据视频和给定时间生成帧,并将其作为回调返回。

我使用以下代码生成值列表

    var values : [NSValue] = []
let frameDuration = CMTimeMake(1, timeScale)
for i in 0..<duration{
let lastFrameTime = CMTimeMake(Int64(i), timeScale)
let presentationTime = (i == 0) ? lastFrameTime : CMTimeAdd(lastFrameTime, frameDuration)

values.append(NSValue(time: presentationTime))

//Next two lines of codes are just to cross check the output
let image = try! imageGenerator.copyCGImage(at: presentationTime, actualTime: nil)
let imageUrl = FileManagerUtil.getTempFileName(parentFolder: FrameExtractor.EXTRACTED_IMAGE, fileNameWithExtension: "\(Constants.FRAME_SUFFIX)\(i)\(".jpeg")")
}

正如您在上面的代码中看到的,我使用同步方法交叉检查了结果,我可以确认 values 数组包含正确的时间引用。

但是当相同的数组被传递给 generateImageAsynchronously 方法时,对于不同的时间戳,我得到相同帧的副本 10 次。也就是说,如果我的视频是 10 秒,那么我会得到 300 帧(30 fps),但第一秒的帧每个重复 10 次。这有点像在请求 1 秒时返回 0.1 秒的帧。

P.S: Though synchronous method is working fine, it is taking twice the time taken by the asynchronous method. May be because it is returning same frames. But I need it working to check the actual time usages.

最佳答案

您需要将 requestedTimeToleranceBeforerequestedTimeToleranceAfter 设置为您想要的精度,例如 .zero 但这可能会导致额外的延迟和成本生成图像。

例如:

imageGenerator.requestedTimeToleranceBefore = .zero
imageGenerator.requestedTimeToleranceAfter = .zero

这样你就可以得到当时的准确帧。

关于ios - AVAssetImageGenerator.generateCGImagesAsynchronously 的错误帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com