All posts

Frames Per Second Explained: How Many Frames Are in Your Video?

Archis Vaze4 min readUpdated July 29, 2026

Frame rate is the number of still images a video shows per second. That is the whole concept, and the arithmetic that follows from it is simple. Where it gets interesting is the handful of places where the simple arithmetic quietly stops being true.

This covers what the common frame rates are for, how to count the frames in your own footage, and the two situations - variable frame rate and drop frame timecode - that trip people up.

The basic calculation

Total frames equals duration in seconds multiplied by frame rate. A three-minute video at 30 fps contains 180 x 30 = 5,400 frames.

That number is usually larger than people expect, and it explains why extracting every frame is almost never what you want.

Duration24 fps30 fps60 fps120 fps
10 seconds2403006001,200
1 minute1,4401,8003,6007,200
10 minutes14,40018,00036,00072,000
1 hour86,400108,000216,000432,000

What each frame rate is for

24 fps - film

The cinema standard since the late 1920s, chosen originally as the slowest rate that carried acceptable sound quality on optical film. It has stayed because audiences learned to read its particular motion blur as "cinematic". Fast pans at 24 fps judder visibly, which is a limitation that became an aesthetic.

30 fps - broadcast and web

Derived from the 60 Hz mains frequency in North America. It is the default for most phone cameras, most screen recorders, and most web video. Motion is smoother than 24 and it looks less like a film and more like a recording, which is usually what you want for anything informational.

60 fps - motion and gaming

Twice the temporal detail, and the point at which motion stops looking like a sequence of frames to most viewers. Standard for game capture, sports, and anything where fast movement needs to stay legible.

120 and 240 fps - slow motion

Captured fast, played back slow. 120 fps played at 30 gives four times slow motion. These rates also produce the sharpest individual frames, because a camera capturing 240 images per second cannot expose any one of them for longer than 1/240th of a second.

The 29.97 problem

Video that calls itself 30 fps is frequently 29.97 fps, and 24 fps is often 23.976. This is not a rounding error - it is a deliberate legacy of the transition to colour television in 1953, where the frame rate was reduced by a factor of 1000/1001 to prevent interference between the colour subcarrier and the audio signal.

Seventy years later, the fraction persists in essentially every broadcast and consumer format. The practical effect is small but real: a "one hour" recording at 29.97 fps is actually about 3.6 seconds longer than an hour, and frame counts calculated with 30 rather than 29.97 drift by roughly one frame every thirty-three seconds.

For extraction this rarely matters, because timestamp-based sampling never counts frames in the first place. It matters a great deal in editing, where drop frame timecode exists specifically to paper over the discrepancy by skipping timecode labels - not actual frames - at regular intervals.

Variable frame rate breaks the arithmetic

Everything above assumes frames arrive at a constant rate. Plenty of footage does not work that way.

Screen recorders capture when the picture changes, so a recording might sit at two frames per second while you read and jump to sixty when you scroll. Phone cameras in low light drop their frame rate to lengthen exposure. Game capture varies with what the GPU can deliver. All of this produces variable frame rate footage, where the file reports a nominal rate that describes almost nothing about the actual spacing between frames.

For VFR video, "total frames" is not a meaningful figure and "every Nth frame" is not a meaningful instruction, because thirty frames might span half a second or fifteen seconds depending on what was happening. Time intervals remain meaningful, which is why timestamp-based extraction is the correct model for this footage.

Check whether a file is VFR

ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,avg_frame_rate -of default=noprint_wrappers=1 input.mp4

Convert VFR to constant frame rate

ffmpeg -i input.mp4 -vsync cfr -r 30 output.mp4

If r_frame_rate and avg_frame_rate differ substantially, the file is variable frame rate.

How this affects extraction

Frame extraction here works in timestamps rather than frame numbers, which sidesteps the whole VFR problem - you ask for a moment in time and get whatever was on screen then, regardless of how the frames were spaced.

What frame rate does determine is the finest precision available. A 24 fps source has a new image only every 41.7 milliseconds, so there is nothing between those moments to capture. Requesting a denser sample than the source frame rate just returns duplicates.

Source frame rateTime between framesFinest useful interval
24 fps41.7 ms~0.042 s
30 fps33.3 ms~0.033 s
60 fps16.7 ms~0.017 s
240 fps4.2 ms~0.004 s

Try FrameRipper - free, no upload

Extract frames from any video directly in your browser. No sign-up, no file size limits.

Open FrameRipper

Choosing a count from frame rate

Frame rate is mostly the wrong thing to base your extraction count on. What matters is how fast the content changes, which is a property of the subject rather than the recording settings.

A lecture recorded at 60 fps still only needs a frame every twenty or thirty seconds, because the slides do not change faster than that. A tennis serve recorded at 30 fps might warrant ten frames per second, because everything of interest happens in under two seconds.

The one place frame rate matters directly is the ceiling. You cannot sample finer than the source provides, so 240 fps footage genuinely does give you more distinct moments to choose from than 30 fps footage of the same event - which is exactly why shooting high frame rate is worth it when you know you want stills.

Archis Vaze

Creator of FrameRipper

Software engineer with a background in video tooling. Builds ffmpeg-based desktop apps, and browser tools that process files locally instead of uploading them.

Try these tools

Keep reading