Drop-frame (DF) timecode skips the frame numbers 00 and 01 at the start of every minute, except minutes 0, 10, 20, 30, 40 and 50, so that timecode at 29.97 frames per second stays in step with the clock. Non-drop-frame (NDF) timecode numbers every frame in order, so at 29.97 fps it falls 3.6 seconds behind real time every hour. No picture is dropped in either case; only the labels change.
More on this topic: Video formats, codecs and numbers, every guide in one place.
Here is where the 3.6 seconds come from, the skipping rule for 29.97 and 59.94, how to read the notation, and which one to choose for broadcast, YouTube, subtitles and editing.
The short answer
At 29.97 fps (30000/1001), an hour holds 107,892 frames, but non-drop-frame timecode expects 108,000, so it reads 00:59:56:12 when an hour has passed: 3.6 seconds (108 frames) slow. Drop-frame fixes this by skipping 2 frame numbers in 54 of every 60 minutes: 108 numbers an hour. 59.94 DF skips 4 numbers a minute. DF is written with a semicolon (01:00:00;00), NDF with colons. Only 29.97 and 59.94 have a drop-frame version.
Key takeaways
- Drop-frame skips numbers, not frames: 00:00:59;29 is followed by 00:01:00;02.
- 29.97 fps NDF drifts 3.6 seconds per hour; DF is accurate to within about 3.6 ms per hour.
- Semicolon or period before the frames means drop-frame; all colons means non-drop-frame.
- 23.976, 24, 25, 30, 50 and 60 fps have no drop-frame version.
- Use DF when timecode must match running time (broadcast, durations); NDF is fine for frame-accurate editing and integer rates.
What is drop-frame timecode?
Drop-frame timecode is a numbering scheme for 29.97 and 59.94 fps video that leaves out some frame numbers so the timecode matches elapsed clock time. It exists because NTSC color video slowed from 30 to 30000/1001 (about 29.97) frames per second, and timecode still counts 30 frames per second. Without a correction, a one-hour program would show a timecode of 59 minutes 56 seconds at its end.
The rule, for 29.97 fps: at the start of every minute, frame numbers 00 and 01 are skipped, except in minutes divisible by ten. So the count goes 00:00:59;28, 00:00:59;29, 00:01:00;02. At 00:10:00;00 nothing is skipped.
| Rate | Numbers skipped per minute | Minutes with no skip | Numbers skipped per hour |
|---|---|---|---|
| 29.97 DF | 2 (frames 00 and 01) | 0, 10, 20, 30, 40, 50 | 108 |
| 59.94 DF | 4 (frames 00 to 03) | 0, 10, 20, 30, 40, 50 | 216 |
This is purely labels: every frame of picture is still there, and the video plays the same. Larry Jordan's explainer puts it simply: drop-frame drops numbers, not frames.
Why does non-drop-frame timecode drift 3.6 seconds an hour?
Non-drop-frame timecode drifts because it counts 30 labels per second while the video plays 29.97 frames per second. The arithmetic for one real hour:
| Frames | |
|---|---|
| Real frames in 1 hour at 30000/1001 fps | 107,892 (and a tenth) |
| Frames NDF timecode counts as 1 hour (30 × 3,600) | 108,000 |
| Shortfall | 108 frames = 3.6 seconds |
| Drop-frame numbers skipped per hour (2 × 54 minutes) | 108 |
Over a day the NDF error grows to about 86 seconds, which is why broadcasters, who schedule to the second, use drop-frame for 29.97 material. Drop-frame leaves a residual error of about 0.0036 seconds per hour, small enough to ignore.
| Elapsed real time | 29.97 NDF timecode shows | 29.97 DF timecode shows |
|---|---|---|
| 10 minutes | 00:09:59:12 | 00:10:00;00 |
| 30 minutes | 00:29:58:06 | 00:30:00;00 |
| 1 hour | 00:59:56:12 | 01:00:00;00 |
| 2 hours | 01:59:52:24 | 02:00:00;00 |
How do you tell drop-frame from non-drop-frame?
By convention, drop-frame timecode uses a semicolon (or a period on some systems) before the frame number, and non-drop-frame uses colons throughout:
| Written as | Means |
|---|---|
| 01:00:00:00 | Non-drop-frame |
| 01:00:00;00 | Drop-frame |
| 01:00:00.00 | Drop-frame on some devices that can't show a semicolon |
Editing apps show it in the sequence or project settings, often as a "drop frame" checkbox or a timecode display option. Mixing them causes trouble: a clip logged in NDF and a sequence set to DF will disagree by up to 3.6 seconds an hour, so markers, edit decision lists and subtitle times land in the wrong place. Larry Jordan describes exactly this kind of mismatch and suggests checking the sequence's drop-frame setting first.
A timecode that names a skipped number, such as 00:01:00;00 at 29.97 DF, is invalid: that label doesn't exist, and the first frame of minute 1 is 00:01:00;02.
How do you convert drop-frame timecode to frames?
To convert drop-frame timecode to a frame count, count as if it were 30 fps, then subtract the skipped numbers: 2 for every minute so far, minus the tenth minutes. In formula form, for 29.97 DF:
- Total minutes M = hours × 60 + minutes
- Frames = (hours × 3,600 + minutes × 60 + seconds) × 30 + frames − 2 × (M − floor(M ÷ 10))
| Timecode (29.97 DF) | Frame count | Real time |
|---|---|---|
| 00:01:00;02 | 1,800 | 60.06 s |
| 00:10:00;00 | 17,982 | 10:00.0 |
| 01:00:00;00 | 107,892 | 1:00:00.0 |
Real time is frames ÷ (30000/1001). The free timecode calculator does this at 23.976, 24, 25, 29.97 DF and NDF, 30, 50, 59.94 DF and NDF and 60 fps, converts between timecode, frames and seconds, adds and subtracts timecodes and flags invalid drop-frame values. It's free, runs in your browser and never uploads anything.
Does 23.976 fps use drop-frame timecode?
No. There's no drop-frame version of 23.976 fps (24000/1001). Its timecode counts 24 frames per second, so it runs slower than the clock in the same way as 29.97 NDF: one hour of 23.976 timecode lasts about 3,603.6 real seconds. For film-style 23.976 projects the drift is accepted, or durations are measured in real time separately.
| Frame rate | Timecode counts per second | Drop-frame version? | Drift vs clock |
|---|---|---|---|
| 23.976 | 24 | No | +3.6 s per timecode hour |
| 24, 25, 30, 50, 60 | Same as the rate | Not needed | None |
| 29.97 | 30 | Yes | 3.6 s per hour in NDF; ~0 in DF |
| 59.94 | 60 | Yes | 3.6 s per hour in NDF; ~0 in DF |
Which frame rate to shoot at in the first place is covered in 24 vs 30 vs 60 fps.
Should you use drop-frame or non-drop-frame?
Use drop-frame when your timecode needs to equal running time at 29.97 or 59.94 fps, and non-drop-frame when it doesn't:
| Situation | Use |
|---|---|
| Broadcast delivery in NTSC regions at 29.97 | Drop-frame (usually required) |
| Measuring program length from timecode | Drop-frame |
| Frame-accurate editing, VFX, animation | Non-drop-frame is simpler |
| YouTube, social video | Either; platforms read the file's real duration |
| Subtitles (SRT, VTT) | Neither: they use real milliseconds |
| PAL rates (25, 50) or integer rates (24, 30, 60) | Non-drop-frame; DF doesn't exist |
Subtitles are the trap: SRT and VTT times are clock time. If you build subtitles from an NDF timecode list at 29.97, they drift by up to 3.6 seconds by the end of an hour. Convert the times first, or fix a drifting file with the free subtitle time shifter, which can stretch subtitles between two sync points; see how to fix out-of-sync subtitles.
Frequently asked questions
What is the difference between drop-frame and non-drop-frame?
Drop-frame skips some frame numbers so 29.97 fps timecode matches the clock; non-drop-frame numbers every frame and runs 3.6 seconds an hour slow.
Does drop-frame timecode drop actual frames?
No. Only the numbers 00 and 01 (or 00 to 03 at 59.94) are skipped at most minute starts. Every frame of video is kept.
Why is it called drop-frame?
Because frame numbers are dropped from the count. The name causes confusion; no picture is lost.
How many frames does drop-frame skip per hour?
108 at 29.97 fps (2 per minute in 54 minutes) and 216 at 59.94 fps.
Does 25 fps have drop-frame?
No. 25, 24, 30, 50 and 60 fps are whole numbers, so timecode matches the clock without any correction.
How is drop-frame written?
With a semicolon before the frames, for example 01:00:00;00. Non-drop-frame uses colons: 01:00:00:00.
Does YouTube care about drop-frame timecode?
No. YouTube and social platforms read the file's real duration and frame rate; timecode labels only matter in editing and broadcast workflows.
Can I convert NDF timecode to DF?
Yes: convert the NDF timecode to a frame count, then write that count out as DF. A timecode calculator does both steps.
Try it with your own video
Caption your videos with subtitles timed in real milliseconds, then translate them into 32 languages. Upload a video, check the timed transcript line by line, and export SRT or VTT. QuickVeed plans start at $18/month, and new accounts get a 14-day trial with 250 credits, no card needed. Sign up or see pricing.
Sources
Competitor details in this post were checked against these public pages in October 2026. Products and prices change, so confirm with each vendor before you decide.





