how can i convert a video to images using ffmpeg? Example am having a video with total duration 60 seconds. I want images between different set of duration like between 2-6 seconds, then between 15-24 seconds and so on. Is that possible using ffmpeg?

4

Best Answer


Official ffmpeg documentation on this: Create a thumbnail image every X seconds of the video

Output one image every second:

ffmpeg -i input.mp4 -vf fps=1 out%d.png

Output one image every minute:

ffmpeg -i test.mp4 -vf fps=1/60 thumb%04d.png

Output one image every 10 minutes:

ffmpeg -i test.mp4 -vf fps=1/600 thumb%04d.png

You can use the select filter for a set of custom ranges:

ffmpeg -i in.mp4 -vf select='between(t,2,6)+between(t,15,24)' -vsync 0 out%d.png

Another way is to use ffmpeg library for python, particularly useful if you don't want to add ffmpeg to your pc environment. Start by installing ffmpeg on conda with:conda install ffmpegThen you can write a script as bellow:

import ffmpeginput_file_name = 'input_video.mp4'(ffmpeg.input(input_file_name ).filter('fps', fps=10, round = 'up').output("%s-%%04d.jpg"%(input_file_name[:-4]), **{'qscale:v': 3}).run())

In addition to the select filter in Gyan's answer (which I use with eq rather than between), I came across another filter in the manual: thumbnail

Select the most representative frame in a given sequence ofconsecutive frames.

The filter accepts the following options:

  • n: Set the frames batch size to analyze; in a set of n frames, the filter will pick one of them, and then handle the next batch of nframes until the end. Default is 100.

Since the filter keeps track of the whole frames sequence, a bigger nvalue will result in a higher memory usage, so a high value is notrecommended.

Examples

  • Extract one picture each 50 frames:

    thumbnail=50
  • Complete example of a thumbnail creation with ffmpeg:

    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png