Using ffmpeg to convert a set of images into a video
Original 2012-11-16, Updated 2016-04-05: cleanup and information about overlaying images.
When using ffmpeg to compress a video, I recommend using the libx264 codec, from experience it has given me excellent quality for small video sizes. I have noticed that different versions of ffmpeg will produce different output file sizes, so your mileage may vary.
To take a list of images that are padded with zeros (pic0001.png
, pic0002.png
…. etc) use the following command:
where the %04d means that zeros will be padded until the length of the string is 4 i.e 0001
…0020
…0030
…2000
and so on. If no padding is needed use something similar to pic%d.png
or %d.png
.
-r
is the framerate (fps)-crf
is the quality, lower means better quality, 15-25 is usually good-s
is the resolution-pix_fmt yuv420p
specifies the pixel format, change this as needed
the file will be output (in this case) to: test.mp4
Specifying start and end frames
-start_number
specifies what image to start at-vframes 1000
specifies the number frames/images in the video
Overlaying image on video
Assuming that you have an overlay image that is the same size as the video, you can use the following command to add it during the ffmpeg compression process.
~/path_to_overlay.png
is the full/relative path to the overlay image[0:v][1:v]
joins the two video streams together, stream 1 is the set of images, stream 2 is the overlay fileoverlay=0:0
specifies the position of the overlay, in this case the overlay image is assumed to be the same size as the video so no offset is needed. The offset is specified asoverlay=x:y
where x is the x offset in pixels and y is the y offset in pixels
You can use this technique to overlay multiple files on top of each other, or even have a dynamic overlay. -filter_complex
is a really flexible command and can do much much more than is shown here. See the ffmpeg filters documentation for more information.
Adding a mp3 to a video
Adding sound to a video is straightforward
-i MP3FILE.mp3
The audio filename-acodec copy
Copies the audio from the input stream to the output stream
Converting a video to mp4 from a different format
If the video has already been compressed the following can be used to change the codmpression to h264:
Playback Issues for Quicktime/Other Codecs
Quicktime and some other codecs have trouble playing certain pixel formats such as 4:4:4 Planar and 4:2:2 Planar while 4:2:0 seems to work fine
Add the following flag to force the pixel format:
Finer Bitrate control (to control size and quality)
you can use the -b flag to specify the target bitrate, in this case it is 4 megabits per second
Using -vpre with a setting file
-vpre
is the quality setting, better quality takes longer to encode, some alternatives are: default, normal, hq, max. Note that the -vpre
command only works if the corresponding setting file is available.