FFmpeg minterpolate: How to Convert 30fps to 60fps
This article provides a straightforward guide on how to use FFmpeg’s
minterpolate (motion interpolation) filter to convert a 30
frames per second (fps) video into a smooth 60fps video. You will learn
the exact command-line syntax, understand the key parameters of the
filter to customize your output, and discover how to optimize settings
for the best balance between visual quality and rendering speed.
The Basic Command
To increase a video’s frame rate from 30fps to 60fps using the default motion estimation settings, use the following basic FFmpeg command:
ffmpeg -i input.mp4 -filter:v "minterpolate=fps=60" output.mp4In this command: * -i input.mp4 specifies your source
30fps video. * -filter:v (or -vf) applies the
video filter. * minterpolate=fps=60 tells FFmpeg to use the
motion interpolation filter to target a destination frame rate of 60fps.
* output.mp4 is the name of your newly generated, smooth
60fps video.
Enhancing Quality with Advanced Parameters
The default settings of minterpolate might sometimes
introduce visual artifacts (like “halo” or “ghosting” effects) around
fast-moving objects. You can fine-tune the filter using specific
parameters to achieve professional-grade results:
1. Motion Interpolation Mode
(mi_mode)
This parameter dictates how new frames are generated. *
dup: Duplicates existing frames. (Fast, but does not add
smoothness). * blend: Blends adjacent frames together. (Can
look blurry). * mci: Motion Compensated Interpolation. This
is the default and uses motion vectors to calculate and draw brand-new
intermediate frames for maximum smoothness.
2. Motion Estimation Mode
(me_mode)
This defines how the motion between frames is calculated. *
bilat: Bilateral motion estimation (estimates motion from
both past and future frames). * bidir: Bidirectional motion
estimation (generally yields more accurate motion vectors).
3. Motion Compensation Mode
(mc_mode)
This determines how the pixels are moved to create the new frame. *
obmc: Overlapped Block Motion Compensation. It reduces
blocking artifacts and provides the highest quality, though it is
CPU-intensive.
4. Scene Change Detection
(scd)
When a video cuts to a completely different scene, interpolating
between the last frame of the old scene and the first frame of the new
scene creates an ugly transition. * Setting scd=fdsc (Frame
Difference Scene Change detection) prevents interpolation across camera
cuts.
Recommended High-Quality Command
For the smoothest and cleanest 60fps output, combine these advanced settings into a single command:
ffmpeg -i input.mp4 -filter:v "minterpolate=fps=60:mi_mode=mci:mc_mode=obmc:me_mode=bidir:scd=fdsc" output.mp4Performance Warning
The minterpolate filter is extremely CPU-heavy because
it performs complex mathematical calculations to predict where pixels
move between frames. Using high-quality settings like
mc_mode=obmc will significantly slow down the rendering
process. If your render speeds are too slow, you can omit the advanced
settings and stick to the basic command, or run the command overnight
for longer video files.