Answer

23.976 vs 24 fps.
Two different rates, 0.1 percent apart.

23.976 fps is not a rounded 24. It is exactly 24000/1001 frames per second, so every frame lasts slightly longer than a true 24 fps frame. Pick one at the start of the job, keep camera, timeline and export on it, and upload the file at the rate you exported. Nothing on upload here changes it.

See the plans

Video hosting for filmmakers · 5 GB free · Paid plans from USD 9/month

By uncompressed.io · Updated September 2026

The short answer

23.976 means 24000/1001,
and 24 means 24.

The two rates look interchangeable in a dropdown and are not. HandBrake’s documentation lists “23.976/24 for film”, meaning both are film rates. Microsoft’s Media Foundation documentation gives the exact values: 23.976 is the fraction 24000/1001, and 24 is 24/1.

24000/1001

23.976 fps, exactly

Microsoft Media Foundation frame-rate table

41.72 ms

One 23.976 frame

417,188 units of 100 ns, per Microsoft

41.67 ms

One 24 fps frame

416,667 units of 100 ns, per Microsoft

3.6 s

Per hour of running time

Our arithmetic: one part in 1,000 of 3,600 seconds

The gap is the ratio 1001 to 1000. A 23.976 frame is on screen 0.1 percent longer than a 24 fps frame, so the same sequence of frames runs 0.1 percent longer in time. Over an hour of running time that is 3.6 seconds. You will not see it in a single shot. You will meet it when footage, audio or timecode recorded at one rate lands in a timeline set to the other, because something then has to convert.

The same pattern elsewhere

24, 30 and 60
each have a 1001 twin.

Microsoft’s table lists three fractional rates alongside the whole ones. If you have ever wondered why 29.97 and 59.94 exist, they are the same one-in-a-thousand offset applied to 30 and 60.

Exact fraction
Time per frame
23.976
24000/1001
417,188 x 100 ns
24
24/1
416,667 x 100 ns
29.97
30000/1001
333,667 x 100 ns
30
30/1
333,333 x 100 ns
59.94
60000/1001
166,833 x 100 ns
60
60/1
166,667 x 100 ns

Values as published in Microsoft Learn's MFFrameRateToAverageTimePerFrame look-up table, fetched 18 September 2026.

What to do

Settle the rate in the edit,
then leave it alone.

Neither rate is better looking. The mistake is mixing them without deciding who converts. Four steps keep one rate from camera to client.

1

Read the spec first

If a broadcaster, distributor or client names a rate, that is your rate. If nothing is named, choose one and write it down for the whole team.

2

Match camera and timeline

Shoot at the chosen rate and set the timeline to it before the first clip goes in, so nothing is converted by default.

3

Export at the timeline rate

Leave the export on the timeline or source rate. HandBrake's Same as Source keeps the source rate with no conversion.

4

Upload what you exported

YouTube's guidance is to encode and upload at the rate it was recorded. Here the file plays at the rate you exported it at.

If you do have to change the rate, do it on purpose, in the edit, and check picture and sound afterwards. How an editing application converts a clip whose rate differs from its timeline varies by application and setting, so read its documentation rather than trusting a default. HandBrake’s frame-rate page names encoding for import into an editor as the special case where a constant frame rate is the right choice.

One detail on YouTube: its list of common frame rates names 24, 25, 30, 48, 50 and 60 and does not list 23.976. The same page tells you to upload at the rate you recorded. It does not tell you to convert 23.976 to 24, so do not convert just to match a list.

On uncompressed.io

The file keeps its own cadence,
and nothing changes it.

Browser playback uses your uploaded export without another platform re-encode. Codec, device and connection requirements still apply. The upload check reads the container, duration, average bitrate, and each video track’s codec and frame size. It does not read the frame rate, it does not flag a 23.976 file uploaded next to a 24 fps one, and it does not conform either. The film plays at the rate it was exported at.

That is the honest limit of a host that never re-encodes: it will not fix a rate mix-up for you. If a client reports that a cut feels off against its music or its timecode, the answer is in the project, not in the upload. Re-export at the right rate and replace the file.

What we do not claim

We have not tested how every browser and display presents 23.976 versus 24 fps playback, and display refresh rates vary by device. We claim only what the code does: no frame-rate check, no conversion, the exported file served as uploaded.

Questions

Frequently asked

Is 23.976 fps the same as 24 fps?

No. Microsoft's Media Foundation documentation lists them as separate entries: 23.976 as the fraction 24000/1001, 24 as 24/1. Each 23.976 frame lasts 41.7188 milliseconds against 41.6667 for 24, a difference of one part in a thousand.

Which one should I use?

Whichever your delivery requires. If a broadcaster, distributor or client spec names a rate, use that one. If nothing names one, the choice matters less than consistency: camera, timeline and export on the same rate, so no step has to convert.

Should I convert 23.976 footage to 24 before uploading?

Not for upload's sake. YouTube's own encoding guidance says to encode and upload at the same frame rate the content was recorded, and HandBrake's Same as Source setting keeps the source rate with no conversion. Converting is an edit decision, made before the export.

Does uncompressed.io change the frame rate of my file?

No. The upload check reads the container, duration, bitrate, codec and frame size. It does not read or alter the frame rate, and the file is served as uploaded, so it plays at the rate it was exported at.

Upload the cadence you exported

The file you export is the file that plays: no conform, no re-encode on our side. Settle the frame rate in the edit, then share it with your client.