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 (
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
2000 and so on. If no padding is needed use something similar to
-ris the framerate (fps)
-crfis the quality, lower means better quality, 15-25 is usually good
-sis the resolution
-pix_fmt yuv420pspecifies the pixel format, change this as needed
the file will be output (in this case) to:
Specifying start and end frames
-start_numberspecifies what image to start at
-vframes 1000specifies 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.pngis 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 file
overlay=0:0specifies 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 as
overlay=x:ywhere 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.mp3The audio filename
-acodec copyCopies 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.