Version 4 (modified by evilsoup, 6 years ago) (diff)


This will create a video slideshow (using video codec libx264) from series of png images, named named img001.png, img002.png, img003.png, ...

(each image will have a duration of 5 seconds)

ffmpeg -f image2 -r 1/5 -i img%03d.png -r 30 out.mp4

This will create a slideshow in which each image has a duration of 15 seconds:

ffmpeg -f image2 -r 1/15 -i img%03d.png -r 30 out.mp4

If you want to create a video out of just one image, this will do (output video duration is set to 30 seconds):

ffmpeg -loop 1 -f image2 -i img.png -c:v libx264 -t 30 out.mp4

If you don't have images numbered and ordered in series (img001.jpg, img002.jpg, img003.jpg) but rather random bunch of images, ffmpeg also supports bash-style globbing - though glod wildcards (such as ?, representing a single random character, and * representing any number of random characters) have to be prefixed with a %:

ffmpeg -f image2 -r 1 -pattern_type glob -i '*.jpg' -c:v libx264 out.mp4

or for png images:

ffmpeg -f image2 -r 1 -pattern_type glob -i '*.png' -c:v libx264 out.mp4

That will read all the jpg/png images in the current directory and write them, one by one, using the pipe, to the ffmpeg's input, which will produce the video out of it.

Important: All images in a series need to be of the same size and format.

Explanation: By telling FFmpeg to set the input file's FPS option (frames per second) to some very low value, we made FFmpeg duplicate frames at the output and thus we achieved to display each image for some time on screen :)

See also: Create a thumbnail image every X seconds of the video