모든 QTKit 예제는 범위를 만들기 위해 초를 사용합니다. 불행히도, 프레임 번호가 있고 정확한 프레임이어야합니다. 내 영화에서 어떻게 얻는 지 알면 프레임 속도로 늘릴 수 있다고 생각합니다.두 개의 프레임 번호로 QTTimeRange를 만들 수 있습니까?
2
A
답변
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:atTime 및 frameEndTime: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;
}
}
D' 어 너무 일찍 투표 atTime을 :에'중 하나 헤더 또는 QTMovie Class Reference를 참조하십시오. Google은이 게시물을 가리키며 QTMovie의 카테고리는 이러한 메소드를 정의하는 Google 코드에서 호스팅됩니다. 그러나 귀하의 반대가 있어야합니다 : 단순히 프레임 정확도를 달성하기 위해 영화의 프레임 속도를 시간에 곱하는 것은 안전하지 않습니다. – danyowdee
이러한 방법은 더 이상 QTKit에 포함되지 않습니다. –