All pastes #460949 Raw Edit

Untitled

public text v1 · immutable
#460949 ·published 2007-04-27 12:21 UTC
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"