#!/bin/bash
if [ -z $1 ] ; then
cat <<EOF
Script d'encodage de fichier. La syntaxe est
   Encode.sh Fichier_du_film.extension Options
Les options sont
DVD  n: DVD n ième chapitre du DVD
Dir  rep: Le miroir du DVD est dans rep
Opts o: Lecture avec les optiosn o
Fvid f: filtrage video (defaut scale=640:496), ça peut permettre de
        rajouter des bandes (expand=0:-100:50:50), etc.
Fson f: filtrage son (defaut rien, mono: mode=3)
Bson n: fixe le bitrate du son à n. (defaut 64)
Bvid n: fixe le bitrate video au lieu qu'il soit calculé
Passe p: indique la passe (0, 1 ou 2, S) défaut 0.
CD n: nombre de CDs 700M voulus (défaut 1).
Taille n: Taille de n MBs (remplace CD).
Avc p: passe des options, (typiquement Avc aspect=16/9)
Haut n: Precise la hauteur en pixel (496 par defaut)
Larg n: Precise la largeur en pixel (680 par defaut)
Garde: laissé seul cela indique que le format (hauteur et largeur) est conservé 
Cine: Format 16/9
Tele: Format 4/3
Auto: Detection Format
Srt f: Sous titres fichiers f
EOF
exit 0
fi
NOM=`echo $1 | sed -e 's/\..*//'`
echo $NOM
FILMORG=$1
FILM=../$1
shift
mkdir $NOM.tmp
cd $NOM.tmp
BOUCLE=Go
PASSE=0
CHOIXBITRATE="?"
FILTRE=
RATESON=64
NBCD=1
TAILLE=
OPTIONS=
SRT=
FSON=
#AVCOPTS=":aspect=4/3"
AVCOPTS=
LARGEUR=640
HAUTEUR=496
JOUE="mplayer -vo null -ao null  -frames 1 "
if [ -f BITRATE ] ; then BITRATE=`cat BITRATE` ; fi
while [ $BOUCLE == Go ] ; do

if (echo $1 | grep DVD) > /dev/null ; then
    shift
    FILM=" dvd://$1"
    echo "DVD chapitre: $FILM"
    shift
elif (echo $1 | grep Dir) > /dev/null ; then
    shift
    FILM=" -dvd-device ../$1 "$FILM
    echo "DVD chapitre: $FILM"
    shift
elif (echo $1 | grep Opts) > /dev/null ; then
    shift
    OPTIONS=$1
    echo "Options: $OPTIONS"
    shift
elif (echo $1 | grep Fvid) > /dev/null ; then
    shift
    FILTRE=$1
    echo Filtre video: $FILTRE
#expand=0:-100:50:50,scale=640:480
    shift
elif (echo $1 | grep Bson) > /dev/null ; then
    shift
    RATESON=$1
    echo Bitrate Son: $RATESON
    shift
elif (echo $1 | grep Bvid) > /dev/null ; then
    shift
    BITRATE=$1
    echo Bitrate Video: $BITRATE
    CHOIXBITRATE=Fait
    shift
elif (echo $1 | grep Passe) > /dev/null ; then
    shift
    PASSE=$1
    echo Passe: $PASSE
    shift
elif (echo $1 | grep Taille) > /dev/null ; then
    shift
    TAILLE=$1
    echo Taille voulue: $TAILLE MB
    shift
elif (echo $1 | grep Fson) > /dev/null ; then
    shift
    FSON=:$1
    shift
elif (echo $1 | grep CD) > /dev/null ; then
    shift
    NBCD=$1
    echo Nbre CDs: $NBCD
    shift
elif (echo $1 | grep Avc) > /dev/null ; then
    shift
    AVCOPTS=":"$1
    echo Options AVC: $AVCOPTS
    shift
elif (echo $1 | grep Srt) > /dev/null ; then
    shift
    SRT="-sub "$1" -ffactor 10 -subfont-autoscale 1 -subfont-encoding unicode -subcp latin1"
    echo Sous titres: $SRT
    shift
elif (echo $1 | grep Haut) > /dev/null ; then
    shift
    HAUTFORCE=$1
    echo Hauteur Forcee: $HAUTFORCE
    shift
elif (echo $1 | grep Larg) > /dev/null ; then
    shift
    LARGFORCE=$1
    echo Largeur Forcee: $LARGFORCE
    shift
elif (echo $1 | grep Garde) > /dev/null ; then
    shift
    KEEPFORMAT=1
    FORMAT=Auto
elif (echo $1 | grep Cine) > /dev/null ; then
    shift
    FORMAT=16/9
elif (echo $1 | grep Tele) > /dev/null ; then
    shift
    FORMAT=4/3
elif (echo $1 | grep Auto) > /dev/null ; then
    shift
    FORMAT=Auto
else
BOUCLE=Stop
fi
done
echo Passe: $PASSE
echo VBirate: $BITRATE
echo SBitrate: $RATESON
echo FILTRE: $FILTRE
echo Son: $FSON
$JOUE $FILM > Format 2> /dev/null
HAUTBIS=`cat Format | grep "^VO:.*=>"  | tail -n 1 | sed -e 's/^.* \([0-9]*\)x\([0-9]*\).*=>.*$/\2/'`
LARGBIS=`cat Format | grep "^VO:.*=>"  | tail -n 1 | sed -e 's/^.* \([0-9]*\)x\([0-9]*\).*=>.*$/\1/'`
HAUTJOUE=`cat Format | grep "^VO:.*=>"  | tail -n 1 | sed -e 's/^.*=> \([0-9]*\)x\([0-9]*\) .*$/\2/'`
LARGJOUE=`cat Format | grep "^VO:.*=>"  | tail -n 1 | sed -e 's/^.*=> \([0-9]*\)x\([0-9]*\) .*$/\1/'`
#LAVINFO=`which lavinfo`
#pwd
#if [ ! -z $LAVINFO ] ; then
#    HAUTBIS=`$LAVINFO $FILM 2> /dev/null | grep video_height | sed -e 's/^.*=//'`
#    LARGBIS=`$LAVINFO $FILM 2> /dev/null | grep video_width | sed -e 's/^.*=//'`
if [ x$FORMAT = "xAuto" ]  ; then
    if grep -q -E "Movie-Aspect is [0123456789]" Format ; then
	FORMAT=`grep "Movie-Aspect is [0123456789]" Format | grep "Movie-Aspect is " | sed -e 's/^·*Movie-Aspect is \(.*\):1.*$/\1/'`
    else
	FORMAT=`expr $LARGJOUE \* 100 / $HAUTJOUE | sed -e 's/\(..\)$/.\1/'` 
    fi    
    echo Format: $FORMAT
fi
echo $LARGBIS x $HAUTBIS
if [ ! -z $KEEPFORMAT ] ; then
    if [ ! -z $HAUTBIS ] ; then
	HAUTEUR=$HAUTBIS
    fi
    if [ ! -z $LARGBIS ] ; then
	LARGEUR=$LARGBIS
    fi
fi
#fi
if [ ! -z $HAUTFORCE ] ; then
    HAUTEUR=$HAUTFORCE
fi
if [ ! -z $LARGFORCE ] ; then
    LARGEUR=$LARGFORCE
fi
echo Format: $LARGEUR x $HAUTEUR
if `echo  $FILTRE | grep -q scale > /dev/null` ; then
    echo Filtre forcé utilisé: $FILTRE
elif [ -z $FILTRE ] ; then
    FILTRE=scale=$LARGEUR:$HAUTEUR
else
    FILTRE=$FILTRE:scale=$LARGEUR:$HAUTEUR
fi
echo Filtre utilisé: $FILTRE
if [ ! -z $FORMAT ] ; then
    if `echo  $AVCOPTS | grep -q aspect > /dev/null` ; then
	echo Format défini dans les options Avc
    else
	AVCOPTS=$AVCOPTS":aspect="$FORMAT
    fi
fi
echo Format: $AVCOPTS
RESULTAT=../E_$NOM.avi
if [ $PASSE == "0" ] ; then
    if [ -f frameno.avi ] ; then
	rm frameno.avi
    fi
    mencoder $FILM $SRT $OPTIONS -ovc frameno  -vf $FILTRE -oac mp3lame -lameopts vbr=3:br=$RATESON:q=0$FSON -o frameno.avi | tee Son
    PASSE=1
    if [ -f Son ] ; then
	if [ -z $TAILLE ] ; then
	if `grep -q "Recommended video bitrate" Son` ; then
	    if [ $NBCD == "2" ] ; then
		BITRATEOPTIMAL=`grep "bitrate for 2 x 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    else
		BITRATEOPTIMAL=`grep "bitrate for 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    fi
	    echo $BITRATEOPTIMAL > BITRATE
	else
	    if [ $NBCD == "2" ] ; then
		BITRATEOPTIMAL=`grep "itrate.*CD 2 x 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    else
		BITRATEOPTIMAL=`grep "itrate.*CD 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    fi
	    echo $BITRATEOPTIMAL > BITRATE
	fi
	else
	    TAILLEVOULUE=$[$TAILLE*1024*1024]
	    TAILLESON=`cat Son | grep -E "^Audio" | awk '{print $8}'`
	    DUREEVIDEO=`cat Son | grep -E "^Video" | awk '{print $10}' | tr . , |sed -e 's/,.*$//'`
	    DUREEVIDEO=$[$DUREEVIDEO+1]
	    TAILLEVIDEO=$[$TAILLEVOULUE-$TAILLESON]
	    FLUX=`expr  $TAILLEVIDEO / $DUREEVIDEO `
	    echo $[$FLUX/125] > BITRATE
	fi

    fi
fi
if [ $PASSE == "S" ]  ; then
    if [ ! $CHOIXBITRATE == "Fait" ] ; then
	if [ -f frameno.avi ] ; then
	    rm frameno.avi
	fi
	mencoder $FILM $SRT $OPTIONS -ovc frameno  -vf $FILTRE -oac mp3lame -lameopts vbr=3:br=$RATESON:q=0$FSON -o frameno.avi | tee Son
    fi
    if [ -f Son ] ; then
	if [ -z $TAILLE ] ; then
	if `grep -q "Recommended video bitrate" Son` ; then
	    if [ $NBCD == "2" ] ; then
		BITRATEOPTIMAL=`grep "bitrate for 2 x 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    else
		BITRATEOPTIMAL=`grep "bitrate for 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    fi
	    echo $BITRATEOPTIMAL > BITRATE
	else
	    if [ $NBCD == "2" ] ; then
		BITRATEOPTIMAL=`grep "itrate.*CD 2 x 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    else
		BITRATEOPTIMAL=`grep "itrate.*CD 700" Son  | sed -e '1,$s/.* \([^ ]*\)$/\1/'`
	    fi
	    echo $BITRATEOPTIMAL > BITRATE
	fi
	else
	    TAILLEVOULUE=$[$TAILLE*1024*1024]
	    TAILLESON=`cat Son | grep -E "^Audio" | awk '{print $8}'`
	    DUREEVIDEO=`cat Son | grep -E "^Video" | awk '{print $10}' | tr . , |sed -e 's/,.*$//'`
	    DUREEVIDEO=$[$DUREEVIDEO+1]
	    TAILLEVIDEO=$[$TAILLEVOULUE-$TAILLESON]
	    FLUX=`expr  $TAILLEVIDEO / $DUREEVIDEO `
	    echo $[$FLUX/125] > BITRATE
	fi
    fi
fi
if [ $CHOIXBITRATE == "?" ] ; then
    if [ -f BITRATE ] ; then BITRATE=`cat BITRATE` ; fi
fi
if [ $PASSE == "1" ] ; then
    mencoder $FILM $SRT $OPTIONS -nosound -ovc lavc -vf $FILTRE -lavcopts vcodec=mpeg4:vpass=1:vbitrate=$BITRATE:turbo$AVCOPTS -ffourcc DIVX  -o $RESULTAT
    PASSE=2
fi
if [ $PASSE == "2" ] ; then
## Passe 2
    mencoder $FILM $SRT $OPTIONS -oac mp3lame -lameopts vbr=3:br=$RATESON:q=0$FSON -ovc lavc -vf $FILTRE -lavcopts vcodec=mpeg4:vpass=2:vbitrate=$BITRATE:vhq:v4mv:trell$AVCOPTS -ffourcc DIVX  -o $RESULTAT
fi
if [ $PASSE == "S" ] ; then
## Une seule passe 
    mencoder $FILM $SRT $OPTIONS -oac mp3lame -lameopts vbr=3:br=$RATESON:q=0$FSON -ovc lavc -vf $FILTRE -lavcopts vcodec=mpeg4:vbitrate=$BITRATE:vhq:v4mv:trell$AVCOPTS -ffourcc DIVX  -o $RESULTAT
fi
cd ..

