--- author: einar comments: true date: 2007-10-16 20:44:46+00:00 layout: page slug: script-to-make-captures-of-movie-files title: Script to make captures of movie files wordpress_id: 312 categories: - General - Linux tags: - bash - Linux - python - script --- The other day I was thinking about how to make screencaps for the anime I watch. Windows users often use [Media Player Classic](http://sourceforge.net/projects/guliverkli/), 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](http://freshmeat.net/projects/video-contact-sheet/), 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](http://mplayerhq.hu) 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. [code lang='c'] #!/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 " 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." [/code]