25

I use gframecatcher to generate thumbnail video galleries, i.e. something like this:

enter image description here

However this is a GUI tool and I want to create recursively a gallery for every video in a directory structure, so I am looking for a fast command line tool to do this.

11 Answers 11

39

Pull out the image captures (these are 100 pixels tall, and keep aspect ratio), the rate (-r) is per-second (this yields one frame every ~5 minutes), this also adds time stamp to output image.

ffmpeg  -i MOVIE.mp4 -r 0.0033 -vf scale=-1:120 -vcodec png capture-%002d.png

Then use ImageMagick to build your gallery image:

montage -title "Movie Name\nSubtitle" -geometry +4+4 capture*.png output.png
5
  • 11
    You can use fractions for the rate (-r). This makes it easier and more accurate to specify times. 5min = 300 seconds ffmpeg -i MOVIE.mp4 -r 1/300 -vf scale=-1:120 -vcodec png capture-%02d.png.
    – DutGRIFF
    May 13, 2014 at 18:28
  • avconv works in the same way, in case you don't have ffmpeg available (some Ubuntu releases).
    – Ken Sharp
    Mar 8, 2016 at 3:25
  • 4
    This works, but requires plumbing through the entire video file. superuser.com/questions/538112/… provides some examples which attempt to find meaningful thumbnails, as well as avoid having to sit and process the entire video to get a few frames.
    – Skrylar
    May 21, 2016 at 12:01
  • This does not add the timestamp to the image.
    – felwithe
    Aug 2, 2017 at 23:08
  • How would you do this in batch for a bunch of videos in a directory?
    – Paul Jones
    Feb 7, 2019 at 21:02
22

I like using an easy to use unix command line bash script called VCS - Video Contact Sheet. Their official page: http://p.outlyer.net/vcs/

Its a lot easier to use even easier than a GUI

''It is a bash script meant to create video contact sheets (previews) aka thumbnails or previews of videos. Any video supported by mplayer and ffmpeg can be used by this script. '' You will need to have either ffmpeg or mplayer installed on your system.

Usage:

vcs input-filename -U0 -i 1m -c 3 -H 200 -a 300/200 -o save-filename.jpg

How the command works

Edit input-filname to the name of your video file!

  • -U0 (no name in footer - or else it displays the host name - note this is zero not the letter O)

  • -i 1m (sets the capture time interval in mins - in this case it's every minute - you could also use -n instead which sets the number of captures for example -n 21 will create 21 images, but don't use both)

  • -c sets number of columns (here it's 3 columns)

  • -H 200 -a 300/200 (sets size and aspect so file is not too big - seems you have to do both)

  • -o filename.jpg (use .jpg as the default as .png is too big - and change the filename to one of your choice !)

2
  • 1
    Works very nicely. wget "http://p.outlyer.net/vcs/files/vcs_1.13.4-pon.1_all.deb" dpkg -i vcs_1.13.4-pon.1_all.deb. And it "feels" robust. Nice color text output, no garbage spewed out like with ffmpeg. Aug 28, 2021 at 18:20
  • Beatiful. I did set "-a 192/108" in order to have it correct aspect as per HD specs.
    – dfelix
    Nov 22, 2021 at 23:37
9

This tool helped me (2019-02) - and it is maintained. Many options - grid, quality, fonts, colors, border, interval, ...

https://github.com/amietn/vcsi

Create video contact sheets. A video contact sheet is an image composed of video capture thumbnails arranged on a grid.

You only need ffmpeg and python.

2
  • This is very good - thank you!
    – Ashley
    Jan 2, 2020 at 1:45
  • Amazing tool! Works perfectly
    – FloPinguin
    Jul 5, 2020 at 19:45
8

This one seems to fit the bill, it's free and open source and even works on Windows :)

It even has advanced stuff, like instead of blindly picking any frame at the particular interval, it can pick ones that are close enough but don't look too blurry, so instead of doing this:

screenshot

You can pass it a parameter (-D6) so it does this:

better screenshot

Plus I really like no borders, so that the images can be slightly bigger.

1
  • Looks perfect but I can't easily install it on ubuntu :( Aug 28, 2021 at 18:16
8

There is a solution from ffmpeg forum.

To make multiple screenshots and place them into a single image file (creating tiles), you can use FFmpeg's tile video filter, like this:

ffmpeg -ss 00:00:10 -i movie.avi -vf 'select=not(mod(n\,1000)),scale=320:240,tile=2x3' out.png

That will seek 10 seconds into the movie, select every 1000th frame, scale it to 320x240 pixels and create 2x3 tiles in the output image out.png.

Original post here - http://ffmpeg.gusari.org/viewtopic.php?f=25&t=597

Example

enter image description here

2
  • Also, ffmpeg seems to support "crop" with the same syntax.
    – some ideas
    Sep 11, 2015 at 16:23
  • how can i generate one sprite every 5 minutes, within each sprite, one thumbnail per 10 seconds ?
    – nullne
    Apr 26, 2022 at 3:45
3

This is how I process a simple contact sheet using AWS EC2, from my mac.

Step #1: Create an EC2 Instance at Amazon Web Services

I used:

Amazon Linux AMI 2015.03.1 (HVM), SSD Volume Type - ami-0d4cfd66
t2.medium

Step #2: Configure the instance

This is all run from my mac for convenience, but you could also run just the commands "sudu su..." from the EC2 command line.

ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "sudo su root; curl -O http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "sudo su root; gunzip ffmpeg.static.64bit.latest.tar.gz"
ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "sudo su root; tar -xf ffmpeg.static.64bit.latest.tar"

Replacing 11.22.33.44 with your EC2 IP.

Step #3: Process a video

Send the video:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem pem' /Users/mdouma/Desktop/myVideo.mov [email protected]:/home/ec2-user/

Process it into a contact sheet:

ssh -i "/local/path/to/key/your_ec2_key.pem" [email protected] "rm -f out.png ; ./ffmpeg -ss 00:00:00 -i myVideo.mov -vf 'select=not(mod(n\,1)),scale=113:111,crop=111:111,tile=18x36' out.png"

Change /Users/mdouma to your local root Change the ",1" to some other number, e.g., ",7", if you only want every 7th frame. Change 111 to whatever size you want

Copy it back to my mac:

rsync -Pav -e 'ssh -i /local/path/to/key/your_ec2_key.pem'  [email protected]:/home/ec2-user/out.png  /Users/mdouma/Desktop/out.png
open /Users/mdouma/Desktop/out.png
3
  • This is a great tip. Note though that sudo su is aimless.
    – Ken Sharp
    Mar 8, 2016 at 3:26
  • 5
    Why are you sending this to ec2? Why not just run it on your mac locally? the video files could be GBs large... Nov 28, 2017 at 2:50
  • 1
    I suggest to consider using docker. Mar 30, 2020 at 7:59
2

You can use the Python script pyvideothumbnailer found on GitHub, which uses PyAV, MediaInfo and PIL/Pillow. It was written by me and is available under the BSD-3-clause license.

It can work recursively on directories containing video files.

pyvideothumbnailer --recursive [DIRECTORY CONTAINING VIDEOS]

Its behavior can be controlled by command line options and a user-defined configuration file .pyvideothumbnailer.conf.

Here are two examples how it works creating preview thumbmnails of Big Buck Bunny. For further reference have a look at the GitHub wiki page.

Using defaults:

pyvideothumbnailer bbb_sunflower_1080p_60fps_normal.mp4

bbb_sunflower_1080p_60fps_normal_defaults mp4

White header font on black background, DejaVuSans TrueType font instead of the built-in font, adding a comment at the bottom of the header, custom preview thumbnails image width and 5 x 4 preview thumbnails:

pyvideothumbnailer --background-color black --header-font-color white --header-font DejaVuSans.ttf --timestamp-font DejaVuSans.ttf --comment-text "Created with pyvideothumbnailer" --width 1024 --columns 5 --rows 4 bbb_sunflower_1080p_60fps_normal.mp4

bbb_sunflower_1080p_60fps_normal mp4_example5

0
1

Totem - the default video player for 14.04 and some earlier versions of Ubuntu - has menu option with simple options (under Edit menu, "Create Screenshot Gallery..."). There's also a command-line equivalent(ish) called "totem-video-thumbnailer" which has a man page that tells you how to use it; I wrote a simple bash script that used output from the find command (taking care to not separate files with spaces in names) to auto-generate a thumbnail screenshot gallery (or contact-sheet as also referred to above) for any files above a certain size in a directory that didn't already have one.

I could upload it to my github under ~jgbreezer if anyone fancied hunting for it. Though solutions using ffmpeg and other things may be more flexible and reliable; I seem to get error outputs from the totem command about not finding certain frames but it seems to work anyway most of the time.

0

The 'imagemagick' package has utilities for stuff like this.

http://www.imagemagick.org/Usage/thumbnails/

There are API libraries using imagemajick for a bunch of languages too.

3
  • What would be the corresponding command?
    – student
    Feb 5, 2013 at 11:50
  • convert is probably the most general one. Look at the section headed General Thumbnail Creation on the first page I linked to.
    – goldilocks
    Feb 5, 2013 at 14:20
  • This doesn't really address the question of how to generate a video contact sheet like the OP wanted. Aug 28, 2021 at 18:39
0

I wanted the same thing and googling ended up using ffmpeg and imagemagick. NOT 'fast' IMHO. Then found a bash script named SlickSlice (last updated 2008 but worked perfectly as of yesterday). Installed it and customized it to my liking using the configuration file and the script itself. The script uses ImageMagick and MPlayer by the way.

I made a detail how-to and customization after I successfully used it. Once installed successfully, you can generate video timeline thumbnail with as simple as command:
slickslice -x "InputFile.mp4" (default 4 column x 15 rows) or
slickslice -x "InputFile.mp4" -S 6x10 (for 6 column x 10 rows).

It outputs as SLICKSLICED_InputFile.mp4.jpeg and I customized it to produce InputFile.mp4-screen.jpeg by editing the bash script itself.

0

I know this thread is pretty old, but it's still up in the google results.

MTN project moved to a new location: https://gitlab.com/movie_thumbnailer/mtn

It still works on windows an linux. It's fast and the results are pretty good.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .