gpt4 book ai didi

ios - 尝试以预期帧速率将 CVPixelBuffers 附加到 AVAssetWriterInputPixelBufferAdaptor

转载 作者:行者123 更新时间:2023-11-29 05:20:04 24 4
gpt4 key购买 nike

我正在尝试以预期的帧速率将 CVPixelBuffers 附加到 AVAssetWriterInputPixelBufferAdaptor,但它似乎太快了,而且我的数学失败了。这不是从相机捕捉,而是捕捉变化的图像。实际视频比捕获的时间要快得多。

我有一个函数,每 1/24 秒追加一次 CVPixelBuffer。因此,我尝试向上次添加 1/24 秒的偏移量。

我已经尝试过:

let sampleTimeOffset = CMTimeMake(value: 100, timescale: 2400)

和:

let sampleTimeOffset = CMTimeMake(value: 24, timescale: 600)

和:

let sampleTimeOffset = CMTimeMakeWithSeconds(0.0416666666, preferredTimescale: 1000000000)

我正在添加到 currentSampleTime 并像这样附加:

self.currentSampleTime = CMTimeAdd(currentSampleTime, sampleTimeOffset)

let success = self.assetWriterPixelBufferInput?.append(cv, withPresentationTime: currentSampleTime)

我想到的另一个解决方案是获取上次时间和当前时间之间的差异,并将其添加到 currentSampleTime 中以确保准确性,但不确定如何执行。

最佳答案

我找到了一种通过比较上次时间(以毫秒为单位)与当前时间(以毫秒为单位)来准确捕获时间延迟的方法。

首先,我有一个通用的当前毫秒时间函数:

func currentTimeInMilliSeconds()-> Int
{
let currentDate = Date()
let since1970 = currentDate.timeIntervalSince1970
return Int(since1970 * 1000)
}

当我创建一个编写器时,(当我开始录制视频时)我将类中的变量设置为当前时间(以毫秒为单位):

currentCaptureMillisecondsTime = currentTimeInMilliSeconds()

然后,在我的函数中,应该调用 1/24 秒并不总是准确的,因此我需要获取我开始编写时或上次函数调用时之间的毫秒差。

将毫秒转换为秒,并将其设置为 CMTimeMakeWithSeconds。

let lastTimeMilliseconds = self.currentCaptureMillisecondsTime
let nowTimeMilliseconds = currentTimeInMilliSeconds()
let millisecondsDifference = nowTimeMilliseconds - lastTimeMilliseconds

// set new current time
self.currentCaptureMillisecondsTime = nowTimeMilliseconds

let millisecondsToSeconds:Float64 = Double(millisecondsDifference) * 0.001

let sampleTimeOffset = CMTimeMakeWithSeconds(millisecondsToSeconds, preferredTimescale: 1000000000)

我现在可以在帧中附加实际发生的准确延迟。

self.currentSampleTime = CMTimeAdd(currentSampleTime, sampleTimeOffset)

let success = self.assetWriterPixelBufferInput?.append(cv, withPresentationTime: currentSampleTime)

当我写完视频并将其保存到我的相机胶卷时,这就是我录制时的确切持续时间。

关于ios - 尝试以预期帧速率将 CVPixelBuffers 附加到 AVAssetWriterInputPixelBufferAdaptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757263/

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