The other day I was thinking about how to make screencaps for the anime I watch. Windows users often use Media Player Classic, which can create a video contact sheet (i.e., a series of captures) out of a movie file. I had two problems with this:
- The biggest is that it runs on Windows, and I don’t use Windows;
- The frames needed to be manually cropped every time, which was slow.
Therefore, inspired by a video contact sheet script for Linux, I decided to write a small piece of code to make captures. It works rather easy, by taking snapshots every X minutes, where X is an integer number.
The code is here: it requires bash, python (just for checks) and mplayer to work correctly. It should work with every format mplayer suppports. It’s hackish, but if you find it useful, let me know.
EDIT: I changed a line (thanks, greg) because this syntax highlighter messes up some formatting.
#!/bin/bash # (C) 2007 Luca Beltrame - licensed under the terms of the GPL v2 # Simple script to output video frames with MPlayer. It takes the file # and a step argument to indicate how many minutes a capture should # be taken. The step must be an integer! if [ $# -ne "2" ] then echo "Usage: $0 <file> <step>" exit fi file=$1 step=$2 i=1 # Requires python 2.5 verification=`python -c "value = 0 if isinstance($step,float) else 1;print value"` echo $verification if [ $verification -eq "0" ] then echo "Step must be an integer!" fi length=`mplayer -benchmark -ao null -vo null -identify -frames 0 -quiet $file 2>/dev/null | grep ID_LENGTH | cut -f2 -d'='` end=`echo $length/60| bc` while [ $i -lt $end ] do minutes="00:"$i":00" name="capture_"$i"min.png" # We take two captures as the first will be always black - mplayer bug? mplayer -sws 9 -ao null -quiet -benchmark -vo "png:z=0" -frames 2 -ss $minutes "$1" &> /dev/null mv 00000002.png $name rm -f 00000001.png i=$[$i+$step] done echo "Screenshots saved."

2 Comments
Write a Comment»had to change this line end=`bc -q < << $length/60` to end=`echo $length/60| bc` otherwise bash complained about the <<s.
Drat, I found out why. There’s a space that shouldn’t be there (bc < << instead of bc <<<). I tried to fix it, but looks like it's a bug in either the syntax highlighter or in Wordpress and I can't save the change. I'll just change it to your suggestion.
Thanks for reporting!