Toolbox runs in your browser

Index / Media

SMPTE Timecode Calculator

Timecode to frames to real elapsed time, at every rate anyone uses. 29.97 is exactly 30000/1001 here, not 29.97, which is where most wrong answers start. Drop-frame is arithmetic on frame labels, so a timecode that names a label which does not exist is refused rather than quietly moved.

Position
Timecode as hh:mm:ss:ff. A semicolon before the frames is the drop-frame convention and is read the same way.
Drop-frame exists only at 29.97 and 59.94. It is not offered anywhere else because it is not defined there.
29.97 drop-frame
01:00:00;00

Frame number —
Real seconds —

The same position, three ways

Timecode against the clock

The same real time at every rate

rounded to the nearest frame
What drop-frame drops, and why the rates are fractions 29.97 is exactly 30000/1001. So is 59.94 exactly 60000/1001, and 23.976 exactly 24000/1001. The decimal names are rounded and the fractions are the definition — the ratio comes from NTSC colour, which moved the field rate by a factor of 1000/1001 to keep the colour subcarrier out of the way of the sound. Every number on this page is worked out from the fraction on integers, so nothing accumulates.

Drop-frame drops labels, not frames. Nothing is ever removed from the video. Two numbers are skipped at the start of every minute except every tenth minute, so that the timecode clock stays close to the wall clock. 00:01:00;00 and 00:01:00;01 are not positions in a drop-frame recording — the minute starts at 00:01:00;02. A calculator that accepts them is answering a question about a frame that does not exist, and this one says so instead.

Non-drop at 29.97 drifts by 3.6 seconds an hour. One hour of timecode is 108,000 frames, which at 30000/1001 frames a second is 3,603.6 real seconds. Over a day that is 86.4 seconds. Drop-frame gets that down to a fraction of a second a day, and the exact residual for the position you have given is printed above rather than described.

The semicolon is a convention, not a rate. Drop-frame is conventionally written hh:mm:ss;ff and non-drop hh:mm:ss:ff. This page reads either separator and prints the one that matches the rate you chose, and says so when what you typed disagreed.

Real elapsed time is exact where it can be. Frames times 1001/30000 does not always terminate as a decimal, because 30000 has a factor of three. Where the decimal terminates it is printed in full; where it does not, the exact fraction is printed beside a decimal that is stated as rounded and to how many places. Nothing is silently truncated.

Timecode wraps at 24 hours, as SMPTE 12M defines it, so frame numbers past a day come back round to 00:00:00:00 and this says when that has happened.

The other rates in the table are rounded to the nearest frame. There is no exact answer there in general: a real time that lands between two frames at 25 has to become one of them, and the page rounds to nearest rather than truncating, which is what conforming software does.