30fps to 25fps

Hello, I am new here after I have searched in vain for a German-speaking forum.:wave:
The text was translated into English using google translater.
Background: I have two different film formats through 2 cameras.
1920 x 1080px 30fps and 1920 x 1080px 25fps.
Question: Can I merge these two formats into one film without it jerky?
If so: is it better to transform the 30fps down to 25fps, or is it better to calculate the 25fps up? Do I need another program for this? And finally the request: Who can explain the correct procedure with shotcut to me in steps? Thank you very much.:+1:

Shotcut is awesome at this task. The simple solution is to create a 1920x1080 30fps project, then drop footage from both cameras onto the timeline like you normally would. Nothing special has to be done.
Shotcut will duplicate frames as necessary in the 25fps footage to scale it up to 30fps. It would look essentially the same as a 24fps feature film being broadcast to a 60 Hz NTSC television. Not bad at all.

However, if you created a 25fps timeline and dropped 30fps footage onto it, then frames from the 30fps videos would have to be discarded to scale down to 25fps, and dropping frames will make for jerky motion because the objects in the videos will make bigger jumps between the remaining frames than originally designed.

1 Like

Here is a playlist of a german tutorial-series.
Maybe this would be helpful for you: :smiley:

  1. Decide which fps you want to make the project with.
  2. Use the ffmpeg command line to convert to the decided fps those source video files that are in other fps:
    ffmpeg -i source.video.file -r decidedFPS.00000000 output.video.file
    For example: ffmpeg -i source.mp4 -r 30.00000000 output.mp4
    CHECK also those sources that AFAYK are in the choosen fps! They might be just close to that! For example phones are recording in 30 fps by default, but the files are usually not exacly 30.00000000 fps, but something like 29.97846684 etc.! :wink:
    (Search for more advanced command lines if you want to.)
  3. Create the project in Shotcut woth the decided fps, import the sources etc… :slight_smile:

What are the advantages of this approach versus dropping the files directly onto a Shotcut timeline that’s using the higher fps?

With this method the conversion will sure be smooth, and really 25 | 30 fps.
I mean really converted, not just some frames dropped | doubled. (AFAIK)
AND with this method you can convert to any fps.

The command line given only does frame dropping or duplicating. To convert frame rate with more sophistication than dropping or duplicating, there has to be a motion vector tracker combined with a morph algorithm such as optical flow. Here is an example:

ffmpeg -i Input.mp4 -filter:v minterpolate=fps=120:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:me=epzs:vsbmc=1 Output.mp4

But there are lots of problems with these algorithms. Motion vectors are generated by finding common edges between video frames then shifting those edges to create in-between frames. But if the frames are filled with motion blur from fast-moving objects, there are no edges to positively correlate, so the algorithm often guesses wrong and creates interpolated frames that look like smeary mush. Frame duplication almost always looks better and cleaner if the fps change is small. Secondly, and this goes without saying… these algorithms are slooooooow at a level that words cannot express.

For the very minor conversion of 25fps to 30fps, frame duplication is totally fine. This is what every media player does anyway when showing a 24fps movie on a 60 Hz computer screen. If you don’t hate your media player, you won’t hate dropping a 25fps video directly onto a 30fps Shotcut timeline any worse.

For sake of clarity to the OP, you provided ffmpeg command lines that were probably meant to be templates and not complete commands. For instance, setting -r 30 by itself will not necessarily remove variable frame rate from cell phone footage. This has to be combined with -vsync cfr and -filter:a aresample=async=1:min_comp=0.001:min_hard_comp=0.1:first_pts=0 to signal constant frame rate and synchronize audio with any changes. Otherwise, -r 30 by itself does exactly the same thing that Shotcut does when mixed frame rates are dropped onto a common timeline.

Secondly, there were no specific encoder settings provided, which again probably represented a template for the OP to fill in. So for clarity, in the absence of specific encoder settings, FFmpeg uses defaults that are far from lossless, meaning a generation of loss has just occurred if these videos get dropped into Shotcut and then encoded again for the final export. For pre-processing to work, much higher quality settings would need to be used for these intermediate files.

All trade-offs considered, the easiest and highest-quality (least generational loss) method is to simply drop videos onto the timeline and let Shotcut take care of the rest. It is designed for this. Pre-processing would make total sense if wanting to do a smooth 4x slow-motion sequence of course, but that’s a different scenario.

1 Like

The solution is set a Video Mode (I recommend one for 29.97 fps since that is higher and more than likely what your so-called 30 fps is). Then, just add the videos to your project and proceed. Nothing more is absolutely necessary.

This topic was automatically closed after 90 days. New replies are no longer allowed.