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.mp4

In 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.

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.mp4

Performance 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.