Create a Time-Lapse Video with Transitions in FFmpeg
This article provides a step-by-step guide on how to build a high-quality time-lapse video from a sequence of static images using FFmpeg. You will learn the exact command-line instructions needed to compile your photos, set custom frame rates, and apply smooth transition effects—such as crossfading—between each image to create a professional visual flow.
Step 1: Prepare Your Image Sequence
Before running FFmpeg, ensure your images are sequentially named in a consistent pattern inside a single folder. The easiest naming convention is numerical padding, for example:
image_0001.jpgimage_0002.jpgimage_0003.jpg
Method 1: Smooth Motion Blending (Best for Dense Time-Lapses)
If you have hundreds of images and want to create a smooth, blended
transition between each frame to eliminate flicker, the
minterpolate filter is the most efficient tool. This filter
interpolates frames by blending them together.
Run the following command in your terminal:
ffmpeg -framerate 10 -i image_%04d.jpg -vf "minterpolate=fps=30:mi_mode=blend" output_blended.mp4How it works:
-framerate 10: Tells FFmpeg to read the input images at 10 frames per second.-i image_%04d.jpg: Specifies the input files (the%04dplaceholder matches 4-digit padded numbers).-vf "minterpolate=fps=30:mi_mode=blend": Applies the motion interpolation filter. It bumps the output to 30 frames per second by blending the raw images together, creating a smooth transition effect between each photo.output_blended.mp4: The final output video file.
Method 2: Sequential Crossfading (Best for Slideshow-Style Time-Lapses)
If you have fewer images and want a distinct, stylized crossfade
transition (where one image slowly fades out as the next fades in), you
can use the xfade filter.
For a sequence of three images where each image displays for 3 seconds with a 1-second transition, use this command:
ffmpeg -loop 1 -t 3 -i image_0001.jpg -loop 1 -t 3 -i image_0002.jpg -loop 1 -t 3 -i image_0003.jpg -filter_complex "[0:v][1:v]xfade=transition=fade:duration=1:offset=2[v1]; [v1][2:v]xfade=transition=fade:duration=1:offset=4[v]" -map "[v]" output_fade.mp4How it works:
-loop 1 -t 3 -i image_0001.jpg: Loops the first image and sets its individual duration to 3 seconds.xfade=transition=fade: Applies the standard crossfade transition. You can changefadeto other built-in effects likewipeleft,slideup, orcircleopen.duration=1: Sets the transition effect to last for exactly 1 second.offset=2: Tells FFmpeg to start the transition 2 seconds into the first image.offset=4: Starts the second transition at the 4-second mark (accounting for the combined duration of the previous clips minus the overlap).-map "[v]": Outputs the final merged video stream.