#!/bin/bash usage="framegrabber -h for help" print_help() { cat <<'EOF' Usage : framegrabber [-n stills] [-s size] FILE Framegrabber is designed to extract stills from a video that is seekable and supported by Mplayer. Framegrabber then combine them in a mosaic image allowing preview of the movie. Number of frames to extract and size of the frames can be modified via options. Framegrabber depends on Mplayer and Imagemagick Options : -h : print this help message -n : number of stills to extract -s : size of each stills framegrabbing -n 20 -s 100 my_video will create a mosaic of 20 stills of 100 pixels each. Report bugs to EOF } while getopts ":n:s:h" option do case $option in n ) n=$OPTARG;; s ) s=$OPTARG;; h ) print_help; exit 1;; \? ) echo "Unknown option"; echo $usage; exit 1;; * ) echo "Unknown option"; echo $usage; exit 1;; esac done (( ! n )) && n=10 (( ! n )) && s=100 shift $(($OPTIND - 1)) _FILE="$1" _NBFRAME=$n _SIZEFRAME=$s mkdir sctmp _SECONDS=`mplayer -ao null -vo null -frames 1 -identify $_FILE | grep ID_LENGTH= | cut -d"=" -f 2` _FPS=`mplayer -ao null -vo null -frames 1 -identify $_FILE | grep ID_VIDEO_FPS= | cut -d"=" -f 2` _INTSEC=`awk -v var="$_SECONDS" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'` _INTFPS=`awk -v var="$_FPS" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'` _STEP=`expr $_INTSEC / $_NBFRAME` _INTSTEP=`awk -v var="$_STEP" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'` _SECSTEP=$_INTSTEP _MAXFRAME=`expr 100 + $_NBFRAME + 1` for i in `seq 100 $_MAXFRAME` do mplayer -ss $_SECSTEP -vo jpeg -frames 1 $_FILE _SECSTEP=`expr $_SECSTEP + $_INTSTEP` mv 00000001.jpg sctmp/$i.jpg done cd sctmp/ mogrify -size `$_SIZEFRAME`x100 *.jpg montage -geometry +2+2 -tile 4 *.jpg `echo "$_FILE"`.png rm -f *.jpg convert `echo "$_FILE"`.png `echo "$_FILE"`.jpg rm -f *.png mv `echo "$_FILE"`.jpg .. cd .. rmdir sctmp echo "Finished"