2009-11-03 3 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

프레임 속도로 곱하는 것은 프레임 정확하지 않습니다. 퀵타임이 사용하는 많은 파일 컨테이너와 코덱이 더 나은 압축을 위해 variable frame rates을 사용하기 때문입니다. 어떤 길이의 시간 동안 프레임이 정지되는 모든 종류의 영화에서이를 알 수 있습니다. 예를 들어 macbreak의 The Road to 1080p, part1을 참조하십시오.

QTMovie 방법 frameStartTime:atTimeframeEndTime:atTime이 OSX 10.6에 도입되어 프레임 정확 범위를 수행 할 수 있습니다. 이것들은 프레임 디코딩을하지 않고 각각 프레임의 시작과 끝을 제공합니다. 예를 들어

영화의 모든 프레임을 계산합니다 : 내가 프레임`에 대한 참조 찾을 수 있습니다 (시작 | 끝) 시간 :

// 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 Class Reference를 참조하십시오. Google은이 게시물을 가리키며 QTMovie의 카테고리는 이러한 메소드를 정의하는 Google 코드에서 호스팅됩니다. 그러나 귀하의 반대가 있어야합니다 : 단순히 프레임 정확도를 달성하기 위해 영화의 프레임 속도를 시간에 곱하는 것은 안전하지 않습니다. – danyowdee

+0

이러한 방법은 더 이상 QTKit에 포함되지 않습니다. –