【发布时间】:2013-03-07 15:56:54
【问题描述】:
这已经让我发疯了一段时间了。
我对 QTKit / QTMovie 知之甚少,但我创建了一个小 Cocoa 应用程序,它可以预览视频并让您使用 Handbrake 保存 3 秒的版本。
问题在于将 QTKit (QTTime) 上的当前时间转换为帧号,该时间非常模糊(似乎是最接近的秒数)。
如果您在 Quicktime Player 7 中打开视频,您可以选择查看标准时间或当前帧。 如果我将该帧号直接传递给 Handbrake CLI,则预览会非常准确。
所以我一直在尝试找到一种将 QTTime 转换为绝对帧数的方法,这似乎是基于 QTMedia 中的样本(太混乱了)。
例如,这样:
NSArray *videoTracks = [movie tracksOfMediaType:QTMediaTypeVideo]; QTTrack *tcTrack = [videoTracks objectAtIndex:0]; if (tcTrack != nil) { QTMedia * media = [tcTrack media]; if (media != nil) { NSLog(@"sample : %@", [media attributeForKey:QTMediaSampleCountAttribute]); } }
我得到了样本总数,这与 Quicktime Player 7 上的最终帧数相同。
我认为,我需要的是样本计数的值,在我所在的特定时间点,而不是总数。
对我如何能够得到它有什么想法吗?
谢谢!
附注:
还尝试使用以下方法:
NSArray *videoTracks = [movie tracksOfMediaType:QTMediaTypeVideo]; QTTrack *tcTrack = [videoTracks objectAtIndex:0]; if (tcTrack != nil) { QTMedia * media = [tcTrack media]; if (media != nil) { NSLog(@"sample : %@", [media attributeForKey:QTMediaSampleCountAttribute]); Media qtMedia = [media quickTimeMedia]; MediaHandler mh = GetMediaHandler(qtMedia); long frameNum; TimeCodeDef tcDef; TimeCodeRecord tcData; UserData srcRefH; TCTimeCodeToFrameNumber(mh, &tcDef, &tcData, &frameNum); NSLog(@"frameNum %ld", frameNum); NSLog(@"tcData %d:%d:%d.%d", tcData.t.hours, tcData.t.minutes, tcData.t.seconds, tcData.t.frames); } }
但我得到的只是:
frameNum -1 / tcData 0:2:0.0
【问题讨论】:
标签: cocoa video quicktime qtkit