<p>Those are rational numbers. So, <code>24000/1000 = 24.000</code> and <code>24000/1001 = 23.976</code>. These are in fact the exact representations i.e. 23.976 is an approximation but 24000 divided by 1001 isn't.</p>

<p>As for why <code>24000/1001</code> and not <code>24/1.001</code>, it's because that's the smallest set of numbers that represent the value as <strong>integers</strong>. Else, a floating point variable would be needed for the denominator.</p>

CC BY-SA 3.0
2017-01-28T17:22:32.537Z
Regarding your last paragraph, are you sure integer data types are the reason it's represented in thousands? My understanding of programming is that if you do math on integer data types that results in decimals, the decimals are simply truncated in your result. If this is true then that certainly can't be the reason why they represent them in thousands.
user3643
CC BY-SA 3.0
2017-01-28T17:28:48.033Z
For storage in files. You can always cast the variables during operations.
Gyan
CC BY-SA 3.0
2017-01-28T18:40:04.083Z
From ffmpeg's `rational.h`: "*While rational numbers can be expressed as floating-point numbers, the conversion process is a lossy one, so are floating-point operations. On the other hand, the nature of FFmpeg demands highly accurate calculation of timestamps.*" framerate is stored as a AVRational struct which has two ints - one for numerator and one for denominator.
Gyan
CC BY-SA 3.0
2017-01-28T19:27:35.983Z
@Mulvya I'm sorry, but I don't quite understand. How can a data structure be lossy? You still have to do the math on the numerator and denominator. And if there's only a finite number a frame rates that are used why can't they just be enumerated?
user3643
CC BY-SA 3.0
2017-01-28T19:43:14.900Z
I didn't say or quote anything about a "a data structure be lossy". Floating point numbers have precision limited by the space devoted to their storage. A rational rep can maintain better accuracy because in code involving framerate manipulation, ffmpeg uses custom routines that keep the value in num/den form i.e. it is not collapsed to a single floating-point or integer result.
Gyan
CC BY-SA 3.0
2017-01-28T11:08:20.500Z
2017-01-28T13:02:25.293Z
2017-01-28T13:02:25.293Z
Gyan
<p>The original framerate for broadcast television was 60 fields (half of a frame) per second in the U.S., and timing was based on the oscillation of AC power (so, clearly, European television needed a different framerate under the oldest technology).</p>

<p>However, when color was added to NTSC, the color signal interfered the audio signal. By this time, more advanced means of timing were available, so the quick fix was to reduce the frame rate ever so slightly. Color was done slightly differently in PAL and this adjustment was not necessary so there is no <code>25000/1001</code>.</p>

CC BY-SA 3.0
2017-01-28T16:45:46.770Z
2017-01-28T16:51:02.787Z
2017-01-28T16:51:02.787Z
DepressedDaniel
<p>Yes, <code>24000/1000</code> is 24 fps and <code>24000/1001</code> is 23.976fps. Some refer to the X/1001 frame rates as "drop down" (as in "dropped down from the integer") but this is easy to confuse with "pull down" which often refers to the cadence of frames when fitting 24 or 25 fps material into a 30 fps program.</p>

<p>You can also think of these notations as <code>24,000 divided by 1,000 equals 24</code> and <code>24,000 divided by 1,001 equals 23.976023976 repeating</code>. This notation is also the exact same thing as saying <code>24 divided by 1 equals 24</code> and <code>24 divided by 1.001 equals 23.976023976 repeating</code>. It is, of course, quite ridiculous to articulate the repeating decimal values.</p>

<p>The <code>1001</code> options and their resulting notation are a legacy from analog color television systems. As Mulvya points out "it's because that's the smallest set of numbers that represent the value as integers". These standards are still around today mainly for backwards compatibility (with black and white television sets) and 'cause that's just the way TV grew up. Prior to color television, the <a href="https://en.wikipedia.org/wiki/NTSC" rel="noreferrer">NTSC</a> frame rate was actually exactly thirty frames per second.</p>

<p>As for the <code>30000/1000</code> and <code>30000/1001</code> notation it comes from the NTSC video standard. "30"fps NTSC is actually displaying 30/1.001 frames per second (sometimes referred to as "29.97" or "30DF" for short, but to be precise 29.97002997... repeating frames per second). Due to this slight difference (.01%), NTSC uses either Drop-Frame (DF) or Non Drop-Frame (NDF) time-code counting. Drop-Frame "drops" frame counts in a pattern such that every ten minutes the time-code duration will correspond to the actual playback duration. No image frames are dropped and this was mainly a consideration for broadcasters fitting their programs with commercial breaks. Non Drop-Frame on the other hand more accurately represents a count of the total number of frames in a program (for those who enjoy counting in base 24:60:60:30...)</p>

<p>As for <code>25000/1000</code> there's no 25/1.001fps standard because 25fps is a <a href="https://en.wikipedia.org/wiki/PAL" rel="noreferrer">PAL</a> standard and PAL video systems were engineered using 50Hz AC power which did not have the same issues as NTSC when color came about.</p>

CC BY-SA 3.0
2017-01-28T16:02:32.373Z
You mentioned 50 Hz AC. Are you saying that these non-integer frame rates were used to avoid interference with AC power supply frequency?
Violet Giraffe
CC BY-SA 3.0
2017-01-28T17:04:27.417Z
@VioletGiraffe both NTSC (29.97fps) and PAL(25fps) were engineered for use with AC mains. The characteristics of the US standard with AC (60Hz) led to the implementation of NTSC color video with 29.97 (30/1.001). The implementation of PAL color with the European AC standard (50Hz) did not require the same engineering considerations. [This blog](https://www.stuckey.co/tbt-vfw-and-29-97-fps-ntsc-video/) explains some of the history/engineering considerations for the non-integer standards. 24/1.001 came from fitting film (24fps) into NTSC. Fitting 24fps film into 25fps (PAL) video is much easier
MmmHmm
CC BY-SA 3.0
2017-01-28T17:26:14.027Z
@Mr.Kennedy, the non-integer frame rates are "drop _frame_", not drop down.
Michael Liebman
CC BY-SA 3.0
2017-01-28T18:12:35.603Z
@MichaelLiebman "drop frame" refers specifically to the time code, "some" refer to the non-integer *frame rate* as "drop down" - i.e. *dropping* the frame rate down from the integer, e.g. *30 drop down is the frame rate of NTSC* & *drop frame skips from 00;09;59;28 to 00;10;00;00.* This was common parlance in the late nineties and early '00s prior to the ubiquity of digital standards.
MmmHmm
CC BY-SA 3.0
2017-01-28T19:22:41.157Z
In my entire career in television, which started in the mid-90s in the US, I've never heard the term "drop down" frame rate. I could not find any reference to that term in the SMPTE journal.
Michael Liebman
CC BY-SA 3.0
2017-01-28T19:49:15.723Z
@MichaelLiebman "some" not "SMPTE" - likewise been working professionally in television video film and CG since 1987. "Drop Frame" is a time code convention, not a frame rate. If you'd like to discuss the issue further we can start a conversation as this is not adding anything to answering the OP's question.
MmmHmm
CC BY-SA 4.0
2022-01-05T18:58:22.157Z
"Fitting 24fps film into 25fps (PAL) video is much easier"  I have to take issue with the fact that speeding up your video 4% and making everyone sound slightly like chipmunks is "easier".
PRMan
CC BY-SA 3.0
2017-01-28T12:33:26.523Z
2017-01-28T18:27:28.177Z
2017-01-28T18:27:28.177Z
MmmHmm
<p>I'm trying to select the correct capture options for <code>ffmpeg</code> and I'm confused by this kind of listing:</p>

<pre><code>[decklink @ 00000000010564c0]   17      3840x2160 at 24000/1001 fps
[decklink @ 00000000010564c0]   18      3840x2160 at 24000/1000 fps
[decklink @ 00000000010564c0]   19      3840x2160 at 25000/1000 fps
[decklink @ 00000000010564c0]   20      3840x2160 at 30000/1001 fps
[decklink @ 00000000010564c0]   21      3840x2160 at 30000/1000 fps
</code></pre>

<p>Based on the fact that 24 and 30 have two entries and 25 only has one, I assume that the two 24 options are true 24fps and 23.9fps, and the two 30 options are true 30fps and 29.97fps.</p>

<p>But which is which?  And why is this kind of notation used?</p>

<ffmpeg><encoding><framerate>
ffmpeg- What's the difference between "NN000/1000 fps" and "NN000/1001 fps"?
Patrick Kenny
# ffmpeg- What's the difference between "NN000/1000 fps" and "NN000/1001 fps"?

(Asked by: username_0 on 2017-01-28)

I'm trying to select the correct capture options for ffmpeg and I'm confused by this kind of listing:
[decklink @ 00000000010564c0]   17      3840x2160 at 24000/1001 fps
[decklink @ 00000000010564c0]   18      3840x2160 at 24000/1000 fps
[decklink @ 00000000010564c0]   19      3840x2160 at 25000/1000 fps
[decklink @ 00000000010564c0]   20      3840x2160 at 30000/1001 fps
[decklink @ 00000000010564c0]   21      3840x2160 at 30000/1000 fps

Based on the fact that 24 and 30 have two entries and 25 only has one, I assume that the two 24 options are true 24fps and 23.9fps, and the two 30 options are true 30fps and 29.97fps.
But which is which?  And why is this kind of notation used?

**Tags:** ffmpeg, encoding, framerate


---

## 3 answers

### Answer by username_4 on 2017-01-28. Score: 13 | Accepted answer

Yes, `24000/1000` is 24 fps and `24000/1001` is 23.976fps. Some refer to the X/1001 frame rates as "drop down" (as in "dropped down from the integer") but this is easy to confuse with "pull down" which often refers to the cadence of frames when fitting 24 or 25 fps material into a 30 fps program.

You can also think of these notations as `24,000 divided by 1,000 equals 24` and `24,000 divided by 1,001 equals 23.976023976 repeating`. This notation is also the exact same thing as saying `24 divided by 1 equals 24` and `24 divided by 1.001 equals 23.976023976 repeating`. It is, of course, quite ridiculous to articulate the repeating decimal values.

The `1001` options and their resulting notation are a legacy from analog color television systems. As Mulvya points out "it's because that's the smallest set of numbers that represent the value as integers". These standards are still around today mainly for backwards compatibility (with black and white television sets) and 'cause that's just the way TV grew up. Prior to color television, the [NTSC](https://en.wikipedia.org/wiki/NTSC) frame rate was actually exactly thirty frames per second.

As for the `30000/1000` and `30000/1001` notation it comes from the NTSC video standard. "30"fps NTSC is actually displaying 30/1.001 frames per second (sometimes referred to as "29.97" or "30DF" for short, but to be precise 29.97002997... repeating frames per second). Due to this slight difference (.01%), NTSC uses either Drop-Frame (DF) or Non Drop-Frame (NDF) time-code counting. Drop-Frame "drops" frame counts in a pattern such that every ten minutes the time-code duration will correspond to the actual playback duration. No image frames are dropped and this was mainly a consideration for broadcasters fitting their programs with commercial breaks. Non Drop-Frame on the other hand more accurately represents a count of the total number of frames in a program (for those who enjoy counting in base 24:60:60:30...)

As for `25000/1000` there's no 25/1.001fps standard because 25fps is a [PAL](https://en.wikipedia.org/wiki/PAL) standard and PAL video systems were engineered using 50Hz AC power which did not have the same issues as NTSC when color came about.

> **Comments:**
> **username_5**: You mentioned 50 Hz AC. Are you saying that these non-integer frame rates were used to avoid interference with AC power supply frequency?  
> **username_4**: @VioletGiraffe both NTSC (29.97fps) and PAL(25fps) were engineered for use with AC mains. The characteristics of the US standard with AC (60Hz) led to the implementation of NTSC color video with 29.97 (30/1.001). The implementation of PAL color with the European AC standard (50Hz) did not require the same engineering considerations. [This blog](https://www.stuckey.co/tbt-vfw-and-29-97-fps-ntsc-video/) explains some of the history/engineering considerations for the non-integer standards. 24/1.001 came from fitting film (24fps) into NTSC. Fitting 24fps film into 25fps (PAL) video is much easier  
> **username_6**: @Mr.Kennedy, the non-integer frame rates are "drop _frame_", not drop down.  
> **username_4**: @MichaelLiebman "drop frame" refers specifically to the time code, "some" refer to the non-integer *frame rate* as "drop down" - i.e. *dropping* the frame rate down from the integer, e.g. *30 drop down is the frame rate of NTSC* & *drop frame skips from 00;09;59;28 to 00;10;00;00.* This was common parlance in the late nineties and early '00s prior to the ubiquity of digital standards.  
> **username_6**: In my entire career in television, which started in the mid-90s in the US, I've never heard the term "drop down" frame rate. I could not find any reference to that term in the SMPTE journal.  
> **username_4**: @MichaelLiebman "some" not "SMPTE" - likewise been working professionally in television video film and CG since 1987. "Drop Frame" is a time code convention, not a frame rate. If you'd like to discuss the issue further we can start a conversation as this is not adding anything to answering the OP's question.  
> **username_7**: "Fitting 24fps film into 25fps (PAL) video is much easier"  I have to take issue with the fact that speeding up your video 4% and making everyone sound slightly like chipmunks is "easier".  

---

### Answer by username_1 on 2017-01-28. Score: 6

Those are rational numbers. So, `24000/1000 = 24.000` and `24000/1001 = 23.976`. These are in fact the exact representations i.e. 23.976 is an approximation but 24000 divided by 1001 isn't.

As for why `24000/1001` and not `24/1.001`, it's because that's the smallest set of numbers that represent the value as **integers**. Else, a floating point variable would be needed for the denominator.

> **Comments:**
> **username_2**: Regarding your last paragraph, are you sure integer data types are the reason it's represented in thousands? My understanding of programming is that if you do math on integer data types that results in decimals, the decimals are simply truncated in your result. If this is true then that certainly can't be the reason why they represent them in thousands.  
> **username_1**: For storage in files. You can always cast the variables during operations.  
> **username_1**: From ffmpeg's `rational.h`: "*While rational numbers can be expressed as floating-point numbers, the conversion process is a lossy one, so are floating-point operations. On the other hand, the nature of FFmpeg demands highly accurate calculation of timestamps.*" framerate is stored as a AVRational struct which has two ints - one for numerator and one for denominator.  
> **username_2**: @Mulvya I'm sorry, but I don't quite understand. How can a data structure be lossy? You still have to do the math on the numerator and denominator. And if there's only a finite number a frame rates that are used why can't they just be enumerated?  
> **username_1**: I didn't say or quote anything about a "a data structure be lossy". Floating point numbers have precision limited by the space devoted to their storage. A rational rep can maintain better accuracy because in code involving framerate manipulation, ffmpeg uses custom routines that keep the value in num/den form i.e. it is not collapsed to a single floating-point or integer result.  

---

### Answer by username_3 on 2017-01-28. Score: 4

The original framerate for broadcast television was 60 fields (half of a frame) per second in the U.S., and timing was based on the oscillation of AC power (so, clearly, European television needed a different framerate under the oldest technology).

However, when color was added to NTSC, the color signal interfered the audio signal. By this time, more advanced means of timing were available, so the quick fix was to reduce the frame rate ever so slightly. Color was done slightly differently in PAL and this adjustment was not necessary so there is no `25000/1001`.


---

