[Home]Tutorials/Framerate Conversion

Difference (from prior major revision) (author diff)

Removed: 37d36

Removed: 128d126


This section is intended for users who want to convert the framerate of the input file to a different output framerate. It also handles the case when the input file is of variable framerate.

Jargon used

fps : Frames-per-second / framerate. The number of frames which will be displayed during 1 second.

frc : Frame rate code. This is directly related to fps. When dealing with fractional framerates, it is more convenient and accurate to give transcode a code. The most commonly used codes are

                1  :  23.976 (24000/1001.0)
                3  :  25
                4  :  29.970 (30000/1001.0)

Its worth noting that none of these filters intent to change the runtime of the movie; if one -- for example -- goes from 29.9 to 23.9 the movie will not be shorter or anything, every frame will be displayed for a longer time period. Because there will be fewer frames in the resulting movie and the display time of each frame is longer, the movie will have the same running.

For convenience, a table relating fps and display time

 frc |  fps  | Display time (sec) | Milliseconds
  1  | 23.97 |  1 / (24000/1001)  |   41.71
  3  | 25.00 |  1 / (25000/1000)  |   40.00
  4  | 29.97 |  1 / (30000/1001)  |   33.37
When converting from fps1 to fps2 it must be clear that the audio stream will not be touched at all. Since the resulting movie has the same display length, the audio in the new file must be equal to the audio in the old file. You currently cannot use transcode to slow down or speed up a movie.

Meaningful fields of application

Changing the framerate of a movie can be neccessary to improve the quality, shrink the size or to prepare a movie for a specific output medium.

Available Modules

There are several ways (as always) in transcode to do framerate conversions (in lexicographical order)

  Filter(s)     | Smartness | Versatility | Intented Use
  29to23        |   none    |  little     | 29.9 -> 23.9
  32drop        |   high    |  little     | 29.9 -> 23.9
  ivtc+decimate | very high |   none      | 29.9 -> 23.9
  modfps        |   fair    |   high      | any  -> any
  fps           |   none    |   high      | any  -> any
  tc_video      |   none    |  little     | 23.9 -> 29.9
The filter takes no options. It basically skipps every 5th frame. It interpolates the other 4 frames out of the 5 it recieves. Since it skipps every 5th frame it can also be used for converting 25 fps to 20 fps.

The filter takes no options. It does a simple inverse telecine. Its algorithm works best when used in RGB mode. It tries to find interlaced frames and adjusts its pattern.

These two filters working hand in hand. The first filter (ivtc) inverts the telecine and the second one (decimate) drops 1 frame out of 4 so that the output will be at 23.9 fps. These two filters are really smart and do their job very well. The ivtc filter can deal with a changing telecine pattern and adjusts its algorithm to fit it. The decimate filter searches for two similar frames out of five and drops one of which look similar.

This filter tries to reach the desired framerate by cloning and dropping of frames. In its default mode it will buffer the last 5 frames, and drop the frame with the least difference with the frame that follows it, or clone the frame with the most difference. Additionally, it can blend frames or mingle frame fields when cloning. Additionally it has a fast mode, but results look poor.

This filter is basically the same as the fast mode of `modfps' its just doing its work a slightly different way.

This filter increases the framerate by doing telecine. It takes no options. It makes 5 frames out of 4 by clever dealing with the fields ( == "lines") of a frame.

Framerate related transcode options

Transcode has two options dealing with framerates, `-f'and `--export_fps'. Both options take one to two arguments. The first argument is the framerate as a floating point number, the second argument is the frameratecode. The frc always overwrites the supplied fps value, so one can write `-f 0,1 ... --export_fps 0,4'.

Transcode tries to do the right thing with these options, the following table shows the interdependencies. Import is `-f' and Export is `--export_fps'

  Import  | Export  | Result
  omitted | omitted | import will be probed, export set to import 
  given   | omitted | export set to import 
  omitted | given   | import will be probed, export used as given
  given   | given   | Both will used as given
The audio is always read at the export rate.

There is another option related to framerates which is --export_frc. This option is only there because of backward-compatibility. It does the same like the second argument to --export_fps.

Variable Framerate Input

Some video sources are not of constant framerate. This is mostly true for Anime and some DVD Releases of TV series. Use this command line (XXX: Write much more here :)

 transcode -i vobs/ \
           -V \
           -x vob,vob \
           -f 0,4 \
           -M2 \
           -R3 \
           -w2 \
           --export_frc 1 \
           -J ivtc \
           -J decimate \
           -B 3,9,16 \
           --hard_fps \
           --print_status 10 \
           -J 32detect=verbose=1:force_mode=5:chromathres=2:chromadi=9 \
           -y xvid \
           -o next1.avi

(C) 2003 (v0.1) Tilmann Bitterberg <transcode at tibit.org>

Transcode Wiki | Tutorials | Recent Changes | Preferences
Password required to edit | View other revisions
Last edited February 8, 2005 8:03 pm by dziban.ligo.caltech.edu (diff)