Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T17:22:32.537Z
Answers.Text: 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.
Answers.UserDisplayName: user3643
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T17:28:48.033Z
Answers.Text: For storage in files. You can always cast the variables during operations.
Answers.UserDisplayName: Gyan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T18:40:04.083Z
Answers.Text: 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.
Answers.UserDisplayName: Gyan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T19:27:35.983Z
Answers.Text: @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?
Answers.UserDisplayName: user3643
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T19:43:14.900Z
Answers.Text: 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.
Answers.UserDisplayName: Gyan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T11:08:20.500Z
Answers.LastActivityDate: 2017-01-28T13:02:25.293Z
Answers.LastEditDate: 2017-01-28T13:02:25.293Z
Answers.UserDisplayName: Gyan
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T16:45:46.770Z
Answers.LastActivityDate: 2017-01-28T16:51:02.787Z
Answers.LastEditDate: 2017-01-28T16:51:02.787Z
Answers.UserDisplayName: DepressedDaniel
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T16:02:32.373Z
Answers.Text: You mentioned 50 Hz AC. Are you saying that these non-integer frame rates were used to avoid interference with AC power supply frequency?
Answers.UserDisplayName: Violet Giraffe
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T17:04:27.417Z
Answers.Text: @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
Answers.UserDisplayName: MmmHmm
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T17:26:14.027Z
Answers.Text: @Mr.Kennedy, the non-integer frame rates are "drop _frame_", not drop down.
Answers.UserDisplayName: Michael Liebman
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T18:12:35.603Z
Answers.Text: @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.
Answers.UserDisplayName: MmmHmm
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T19:22:41.157Z
Answers.Text: 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.
Answers.UserDisplayName: Michael Liebman
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T19:49:15.723Z
Answers.Text: @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.
Answers.UserDisplayName: MmmHmm
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-01-05T18:58:22.157Z
Answers.Text: "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".
Answers.UserDisplayName: PRMan
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-01-28T12:33:26.523Z
Answers.LastActivityDate: 2017-01-28T18:27:28.177Z
Answers.LastEditDate: 2017-01-28T18:27:28.177Z
Answers.UserDisplayName: MmmHmm
Body: <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>
  
Tags: <ffmpeg><encoding><framerate>
Title: ffmpeg- What's the difference between "NN000/1000 fps" and "NN000/1001 fps"?
UserDisplayName: Patrick Kenny
ThreadText: # 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**: @username_5 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**: @username_6 "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**: @username_6 "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`.
  
  
  ---
  
  