rendered paste body#!/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 <tristan.ferroir@ens-lyon.org>
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"