View Source NTSC: Framerate vs Timebase

To understand timecode, first we need to understand the difference between framerate, the rate at which a piece of media is actually yielding frames, and timebase, the rate at which we pretend that media is yielding frames when rendering a SMPTE timecode value.

Timecode does not -- counterintuitively -- represent the TIME of a frame. Instead, it is a human-digestible INDEX of that frame in the sequence of all frames that make up a video clip, just like keycode before it. It's fields are NOT hours, minutes, seconds, and milliseconds, as you might expect from a time-based format; they are "hours", "minutes", "seconds", and frames (more on the airquotes later).

Timecode is more UUID than timestamp.

not-fitting-neatly-into-seconds

(Not) fitting neatly into seconds

For true-frame video -- that is, video where frames never cross the boundary of a given second -- this distinction doesn't matter. When recording at 24.0fps true, the 23rd frame recorded is 00:00:00:23 and the 24th frame recorded is 00:00:01:00, SMPTE timecode, which lines up with 00:00:01.0 in real-world hours, minutes, and seconds.

Here is the catch -- because there is a catch -- the vast majority of video these days are not recorded in mathematically convenient framerates. They are recorded at framerates defined by the SMPTE NTSC standard. You can read a deep-dive on that standard here, but the long and short of it is that cinema video is almost always recorded rates commonly referred to as 23.98, 29.97, 59.84, etc. that are fractionally slower than their 24.0, 30.0, 60.0, etc. counterparts.

When trying to figure out how to map NTSC frames to a frame-specific timestamp, attempting to conform to the real world becomes difficult. the 24th frame of 23.98, NTSC timecode actually occurs at 00:00:01.001. If we want a discreet 'frames' place, do we then need to drop frames from some seconds to keep them in-line with a real world clock? Unsurprisingly, some timecode displays do exactly that. NTSC drop-frame timecode takes this approach, and is a nightmare to work with outside the very specific use case of measuring the length of an edit.

Thankfully, drop-frame conventions are out of favor these days, and only defined for 29.97 and 59.94 framerates -- the framerates that were used for analogue video and older broadcast television.

seconds-aren-t-seconds

"Seconds" aren't Seconds

NTSC non-drop timecode is the favored convention today. Non-drop timecode, as the name suggests, does not drop frames to keep it's "timestamp" in sync with the real-world clock. Instead, it chooses to believe a convenient lie that all 24 frames in a "second" actually fit in that second, and renders timecode accordingly, with each "second" starting at frame 00 and ending at frame 23. Drift from the real-world clock is taken as a necessary sin in exchange for not having to manage drop frames. 01:00:00:00 in 23.98 NTSC, non-drop timecode represents 01:00:03.6 in real-world hours, minutes, and seconds.

vtc-terminology

Vtc Terminology

Vtc calls the true, real-world framerate of the media -- in this example 24000/1001 -- the playback rate of the timecode.

The rate at which timecode is calculated, -- in this example 24/1 -- is called the timebase.

But wait -- why are we using fractions all of a sudden? That's because the common way we refer to NTSC framerates -- i.e 23.98 NTSC -- is actually rounded shorthand for it's actual specification: 24000/1001.

We will examine the inherently rational nature of timecode calculations in the next section.