这件事情一直困扰着我。
我对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上的最终帧数相同。
我需要的是在特定时间点处的样本计数值,而不是总数。
你有什么思路可以帮我获取到吗?
谢谢!
P.S:
还尝试使用以下方法:
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);
}
}
但是我得到的只有:帧编号为-1 / 时间码数据为0:2:0.0