我想将包含时间码轨道的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时标范围。
无论哪种方式都有效...当我使用QTTimeDecrement
将setCurrentTime
计算的绝对值设置到剪辑时,我总是在其他我想成为的地方....
我不知道我做错了什么,我希望你们能帮助我! 提前致谢
答案 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 )];