How-To: Extract images from a video file using FFmpeg

Extracting all frames from a video file is easily achieved with FFmpeg. Here's a simple command line that will create 25 PNG images from every second of footage in the input DV file. The images will be saved in the current directory. ffmpeg -i input.dv -r 25 -f image2 images%05d.png The newly created files will all start with the word "images" and be numbered consecutively, including five pre-appended zeros. e.g. images000001.png. From a video that was 104 seconds long, for a random example, this command would create 2600 PNG files! Quite messy in the current directory, so instead use this command to save the files in a sub-directory called extracted_images: ffmpeg -i input.dv -r 25 -f image2 extracted_images/images%05d.pngMoving on, let's say you just wanted 25 frames from the first 1 second, then this line will work: ffmpeg -i input.dv -r 25 -t 00:00:01 -f image2 images%05d.pngThe -t flag in FFmpeg specifies the length of time to transcode. This can either be in whole seconds or hh:mm:ss format. Making things a little more complex we can create images from all frames, beginning at the tenth second, and continuing for 5 seconds, with this line: ffmpeg -i input.dv -r 25 -ss 00:00:10 -t 00:00:05 -f image2 images%05d.pngThe -ss flag is used to denote start position, again in whole seconds or hh:mm:ss format. Maybe extracting an image from every single frame in a video, resulting in a large number of output files, is not what you need. Here's how to create a single indicative poster frame, of the video clip, from the first second of footage: ffmpeg -i input.dv -r 1  -t 00:00:01 -f image2 images%05d.pngNotice that the -r flag is now set to 1. If you want the poster frame from a different part of the clip, then specify which second to take it from using the -ss tag, in conjunction with the line above. Lastly, if you wanted to create a thumbnail story board, showing action throughout the entire length of the video clip, you'll need to specify the output image dimensions. Use the following line: ffmpeg -i input.dv -r 1 -f image2 -s 120x96 images%05d.pngMy original file was 720x576, so the image dimensions are a whole division of this.

You have already tagged this post. Your tags:

Valid XHTML 1.0 Strict