GetNextInterestingTime () получает один и тот же кадр несколько раз - PullRequest
1 голос
/ 01 февраля 2010

Я хочу экспортировать каждый кадр в * .mov-Movie-File, поэтому я делаю это:

GoToBeginningOfMovie(movie);
TimeValue startPoint = 0;
long gnitFrames = 0;
while (startPoint >= 0) {
    GetMovieNextInterestingTime(movie, nextTimeStep, 0, &whichMediaType, startPoint, 0, &startPoint, NULL);
    gnitFrames++;
}

проблема в том, что число gnitFrames отличается (намного больше), чемкогда я называю это:

Track track = GetMovieIndTrack(movie, 1);
Media media = GetTrackMedia(track);
OSType mediatype;
MediaHandler mediahandler = GetMediaHandler(media);
GetMediaHandlerDescription(media, &mediatype, nil, nil);
MediaGetName(mediahandler, medianame, 0, nil);
long nsamples = GetMediaSampleCount(media);

nsamples дает мне правильный счетчик кадров.Итак, теперь мой вопрос: как я могу сделать это, чтобы добраться до каждого кадра в фильме только один раз?(Когда я экспортирую кадр сейчас, после того как я позвонил GetNextInterestingTime, кадр экспортируется несколько раз, иногда даже 25 раз)
Моя операционная система - Windows XP.

1 Ответ

1 голос
/ 02 февраля 2010

Использование nextTimeStep может быть проблематичным, поскольку временной шаг не обязательно должен совпадать с (видео) мультимедийным образцом, в результате чего GetMovieNextInterestingTime() возвращает лишние метки времени.

Если все, что вы хотите сделать, это подсчитать / найти все кадры на видео, попробуйте использовать nextTimeMediaSample вместе с GetMediaNextInterestingDisplayTime() на видео.

...
TimeValue64  start           = 0;
TimeValue64  sample_time     = 0;
TimeValue64  sample_duration = -1;
int frames = 0;
while( sample_time != -1 ) {

    GetMediaNextInterestingDisplayTime( media, nextTimeMediaSample | nextTimeEdgeOK, start, fixed1, &sample_time, &sample_duration );
    if( sample_time != -1 ) {
        ++frames;
    }
    ...
    start += sample_duration;
}
...

Оговорка:

Согласно приведенной ниже статье «Вопросы и ответы», этот подход не должен сработать, например. MPEG но для многих других форматов это работает как шарм в моем опыте.

Технические вопросы и ответы QTMTB54: Как подсчитать кадры в фильме MPEG?

...