QTTime将电影定位到某个时间码



我想定位一个QuickTime电影包含一个时间码轨道到用户定义的TC位置。我很清楚整个时间刻度,时间值的东西,但我不知道我错过了什么,希望你们能给我一个提示!!

我想给你一个固定值的例子,以便于解释:

该电影具有NTSC帧率,即29.97 fps,并且是非dropframe。电影直接从00:59:58:00开始。用户输入TC位置01:00:00:10,我要定位到该位置。

QTMovie的唯一选择是setCurrentTime(QTTime time)函数,我知道从电影开始的时间必须是"单位"的绝对值。

所以,我需要先计算偏移量。为了做到这一点,我需要使用QTTimeFromString函数首先将两个时间码转换为QTTime结构。

这就是我的问题开始的地方!QTTimeFromString函数需要"days:hours:minutes:seconds.timeValue/timescale"

格式的字符串

timeValue用哪个值??我读了一些关于frames * 100的东西,我自己想到了通过乘以帧值将帧值"映射"到2997时间刻度范围。

两种方法都不起作用…当我使用setCurrentTimeQTTimeDecrement计算的绝对值设置为剪辑时,我总是在我想要的其他地方....

我不知道我做错了什么,我希望你们能帮助我!!提前感谢

你的方向是对的。您需要计算时间偏移量并将其转换为QTTime。QTMovie的时间是从零开始的

NSTimeInterval timeInterval = timeOffset;
[_movie setCurrentTime:QTMakeTime((long long)(timeInterval * (double)movieTimeScale), movieTimeScale)];

movieTimeScale通常可以是常量,如600。或者你也可以从电影中获取:

long movieTimeScale = [_movie currentTime].timeScale;

只是想填补缺失的信息。

从电影开始我就计算了绝对帧数。因此,输入的时间码和第一帧电影的时间码的偏移量。

从电影的TC轨道中,我从电影中获得时间码媒体处理程序。然后我可以得到一个TimeCodeDef结构。这个结构有一个名为frameDuration的字段,这是需要与绝对帧值相乘的值。

定位到所有的时间码位置,现在使用:

[movie setCurrentTime:QTMakeTime(absoluteNumFrames * tcDef.frameDuration, timeScale )];

相关内容

  • 没有找到相关文章