所有 QTKit 示例都使用秒来确定范围。不幸的是,我有帧数并且需要帧准确。如果我能弄清楚如何从我的电影中得到它,我想我可以乘以帧速率。
问问题
390 次
2 回答
1
您应该能够通过查询以下mediaAttributes
a来计算给定视频媒体的帧速率QTMedia
:
QTMediaDurationAttribute
QTMediaSampleCountAttribute
(它们在此处的 QTKit 文档中进行了描述)
并使用以下公式进行计算:
QTTime duration = ... // value get from mediaAttribute
NSNumber sample_count = ... // value get from mediaAttribute
double fps = (sample_count.longValue * duration.timeScale) / duration.timeValue;
免责声明:
请注意,如果这可行,我还没有尝试过,但根据我对 QuickTime C API 和 QuickTime 文件格式的经验,我希望它是这样工作的。
祝你好运!
于 2009-12-16T10:46:00.533 回答
0
乘以帧速率并不精确,因为 Quicktime 使用的许多文件容器和编解码器利用可变帧速率来获得更好的压缩。你会在任何类型的电影中注意到这一点,它具有任何时间长度的定格。以macbreak 的The Road to 1080p, part1为例。
您可以使用OSX 10.6 中引入的 QTMovie 方法frameStartTime:atTime和frameEndTime:atTime进行帧精确范围。这些将分别为您提供帧的开始和结束,而无需进行帧解码。
例如计算电影中的所有帧数:
// Initialize QTMovie object called 'movie', disable looping, etc
[movie gotoEnd];
QTTime endTime = [movie currentTime];
[movie gotoBeginning];
QTTime curTime = [movie currentTime];
unsigned long numFrames = 0;
while (true)
{
% get the end time of the current frame
[movie frameEndTime:&curTime];
numFrames++;
% If we get to the last frame, stop counting
if (QTTimeCompare(curTime, endTime) == NSOrderedSame)
{
break;
}
}
于 2010-01-22T19:31:12.340 回答