#!/bin/bash
set +x

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.



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=20

(( ! s )) && s=150


shift $(($OPTIND - 1))

_NFILE="$1"

_NBFRAME=$n
_SIZEFRAME=$s

_DIR=${_NFILE%/*}
_FILE=${_NFILE##*/}

(( ! $_FILE )) && print_help

cd "$_DIR"
pwd
echo "$_FILE"
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"`
#_STEP=`expr $_STEP2 / $_NBFRAME`
_INTSTEP=`awk -v var="$_STEP" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'`
_SECSTEP=$_INTSTEP

_MAXFRAME=`expr 100 + $_NBFRAME + 1`

echo $_SECONDS
echo $_FPS
echo $_STEP

for i in `seq 100 $_MAXFRAME`

do
mplayer -really-quiet -ss "$_SECSTEP" -vo jpeg -frames 7 "$_FILE"
_SECSTEP=`expr $_SECSTEP + $_INTSTEP`
mv 00000007.jpg sctmp/$i.jpg
done

rm 0000000*.jpg
pwd
cd sctmp
mogrify -resize "$_SIZEFRAME"x1000 *.jpg
montage -geometry +2+2 -tile 4 *.jpg "$_FILE".png
rm *.jpg
convert "$_FILE".png "$_FILE".jpg
rm *.png
mv "$_FILE".jpg ..
cd ..
rmdir sctmp
echo "Finished"
