Measured guide
Video frame rate: 24, 30 or 60 fps and what conversion does to your clip

Short answer
Export at the frame rate you recorded: YouTube says content should be "encoded and uploaded in the same frame rate it was recorded", and converting changes which frames viewers see. In our test, 24 fps footage forced to 60 fps repeated 60.00% of its output frames in an uneven 3, 2, 3, 2 pattern, 24 to 30 fps repeated 20.00%, and 60 fps footage cut to 30 fps threw away 50.00% of its frames. Pick 24 for a film look, 30 for ordinary talking and screen footage, and 60 only if you recorded 60 and the motion needs it.
Key takeaways
- Keep the recorded rate. YouTube Help: "Content should be encoded and uploaded in the same frame rate it was recorded." Its common rates are 24, 25, 30, 48, 50 and 60 fps.
- Raising the rate adds repeats, not detail. In our 10 second excerpts, 30 to 60 fps repeated 50.00% of output frames and 24 to 60 fps repeated 60.00%, with every source frame kept.
- Lowering the rate removes real frames. 60 to 30 fps dropped 300 of 600 source frames (50.00%) and 60 to 24 fps dropped 360 of 600 (60.00%).
- The published API limits for Instagram Reels ("Frame rate: 23-60 FPS") and TikTok ("Minimum of 23 FPS", "Maximum of 60 FPS") put 24, 30 and 60 fps inside them and a 120 fps file outside.
Which frame rate should you export at?
In most cases, export at the rate the footage was recorded at. A plain conversion, such as the ffmpeg fps filter we tested, can only repeat or drop frames that already exist, so it adds no detail; it only changes which of your frames are on screen and for how long. Frame blending and optical flow do create new in-between frames, which can look smoother but can also smear or warp moving edges, and we did not measure them.
There are three common exceptions. On a timeline that mixes rates, you convert the odd clips to the timeline rate. Slow motion is recorded at 60, 120 or 240 fps and played back at a lower rate on purpose. And a client, broadcaster or festival may name a delivery rate, which then wins.
Choose the recording rate before you shoot, from the motion you will film. This table is our suggestion, not a platform rule, and the only part we measured is what conversion does (next section).
| Footage | Frame rate to record | Why (our suggestion) |
|---|---|---|
| Narrative, film look, b-roll for a cinematic edit | 24 fps | The traditional film rate and the usual choice for a cinematic look. |
| Talking head, tutorial, screen recording, vlog | 30 fps | Smooth enough for low motion; the YouTube 1080p bitrate guide is 8 Mbps at this rate. |
| Gameplay, sport, fast camera moves, footage you may slow down | 60 fps | Twice as many real frames each second; the YouTube bitrate guide for 1080p goes from 8 to 12 Mbps. |
| Mixed clips in one edit | One rate for the whole timeline | Match the timeline to the most common clip, so only the odd clip is converted. |
YouTube publishes 8 Mbps as the recommended 1080p SDR video bitrate for 24, 25 and 30 fps and 12 Mbps for 48, 50 and 60 fps, read on YouTube Help on October 27, 2026. Our arithmetic (script in the test log): 12 / 8 = 1.50, so 50% more. These are recommendations, not requirements.
What does converting the frame rate do to your frames?
To see it, we took 10 second excerpts, starting at 60 seconds, of three real versions of Big Buck Bunny: a 24 fps file, a 30 fps render and a 60 fps render, all with distinct frames in our excerpt. We converted each to 24, 30 and 60 fps with ffmpeg's fps filter, which repeats or drops frames, then hashed every decoded frame and matched each output frame back to the source frame it came from.
The control was the same-rate conversion (24 to 24, 30 to 30, 60 to 60). Every one of them kept all source frames, repeated nothing and dropped nothing, as it should. Before running, we expected 30 to 60 to repeat every frame once (50%) and 24 to 60 to alternate holds of 3 and 2 (60%); the log matched.
| Conversion | Source frames | Output frames | Dropped | Output frames that repeat | Hold pattern |
|---|---|---|---|---|---|
| 24 to 24 (control) | 240 | 240 | 0 (0.00%) | 0 (0.00%) | 1, 1, 1, 1 |
| 24 to 30 | 240 | 300 | 0 (0.00%) | 60 (20.00%) | 1, 2, 1, 1, 1, 2 |
| 24 to 60 | 240 | 600 | 0 (0.00%) | 360 (60.00%) | 3, 2, 3, 2 |
| 30 to 24 | 300 | 240 | 60 (20.00%) | 0 (0.00%) | 1, 1, 0, 1, 1, 1, 1, 0 |
| 30 to 30 (control) | 300 | 300 | 0 (0.00%) | 0 (0.00%) | 1, 1, 1, 1 |
| 30 to 60 | 300 | 600 | 0 (0.00%) | 300 (50.00%) | 2, 2, 2, 2 |
| 60 to 24 | 600 | 240 | 360 (60.00%) | 0 (0.00%) | 0, 1, 0, 1, 0, 0, 1 |
| 60 to 30 | 600 | 300 | 300 (50.00%) | 0 (0.00%) | 1, 0, 1, 0, 1, 0 |
| 60 to 60 (control) | 600 | 600 | 0 (0.00%) | 0 (0.00%) | 1, 1, 1, 1 |
Our measurement, October 27, 2026, ffmpeg 6.1.1, Big Buck Bunny excerpts (Blender Foundation, CC BY 3.0). A hold is how many output frames show one source frame in a row: 0 means that source frame never appears. We compared frames as 160x90 grayscale hashes of the decoded pictures, with no encoder in between, so these numbers describe the frame selection and not what a platform's own encoder does afterwards.
Two patterns matter. Going up, 30 to 60 gives an even hold of 2 for every frame, while 24 to 60 alternates 3 and 2, so some frames stay on screen 50% longer than their neighbors (3 against 2, computed). Going down, the frames are simply gone: 60 to 30 never shows 300 of the 600 frames that were recorded.
We did not run a viewer test, so we make no claim about how visible the uneven hold is. It depends on the motion in the shot. In mostly static footage you will not see it; in a steady pan you may.

Does real camera footage behave the same way?
Yes. Animation is the easy case for a frame test, so we repeated it on two live-action clips: a 30 fps phone clip of a bird on a hand (CC0) and a 23.976 fps clip from a Sony FS700 camera (CC BY 3.0), 10 seconds each, every source frame distinct. The same-rate control again kept every frame and repeated none.
| Conversion | Source frames | Output frames | Dropped | Output frames that repeat | Hold pattern |
|---|---|---|---|---|---|
| 30 to 30 (control, phone clip) | 300 | 300 | 0 (0.00%) | 0 (0.00%) | 1, 1, 1, 1 |
| 30 to 24 (phone clip) | 300 | 240 | 60 (20.00%) | 0 (0.00%) | 1, 1, 0, 1, 1, 1, 1, 0 |
| 30 to 60 (phone clip) | 300 | 600 | 0 (0.00%) | 300 (50.00%) | 2, 2, 2, 2 |
| 23.976 to 23.976 (control, camera clip) | 240 | 240 | 0 (0.00%) | 0 (0.00%) | 1, 1, 1, 1 |
| 23.976 to 30 (camera clip) | 240 | 301 | 0 (0.00%) | 61 (20.27%) | 2, 1, 1, 1, 2, 1, 1, 1 |
| 23.976 to 60 (camera clip) | 240 | 600 | 0 (0.00%) | 360 (60.00%) | 2, 3, 2, 3 |
Our measurement, October 27, 2026, same script method (test-live.py), ffmpeg 6.1.1. The phone clip gave exactly the animated film's numbers. The camera clip shows what "24 fps" usually means in practice: 23.976 fps, so converting it to 30 repeats 61 of 301 output frames, one more than a true 24 fps file.
Converting 23.976 to 24 fps changed nothing in our 10 second excerpt. The two rates differ by 0.1%, so the fps filter repeats one frame about every 1,001 frames, roughly every 41.7 seconds (our arithmetic: 23.976 fps is exactly 24,000 / 1,001, so 24 / (24 - 24,000 / 1,001) = 1,001 frames, which at 24 frames a second is 41.7 seconds).
How do you check and set the frame rate yourself?
Read the video stream with ffprobe. In our check, a 10 second excerpt of the 24 fps source printed r_frame_rate=24/1 and nb_frames=240, and the same file after conversion printed 30/1 and 300 frames, the numbers we expected before running it.
Convert only when you must, for example to match a mixed timeline. The fps filter is the plain repeat or drop conversion that we measured; editors may offer frame blending or optical flow, which we did not measure.
If r_frame_rate and avg_frame_rate differ, the file may have a variable frame rate, which many phones produce. It is a sign, not proof: some constant-rate files also show two different values, and a variable file can show equal ones, so check the frame timestamps (ffprobe -show_entries frame=pts_time) or a tool such as MediaInfo before you convert. Our test files were constant. Convert such a file to a constant rate in your editor before you cut it, and check the result with the command above. We did not test a variable frame rate file for this page.
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,avg_frame_rate,nb_frames -of default=nw=1 input.mp4ffmpeg -i input.mp4 -vf fps=30 -c:v libx264 -crf 20 -pix_fmt yuv420p output.mp4What do YouTube, Instagram and TikTok publish about frame rate?
YouTube Help (read October 27, 2026) says: "Content should be encoded and uploaded in the same frame rate it was recorded." It lists common rates of 24, 25, 30, 48, 50 and 60 frames per second, says other rates are also acceptable, and asks for interlaced content to be deinterlaced first, for example 1080i60 to 1080p30.
The Instagram Graph API reference for Reels (read October 27, 2026) lists "Frame rate: 23-60 FPS", MOV or MP4, HEVC or H264, progressive scan, and a 3 second to 15 minute duration. That is the specification for uploads through the API, not a description of what the Instagram app does to a file.
The TikTok Content Posting API guide (read October 27, 2026) lists "Minimum of 23 FPS" and "Maximum of 60 FPS" for video, in MP4, WebM or MOV. Like the Instagram figure, it is the API specification and not a description of what the TikTok app does to a file.
Limits and what we did not test
- We tested one animated film in three versions and two live-action clips: a 30 fps phone clip and a 23.976 fps camera clip. We did not test noisy low-light footage or a variable frame rate phone recording.
- The 30 and 60 fps files are separate downloads of the same film, not one file converted by us. The control for each source was a same-rate conversion, which gave 0 repeats and 0 drops.
- We tested ffmpeg's fps filter only. Frame blending, optical flow and an editor's own conversion were not measured.
- We did not upload anything to YouTube, Instagram or TikTok, so we do not know what each platform's encoder does to a 24 fps or 60 fps file. The platform statements above are quoted from their help pages.
- We did not test 25 or 50 fps, drop frame timecode (29.97 and 59.94 fps) or 120 fps footage, and we did not run a viewer test of how visible the uneven hold is.
- The free Inspect tool on this site measures the frame rate by playing the first frames of the file in your browser; a file faster than your screen's refresh rate reads low there, so check 120 fps footage with ffprobe as shown above. No Koldflux free tool changes the frame rate.
Do it in your browser
Free Koldflux tool, no account needed.
Questions people ask
What frame rate should I use for YouTube?
The one you recorded at. YouTube Help says content should be encoded and uploaded in the same frame rate it was recorded. Its listed common rates are 24, 25, 30, 48, 50 and 60 fps.
Is 60 fps better than 30 fps?
It has twice as many frames each second, which helps with fast motion, and it costs a higher bitrate: YouTube recommends 12 Mbps instead of 8 Mbps for 1080p SDR. Footage recorded at 30 fps does not become smoother when converted to 60: in our test every frame was just repeated.
What happens if I convert 24 fps to 30 fps?
With the fps filter, nothing is dropped and 60 of 300 output frames (20.00%) repeat the one before, one in every five, in a 1, 2, 1, 1, 1, 2 hold pattern on our 10 second excerpt.
What happens if I convert 60 fps to 30 fps?
Every second frame is dropped: 300 of 600 source frames (50.00%) never appear. Nothing repeats.
What frame rate do Instagram and TikTok accept?
The Instagram Graph API reference lists 23-60 FPS for Reels and the TikTok Content Posting API guide lists a minimum of 23 and a maximum of 60 FPS, both read October 27, 2026. Those are API upload specifications.
How do I check a video's frame rate?
Run ffprobe with -show_entries stream=r_frame_rate,avg_frame_rate,nb_frames. If the two rates differ, the file may have a variable frame rate; confirm it from the frame timestamps before converting. In a browser, the Koldflux Inspect tool measures the rate while the clip plays.
Related
Sources and how we checked
- YouTube recommended upload encoding settings (YouTube Help) (checked 2026-10-27)
- IG User Media, Reels specifications (Instagram Platform, Meta for Developers) (checked 2026-10-27)
- Content Posting API, media transfer guide (TikTok for Developers) (checked 2026-10-27)
- Big Buck Bunny, licence and downloads (Blender Foundation, CC BY 3.0) (checked 2026-10-27)
- fps filter (FFmpeg documentation) (checked 2026-10-27)
- Our test run log, October 27, 2026 (Koldflux, plain text) (checked 2026-10-27)
- Our test script (Koldflux, Python) (checked 2026-10-27)
- Our live-action test script (Koldflux, Python) (checked 2026-10-27)
- Slow Motion Hand-Feeding a Tufted Titmouse (Wikimedia Commons, CC0) (checked 2026-10-27)
- Slow Motion Salad - Sony FS700 (Wikimedia Commons, CC BY 3.0, Jack Whaley) (checked 2026-10-27)
The counts and percentages are our measurements. We cut 10 second excerpts starting at 60 seconds from three downloads of Big Buck Bunny (24 fps 320x180, 30 fps and 60 fps 1920x1080), converted each to 24, 30 and 60 fps with the ffmpeg 6.1.1 fps filter, hashed every decoded frame as 160x90 grayscale with the framemd5 muxer and matched each output frame to the source frame with the same hash. Same-rate conversions were the control. The platform statements are quoted from the help pages read on October 27, 2026.