Event Clocks

Timecode Converter

Convert between SMPTE timecode, frame counts, milliseconds, and real-time durations across multiple frame rates, including drop-frame and non-drop-frame formats.

No source rate. Output columns interpret the label.
One SMPTE label per line. Output columns apply the rate.
Output Columns1 active
Uses the parsed source duration directly in conversion mode, so no target rate is needed.
Formatted Time @ 24base
SMPTE (No Rate)
Formatted Time @ 24
Base column
01:00:00:00
Line 1
01:00:00.000
3,600,000 ms
00:10:00:00
Line 2
00:10:00.000
600,000 ms
00:01:23:12
Line 3
00:01:23.500
83,500 ms
Reference

How this SMPTE converter works

The converter keeps label counting and real elapsed time separate. SMPTE labels are counted with the nominal integer frame rate, then converted to milliseconds with the exact playback-rate ratio.

Nominal fps vs real fps

SMPTE label counting uses nominal fps. Real elapsed time uses the exact playback rate. For example, 23.976 uses nominal 24, 29.97 uses nominal 30, and 59.94 uses nominal 60.

Non-drop-frame count

For NDF labels, total frames are counted sequentially:

Frames = ((HH × 3600 + MM × 60 + SS) × nominalFps) + FF

Drop-frame count

For valid DF labels, skipped label numbers are subtracted from the nominal count:

totalMinutes = HH × 60 + MM droppedFrameCount = dropFrames × (totalMinutes - floor(totalMinutes / 10)) Frames = ((HH × 3600 + MM × 60 + SS) × nominalFps) + FF - droppedFrameCount

Milliseconds conversion

Once total frames are known, real elapsed time is calculated with the exact rate:

milliseconds = round((totalFrames × fpsDenominator × 1000) / fpsNumerator)

Drop-frame validity

Drop-frame skips frame numbers, not actual video frames. At DF rates, skipped labels at the start of most minutes are invalid. Every 10th minute is treated differently, so labels are not skipped there.

Compact example

At 29.97 DF, 01:00:00;00 has 60 total minutes. The converter subtracts 108 dropped labels, so the total is 107,892 frames before converting to real milliseconds.

FAQ

SMPTE timecode questions

Short answers for the common places where frame rates, DF/NDF modes, and elapsed time can feel counterintuitive.

Why does the converter use 30 instead of 29.97 for frame counting?

SMPTE timecode labels are counted using the nominal integer frame rate. For example, 23.976 uses 24 labels per second, 29.97 uses 30, and 59.94 uses 60. Real elapsed time is calculated afterward using the exact playback-rate ratio.

What is the difference between nominal fps and real fps?

Nominal fps is the integer rate used for timecode labels. Real fps is the actual playback speed. For example, 29.97 uses nominal 30, while the exact playback rate is 30000/1001.

Does drop-frame remove actual video frames?

No. Drop-frame timecode does not remove footage. It skips certain frame numbers in the label sequence so the displayed timecode stays aligned with real elapsed time.

Why are some drop-frame values invalid?

In drop-frame formats such as 29.97 DF and 59.94 DF, certain labels are skipped at the start of most minutes except every 10th minute. Those skipped labels are invalid inputs.

Why is every 10th minute special in drop-frame?

Drop-frame skips labels in most minutes, but not every 10th minute. That pattern keeps long-running timecode close to clock time without skipping actual media frames.

Why does 01:00:00;00 differ from 01:00:00:00?

The semicolon usually indicates drop-frame while the colon usually indicates non-drop-frame. They are different counting systems and can produce different real-time values when interpreted directly.

Why does my timecode drift?

Drift usually comes from using the wrong frame rate or wrong DF/NDF mode, such as using 30 instead of 29.97 or NDF instead of DF.

How are milliseconds calculated?

The converter first counts total frames from the source value, then converts those frames into real elapsed time using the exact frame-rate ratio, such as 30000/1001.

What is SMPTE (No Rate)?

Use SMPTE (No Rate) when you have a label like 01:00:00:00 but do not want to commit to a source timing system yet. In that mode, each output column applies its own rate and DF/NDF rules to the same raw SMPTE label.