Speed Up Video with FFmpeg Frame Interpolation

This guide demonstrates how to speed up a video in FFmpeg while maintaining smooth, fluid motion using frame interpolation. When you simply accelerate a video, the motion often becomes choppy because frames are dropped; however, by combining video speed adjustments with FFmpeg’s motion interpolation filter (minterpolate), you can generate seamless transitions and maintain a high frame rate.

The Core FFmpeg Command

To speed up a video and interpolate the missing frames, you must combine the setpts filter (which alters video speed) with the minterpolate filter (which generates the smooth, intermediate frames).

Use the following command to double the speed (2x) of a video and output a smooth 60 frames per second (fps) result:

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS,minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:vsbmc=1" -an output.mp4

Parameter Breakdown

Adjusting Audio Speed (Optional)

If you want to keep the audio and speed it up to match the 2x video, replace the -an flag with the audio tempo filter (atempo):

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS,minterpolate=fps=60:mi_mode=mci" -af "atempo=2.0" output.mp4

Performance Consideration

Motion compensated interpolation (mi_mode=mci) is highly CPU-intensive and can take a significant amount of time to render. If the render times are too slow for your project, you can change the mode to mi_mode=blend. This blends adjacent frames together rather than calculating motion vectors, which renders much faster but results in a slightly ghosted, motion-blurred look rather than true motion estimation.