gpt4 book ai didi

swift - CMTime 在编解码媒体之外是否有任何实际应用

转载 作者:行者123 更新时间:2023-12-04 10:08:34 27 4
gpt4 key购买 nike

我理解CMTime的概念以及它的作用。简而言之,我们有非常小的秒数表示为浮点数。添加后,它们会累积一个错误,随着解码/播放的进行,该错误变得很重要。例如求和一百万次0.000001给我们 1.000000000007918 .好的,CMTime这主意听起来很不错。

let d: Double = 0.000001
var n: Double = 0
for _ in 0 ..< 1_000_000 { n += d }
print(n)

// 1.000000000007918

但是,当尝试转换随机 Double 时往返 CMTime上面的错误跟原来 Double的区别相比,简直就是个笑话和它的 CMTime值(value)。您可以猜测添加这些随机后的差异会是什么样子 CMTime值(value)一百万倍!
import CoreMedia
print("Simple number after 1,000,000 additions and diff between random ")
print("number before/after converting to CMTime:")
print("add:", String(format: "%.20f", 1.000000000007918))
for _ in 0 ..< 10 {
let seconds = Double.random(in: 0 ... 10)
// Let's go with the max timescale!
let time = CMTime(seconds: seconds, preferredTimescale: .max)
print("dif:", String(format: "%.20f", seconds - time.seconds))
}

// Simple number after 1,000,000 additions and diff between random
// number before/after converting to CMTime:
// add: 1.00000000000791811061
// dif: 0.00000000025481305954
// dif: 0.00000000027779378797
// dif: 0.00000000000071231909
// dif: 0.00000000024774449159
// dif: 0.00000000028195579205
// dif: 0.00000000029723601358
// dif: 0.00000000029402880131
// dif: 0.00000000044737191729
// dif: 0.00000000036750824606
// dif: 0.00000000043562398133

另一方面,是的,如果有的话 Double可以准确转换为 CMTime ,那么这将不是问题。

题。我想弄清楚使用 CMTime 是否有意义单独用于时间处理(显然除了一百万个添加项),或者仅用于处理在 CMTime 中获取和返回值的 API 时有用格式?为了提供一些上下文,我有一个带有定制 UI(播放器、轨道、时间线)的视频编辑应用程序,用于处理播放速度调整、轨道修剪和重新排列等。使用 Double表达时间值效果很好,它干净、简单并且可以完成工作。但是 CMTime感觉像是“正确”的方式来做到这一点。但是,看看 Double 会发生什么情况来回转换后让我想知道 CMTime的使用领域和编解码媒体一样狭隘?

最佳答案

你的直觉是正确的。将 Screwdriver 用作锤子可能在大多数情况下都有效,但这不是最佳用途。更重要的是,它可能会遗漏一些不明显的边缘情况,在这些情况下它不起作用或会导致更多的工作在钉子上敲打(例如双重处理)。

其次,你的转换方法是什么?也许您错过了一个边缘情况,例如不同的时间尺度。如果没有更多信息,我真的无法提供进一步的指导。

CMTime 已经具有 AVPlayer 的帧精度,无需转换。这就是它的用途,但请确保将 ToleranceBefore 和 ToleranceAfter 设置为零。

注意:十多年来,我一直致力于帧精确视频/音频处理。

关于swift - CMTime 在编解码媒体之外是否有任何实际应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61449031/

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