Video FPS Converter
Work out what converting between frame rates actually costs: retiming changes the duration and pitch, resampling duplicates or drops frames and can judder. Shows the frame cadence, the pitch shift in cents, and the ffmpeg command for either method.
🔒 This tool runs entirely in your browser. Your files are never uploaded to a server.
Retime — change the speed
Every frame kept. Duration changes. Audio shifts pitch.
Resample — duplicate or drop frames
Duration preserved. Audio untouched. Motion may judder.
Frame cadence
How many times each source frame is used when resampling. Even bars mean smooth motion; uneven bars are judder.
Commands to actually do it
This tool plans the conversion and gives you the command — it does not re-encode video, because that needs a real encoder
rather than a browser tab. If you load a file, it is read locally to get the duration and nothing is uploaded. Note that a
browser does not expose a file's frame rate, so the source rate above is yours to set;
ffprobe will tell you if you are unsure.
How to use it
- Set the source and target frame rates, and the duration of your clip.
- Compare the two panels — one changes the duration, the other changes the frames.
- Check the cadence bars: even bars mean smooth motion, uneven bars mean judder.
- Copy the command for the method you chose and run it locally.
Two different operations, often confused
"Convert to 25fps" can mean either of two things, and they produce different files. Retiming keeps every frame and plays them at the new rate, so a 60-second clip becomes a different length and the audio shifts pitch. Resampling keeps the duration and invents or discards frames to fill the new rate, so audio is untouched but motion is no longer a faithful record of what the camera saw.
24 → 25, one minute of footage
retime 1440 frames → 1440 60.000s → 57.600s pitch +71 cents
resample 1440 frames → 1500 60.000s → 60.000s 60 duplicated
Note the direction: the same frames at a higher rate finish sooner, so the clip plays faster and the pitch rises rather than falls. Seventy-one cents is about seven-tenths of a semitone — plainly audible — so for anything with sound, resampling is the answer. The exception is the film-to-video adjustment between 24 and 23.976, where the same calculation gives 1.7 cents. That is inaudible, and retiming is preferred there precisely because it touches no frames.
Why the cadence matters more than the ratio
The ratio tells you how many frames you gain or lose; the cadence tells you whether it will look right. When frames are duplicated unevenly, some are held on screen twice as long as their neighbours, and the eye reads that unevenness as a stutter — most obviously in a slow pan, least obviously in a static shot.
24 → 48 2, 2, 2, 2, 2, 2 … even, no judder
24 → 30 2, 1, 1, 1, 2, 1, 1, 1 … uneven, visible judder
24 → 25 2, 1, 1, 1, 1, 1, 1 … nearly even, mild
50 → 25 every second frame dropped even, no judder
That two-one-one-one pattern for 24 to 30 is the familiar 3:2 pulldown, written in whole frames rather than fields. Note that 24 to 25 is uneven too, but only one frame in twenty-five is doubled rather than one in four, which is why the PAL conversion has a reputation for being tolerable and the NTSC one does not.
The 1001 business
23.976 and 29.97 are not really those numbers. They are 24000/1001 and 30000/1001 — 23.976024 and 29.970030 — a convention inherited from the introduction of colour to NTSC broadcast. The practical consequence is that you should give an encoder the fraction and not the decimal: over a feature-length file the rounding accumulates into real drift against a separate audio track. The commands this tool produces use the fractions for exactly that reason.
What it cannot tell you
It cannot read your file's frame rate, because browsers do not expose one — duration and dimensions yes, frame rate no. It
cannot tell you whether your footage is interlaced, which changes the right approach entirely. And it does no encoding, so
it cannot tell you how the result will actually look; judder is a number here and a judgement in the edit. Run
ffprobe first if you are unsure what you are starting with.
FAQ
Does this convert my video?
No, and that is deliberate rather than a limitation we are hiding. Changing a frame rate means re-encoding every frame, which needs a real encoder — ffmpeg on your machine or a server doing the work. What this does is the part people actually get wrong: working out which of the two methods you want, what it will cost you in frames or in pitch, and what the command should be. It hands you that command ready to run.
Which method should I pick?
If the video has dialogue or music, resample — audio stays exactly as recorded. If it is silent footage, or you are doing the classic 24 to 23.976 film adjustment where the pitch shift is 1.7 cents against a 100-cent semitone, retiming is better because motion stays perfectly smooth. The short version: retime for silent or near-identical rates, resample for anything with sound.
What is judder, and why does 24 to 30 have it?
Because 30 divided by 24 is 1.25, not a whole number, so frames cannot be duplicated evenly. Over ten seconds you get 240 frames in and 300 out, with 60 duplicated in a repeating pattern of two-one-one-one. One frame in four is held twice as long as its neighbours, and the eye picks that up as a stutter in panning shots. Converting 24 to 48 instead duplicates every frame exactly once, which is why it has no judder at all.
Why are 23.976 and 29.97 written as fractions?
Because that is what they are: 24000/1001 and 30000/1001, which come out as 23.976024 and 29.970030. They are not rounded decimals, and telling an encoder "23.976" instead of the exact fraction accumulates drift over a long file. The commands here use the fraction for that reason.
Why does it not detect my file's frame rate?
Because browsers do not expose it. A video element will give up its duration and pixel dimensions, both of which are read locally here, but not its frame rate — there is no API for it. So the source rate is yours to set, and ffprobe will tell you if you are not sure. Guessing it for you would be worse than asking.
Is my video uploaded?
No. If you load a file it is read locally to pull out the duration and dimensions, and the file itself never leaves your device. Most of the time you do not need to load anything — typing the duration is enough.
How we compare
| Feature | Online Tool Store | Online video converters | ffmpeg on your own |
|---|---|---|---|
| Video never leaves your device | ✓ | ✗ | ✓ |
| Shows the frame cadence and judder | ✓ | ✗ | ✗ |
| Makes the retime vs resample choice explicit | ✓ | Chooses for you | You must know |
| Uses exact 1001-denominator rates | ✓ | Varies | If you type them |
| Actually re-encodes the video | ✗ | ✓ | ✓ |
| Detects the source frame rate | ✗ | ✓ | ✓ |
| Optical-flow interpolation | ✗ | Some do | ✓ |
Use this to decide what to do and to get the command right, then run it yourself — which is also the version where your footage stays on your machine and you keep control of the encoding settings. An online converter is quicker if you do not mind uploading; neither it nor this tool will tell you what the judder actually looks like, which is a decision for the edit.