QTTime将电影定位到特定时间码

时间:2011-12-05 17:30:24

标签: cocoa quicktime qtkit

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

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

该电影具有NTSC帧速率,为29.97 fps且为非丢帧。电影直接从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时标范围。

无论哪种方式都有效...当我使用QTTimeDecrementsetCurrentTime计算的绝对值设置到剪辑时,我总是在其他我想成为的地方....

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

2 个答案:

答案 0 :(得分:1)

你正朝着正确的方向前进。您需要计算时间偏移并将其转换为QTTime。 QTMovie的时间是从零开始的。

NSTimeInterval timeInterval = timeOffset;

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

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

long movieTimeScale = [_movie currentTime].timeScale;

帧率与此无关。

答案 1 :(得分:1)

只想填写缺失的信息。

我几乎计算了自电影开始以来的绝对帧数。 因此,输入时间码的偏移量和第一个电影帧的时间码。

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

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

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