1)CMTimeMake(1,10)
表示持续时间为1秒,时间刻度为10或10帧/秒。这意味着1帧视频的持续时间为10帧?
2)
CMTime lastTime=CMTimeMake(1,10);
CMTime frameTime=CMTimeMake(1, 10);
CMTime currentTime=CMTimeAdd(lastTime, frameTime)
=(2,10)?
2秒的视频和每秒10帧的当前时间?
答案 0 :(得分:153)
1)CMTimeMake(1,10)
实际上意味着值为1,时间刻度为10.它们是分子和分母,因此它是1/10秒,而不是1秒。
2)结果将类似CMTimeMake(2, 10)
,即2/10秒。
答案 1 :(得分:131)
1)
Float64 seconds = 5;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);
CMTimeShow(inTime);
以上代码给出: {3000/600 = 5.000}
这意味着总持续时间为5秒,3000帧,时间刻度为每秒600帧。
2)
int64_t value = 10000;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMake(value, preferredTimeScale);
CMTimeShow(inTime);
这个给出{10000/600 = 16.667}
这意味着总持续时间为16.667秒,10000帧,时间刻度为每秒600帧。
注意CMTimeMake(int64_t值,int32_t时间刻度)之间的区别 和CMTimeMakeWithSeconds(Float64秒,int32_t preferredTimeScale)
希望这个解释有所帮助。如需进一步说明,请随时在此帖子上发布更多问题。
答案 2 :(得分:34)
使用CMTimeMake(A, B)
存储有理数,精确分数A / B
秒
CMTimeMake(1, 4)
- >时间间隔0.25秒使用CMTimeMakeWithSeconds(A, B)
将A
秒存储到B
步的分辨率
CMTimeMakeWithSeconds(0.25, ...)
- >时间间隔0.25秒您经常看到CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
。 NSEC_PER_SEC
实际上意味着“最大分辨率”。
答案 3 :(得分:6)
如果您只想知道如何设置 1秒的间隔(就像我一样),这就是您的答案:
int seconds = 1;
CMTime interval = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC);
答案 4 :(得分:2)
CMTime结构表示length of time that is stored as rational number.
CMTime具有值和时间刻度字段,并表示时间值/时间刻度秒。
答案 5 :(得分:0)
假设您要在30fps视频(1.5秒)中显示第45帧
let frameIndex = 45
let fps = 30
let thumbTime = CMTimeMakeWithSeconds(frameIndex/fps, preferredTimescale: fps)