2009-11-03 77 views

回答

1

您應該能夠通過查詢QTMedia以下mediaAttributes計算給定視頻媒體的幀速率:

  • QTMediaDurationAttribute

  • QTMediaSampleCountAttribute

(他們在QTKit文檔here

和使用的計算公式如下:

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文件格式。

祝你好運!

0

乘以幀速率並不準確,因爲Quicktime使用的許多文件容器和編解碼器使用variable frame rates可以獲得更好的壓縮效果。你會注意到這在任何類型的電影凍結框架的任何時間長度。以macbreak的The Road to 1080p, part1爲例。

您可以使用OSX 10.6中引入的QTMovie方法frameStartTime:atTimeframeEndTime: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; 
    } 
} 
+0

D'呃投票太早: 我找不到'框架的任何引用(開始|完)時間:atTime:'無論是在頭文件或QTMovie類參考。谷歌只指向這個帖子,並且指向QTMovie上的一個類別,該類別定位於定義這些方法的Google代碼上。然而,你的反對意見應該是站得住腳的:爲了達到幀精度,簡單地將電影的幀率乘以一段時間是不安全的。 – danyowdee 2010-10-01 08:44:46

+0

由於某些原因,這些方法不再是QTKit的一部分。 – 2011-04-24 17:44:38

相關問題