I'm having a hard time understanding how non-integer frame rates are implemented in h264 and hevc. For example, I just stepped through a 23.976fps video frame by frame using Shotcut, and looking at the timestamp of each frame, it looks like there are full 24 frames in each second.

How do they do it? Do the encoders actually write 24 full frames per second to file? (What even would be a non-full frame?) But that would mean, when playing at 23.976, that to play 1000 seconds you need to render 23976 frames. But the file contains 24000 frames (does it?) Do they just drop some frames? Who does the dropping? The player? Or does the encoder drop a frame every n seconds?

1 Answer 1


It only looks like 24fps at first glance. From the Wikipedia entry on SMTPE timecode, the section on drop-frame:

“In order to make an hour of timecode match an hour on the clock, drop-frame timecode skips frame numbers 0 and 1 of the first second of every minute, except when the number of minutes is divisible by ten.”

Check the first and second frame of each minute.

A clue that timecode is using drop-frame is when the separator before the frame number is a semicolon instead of a colon, although I’ve seen software ignore this convention.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.