ADC Home > Reference Library > Technical Q&As > QuickTime > Movie Basics >

How do I count the frames in an MPEG movie?


Q: I'm using the Movie Toolbox function GetMovieNextInterestingTime with QuickTime 6 to count the frames in an MPEG movie but it does not seem to work. The first call to this function just returns a sample time of zero and a duration which is equal to the duration of the movie. Do I have to write special code for MPEG movie tracks?

A: GetMovieNextInterestingTime works for all kinds of tracks. However, you should avoid using the nextTimeMediaSample flag when searching for frames, because some media types store many frames in a single media sample (for example, MPEG and Flash do this). If you are searching for distinct frame times, pass the nextTimeStep flag to GetMovieNextInterestingTime.


Also, for MPEG media there is a bug (r. 3236091) in QuickTime 6 which requires you to first task the movie before calling GetMovieNextInterestingTime to count the frames in this manner. Here's a code snippet showing how it's done:

 

#include <QuickTime/QuickTime.h>


long GetFrameCount (Movie theMovie) 
{  
    long        frameCount = 0;
    TimeValue   curMovieTime;
    
    if (theMovie == NULL) goto bail;
        
    // due to a bug in QuickTime 6 we        
    // must task the movie first  
    MoviesTask( theMovie, 0 );
    
    curMovieTime = 0;
    while( curMovieTime >= 0 )    
    {
        GetMovieNextInterestingTime(theMovie,
                                    nextTimeStep,
                                    0, NULL,
                                    curMovieTime,
                                    fixed1,
                                    &curMovieTime,
                                    NULL );
        frameCount++;
     }
    
    // there's an extra time step at the end
    // of the movie
    frameCount--;

bail:

    return(frameCount);
}

Listing 1. Counting the frames of an MPEG movie

Be aware, also, that tweening can be used to describe transformations that occur smoothly across a continuum of time rather than at discrete moments. For example, a wipe effect between two video sources will produce a distinct output image at every moment between its start and end times. In such a situation, the question, “How many frames are there?” isn't very helpful, since the honest answer is: “As many as you'd like.”

[May 02, 2003]


Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.