Converting Videos To 60 FPS With FFmpeg

Hey there,

I’ve been using ffmpeg to convert videos to 60fps for a while now using minterpolate in ffmpeg which works great (example output).

Unfortunately, it takes an incredibly long time as it appears to only work on a single thread.

I attempted to workaround this issue in the same manner that other people have, by writing a script that would split the source video into chunks, convert the chunks to 60fps versions, and then stitch the chunks back together again into one video file.

Unfortunately, it didn’t take me long to realize that this doesn’t quite work, as one really needs to interpolate the jump between the chunks as well, which is also made more difficult by the fact that if one was converting between 24 and 60fps, the jump between the video segments would essentially become a jump of 2.5 frames, not just 2 (for one additional frame). I created the following diagram to get the point across:

Working At Frames Level

Does anyone know if it’s possible to just run a process to convert the video into its individual frames, and then run the interpolation process on those frames instead? Then I can just stitch the new set of frames back into a new video. I don’t mind if I can only create a video using factors of the original framerate. E.g. if a 24 fps video could only become 48 or 72 fps.

Alternatively, if there is another way to speed up minterpolation command below by somehow unlocking threading, please let me know. Simply adding -threads 12 doesn’t work.

ffmpeg \
  -i input.mp4 \
  -vf "minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1" \
  output.60fps.mp4

I’m not sure why you’re doing this to the video encode rather than utilizing a renderer that does this such as SVP or Intel VPL?

Unfortunately I don’t think there’s a fundamental way to accelerate this other than to run it on the GPU. But then you have to deal with instability with GPU implementations.

I did use SVP a while ago, but it had a few problems which were:

  1. It suddenly stopped working for me on Linux and i never got back to getting it to work again based on other points here, and fact i found minterpolate solution.
  2. It requires a computer powerful enough to perform the interpolation in realtime, and on a device that supports SVP. E.g. i couldnt play these videos on my small projector that just runs jellyfin/kodi.
  3. Even with the powerful computer running, I swear the smooth playback quality was not as good as if the video had been pre-rendered through ffmpeg + minterpolate which gives amazing results.