Это уже давно заводило меня на орехи.Получить номер кадра (например, Quicktime Player 7) от QTKit
У меня очень мало знаний о QTKit/QTMovie, но вы создали небольшое приложение Cocoa, которое просматривает видео и позволяет вам сохранить 3-секундную версию с Handbrake.
Проблема заключается в переводе текущего времени на QTKit (QTTime), которое довольно неопределенно (кажется, является ближайшим вторым), к номеру кадра.
Если вы открываете видеоролик в Quicktime Player 7, вы можете выбрать стандартное время или текущий кадр. Если я передаю этот номер кадра непосредственно в CLI Handbrake, предварительный просмотр выходит суперточно.
Итак, я пытался найти способ преобразования 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.
Что мне нужно , Я думаю, это значение для отсчета выборки, в конкретный момент времени, где я есть, а не итог.
Любые мысли о том, как я могу это получить?
Спасибо!
PS:
пытался также с помощью следующего:
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 ном-/ tcData 0: 2: 0,0
Это не QTKit. – martinjbaker
@martinjbaker - Ну, я использую QTKit с QTMovie, играющим в QTMovieView. Конечно, для этого, кажется, мне нужно импортировать среду Quicktime, но это просто средство для конца :) – Andre