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 -vcodec libx264 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 -vcodec libx264 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 -vcodec 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, you might try this:
cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i – -vcodec libx264 out.mp4
or for png images:
cat *.png | ffmpeg -f image2pipe -r 1 -vcodec png -i – -vcodec 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 🙂