Extracting image with timecode
ffmpeg -ss 00:07:35 -i input.mkv -vframes 1 00-07-35.png
The time code here (
-ss 00:07:35) is
hours:minutes:seconds. This is probably the fastest and easiest way to take a screenshot.
Extracting specific frame number
We can also export the same image by specifying the exact frame at a given time. Let’s calculate the frame number for 00:07:35, shall we?
The point in the video is 7 minutes and 35 seconds, right? That equals to is 455 seconds in the video (60*7+35). Since the video is playing at 23.976 frames per second we need to multiply the seconds we have with the FPS. This gives us the frame number: 10909.
(7*60+35)*23,976=10909,08 (7,35 minutes in seconds)*(frame rate of video)
You can also use a frame calculator if you think that is easier.
So now we can easily export frame 10909 with:
ffmpeg -i input.mkv -vf select=gte(n\,10909) -vframes 1 frame-10909.png
-i is your video file input.
-vf select=gte(n\,10909) tells FFmpeg to start at the 10909th frame.
-vframes 1 sets the number of video frames to output.
frame-10909.png generates the file name.
Extracting image every X point in time
You can extract a still image every given point in time for the video. The way you specify the time is by seconds. So if you want to export an image every 10 seconds you would use
fps=1/10. If you want to export an image every 1 hour and 23 minutes you will have to calculate that in seconds which is 60+23*60=4980. Then you can use
ffmpeg -i input.mkv -vf fps=1/1800 %04d.bmp
Here are some time examples:
Every second: fps=1
Evry ten seconds: fps=1/10
Evry minute: fps=1/60
Evry ten minutes: fps=1/600
Evry 15 minutes: fps=1/900
Note that this way of exporting images is very slow and I suspect that this is either a bug in FFmpeg or something that has not been paid much attention to.
There are many ways you can name the output files. Here are some examples:
image-%03d.png = image-000.png, image-001.png…
image-%d.png = image-1.png, image-2.png…
image-*.png = image-a.png, image-b.png…