HACKER Q&A
📣 janandonly

Is there a reliable way to convert 30FPS to 60/120FPS?


Is there a reliable way to convert 30FPS to 60/120FPS?


  👤 PaulKeeble Accepted Answer ✓
ffmpeg can do this and it has a few filters for doing so. The basic -r for setting doesn't create frames it just repeats them and often makes things worse. However the framerate filter does work and you can use it like this:

  ffmpeg -i input.mp4 "framerate=fps=90" output.mp4

It will interpolate frames. There are a variety of other options you can use to tweak it, take a look at https://ffmpeg.org/ffmpeg-filters.html#toc-framerate for some of the other options you can play with, you separate them with a , and they use the same Key=value format. There is also another filter https://ffmpeg.org/ffmpeg-filters.html#toc-minterpolate which seems to do a similar thing but I have had issues getting it to work in the past and I am not sure how they differ.

If you have a Nvidia graphics card then you can use hardware encoding and maintain all the existing audio and the complete command would like this:

  ffmpeg -i "in.mp4" -c:v hevc_nvenc -preset slow -crf 20 -c:a copy -filter:v "framerate=fps=90" "out.mp4"

👤 daqnal
The two solutions I know are Premiere Pro's built in one called "Optical Flow" and Topaz AI's which is baked into their upscaling software. Premiere Pro's is not as good, and causes artifacts, but is more accessible than Topaz's which is very GPU heavy and costs more money if you don't want a watermark.

👤 elmerfud
There must be a way, but in my experience they all suck unless you very precisely know your content. All of the modern flat panel TV's do this with their motion smoothing, because the panel and the content are generally at different rates.

If you've ever watched something with motion smoothing, well it looks strange because that's not how we're used to seeing it, but it can look better in some scenes smoothing out long panning shots or where things tend to flow consistently in the same direction. Where it totally fails is when movement is less predictable. Then you get this odd looking mess of things moving to slow or too fast at times as it's trying to correct for missed predictions. I don't know if any free tools, maybe ffmpeg, to do this but maybe something out there

You could straight frame double which would get you to the frame rate... But it wouldn't look any smoother.


👤 jqpabc123
Bottom line: It's not possible to create accurate information where no exists.

Going from 30fps to 60fps, every other frame is missing. The best anyone or anything can ever do is guesstimate/approximate to fill in the blanks. You will likely be able to see the lack of accuracy with your eyes.

It's like crime dramas on TV where they "zoom and enhance" to identify a suspect. This would never be accepted in court due to the inaccuracy involved.


👤 janandonly
ffmpeg now has a motion interpolation filter, which will generate new frames. It can also just do a regular blend if that mode is chosen.

  ffmpeg -i in.mp4 -vf minterpolate=fps=60 out.mp4
See: https://video.stackexchange.com/questions/21613/is-it-meanin...

👤 janandonly
The reason for asking this is that I hate to see the “stuttering” between frames.

If there are ML/AI powered ways to “fill in” the difference between two frames that would be awesome.


👤 janandonly
There are all kind of “up-scaling” algorithms but are there any ways to auto fill up the “gaps” between frames?

All I can find is stuff like:

  ffmpeg -i input.mp4 -r 60 output.mp4