Script mencoder.sh

From campisano.org
Jump to navigation Jump to search
#!/bin/bash



if [ -z "$1" ] || [ -z "$2" ]; then
    echo	"Usage: $0 <input-file> <output-file> [other-opts]";
    exit -1;
fi;

if [ ! -x "`which mencoder`" ]; then
    echo	"Can't find mencoder command";
    exit;
fi;

if [ ! -f "$1" ]; then
    echo	"Can't find input file";
    exit;
fi;



OTHEROPTS=""

ARRAY=("$@")
COUNT=2
#while test $COUNT -lt $#; do
while test $COUNT -lt "$#"; do
    OTHEROPTS="$OTHEROPTS ${ARRAY[COUNT]}";
    COUNT=$((COUNT+1));
done;

echo -e "input-file=\t$1"
echo -e "output-file=\t$2"
echo -e "other-opts=\t$OTHEROPTS"

echo



nice -5 ffmpeg -t 1 -i "$1" -f null - &> ___time.log;
TIME=`cat ___time.log | grep Duration | cut -d . -f 1 | cut -d ' ' -f 4`;
if [ $? -ne 0 ]; then
    echo	"qualcosa e' andato storto durante la lettura della durata del filmato";
    exit -1
fi;
rm -f ___time.log;
echo "movie time               :	$TIME";

SECONDS=$(( $(echo $TIME | cut -d : -f 1)*3600 + $(echo $TIME | cut -d : -f 2)*60 +  $(echo $TIME | cut -d : -f 3) ));
if [ $? -ne 0 ]; then
    echo	"qualcosa e' andato storto durante il calcolo della durata in secondi";
    exit -1
fi;
echo "movie time in seconds    :	$SECONDS";

MAXSIZE=700
AUDIOBITRATE=128;
VIDEOBITRATE=$(( ($MAXSIZE*1024*8) /$SECONDS - $AUDIOBITRATE));
# tolgo il 10% per essere sicuro che rientri in $MAXSIZE
VIDEOBITRATE=$(($VIDEOBITRATE- ($VIDEOBITRATE/10)));



echo "defined audio bitrate    :	$AUDIOBITRATE";
echo "extimated vidio bitrate  :	$VIDEOBITRATE";
echo
echo
echo





# codec usato per la codifica audio
OAC="mp3lame -srate 44100 -lameopts vbr=2:q=9:vol=8";

# codec usato nella codifica video a 1 passaggio
LAVAC_OPTS="lavc -lavcopts vcodec=mpeg4:keyint=50:vbitrate=$VIDEOBITRATE:vhq:v4mv:mbd=2:vlelim=-4:vcelim=9:lumi_mask=0.05:dark_mask=0.03"

OVC="$LAVAC_OPTS -mc 1 -sws 1 -vf pp=0x20000,$CROP$SCALE";

# codec usato nella codifica video a 2 passaggi"
#OVC_PASS1="$LAVAC_OPTS:vpass=1 -mc 1 -sws 1 -vf hqdn3d=2:1:2,$CROP$SCALE"
OVC_PASS1="$LAVAC_OPTS:vpass=1 -mc 1 -sws 1 -vf pp=0x20000,$CROP$SCALE";
OVC_PASS2="$LAVAC_OPTS:vpass=2 -mc 1 -sws 1 -vf pp=0x20000,$CROP$SCALE";





### Encoding in ONE pass
mencoder "$1" \
    -ovc $OVC \
    -oac $OAC \
    $OTHEROPTS \
    -o "$2"





### Encoding in TWO pass

# 1st pass: the statistics of the video are recorded
#mencoder "$1" \
#    -ovc $OVC_PASS1 \
#    -oac $OAC \
#    $OTHEROPTS \
#    -o "$2"



# 2nd pass: the video is generated at the exact requested bitrate
#mencoder "$1" \
#    -ovc $OVC_PASS2 \
#    -oac $OAC \
#    $OTHEROPTS \
#    -o "$2"





echo

ls -sh "$2"
exit




### Encoding in ONE pass

nice -5 ffmpeg -i "$1" \
-f avi -deinterlace \
-vcodec mpeg4 -b $VIDEOBITRATE \
-acodec mp3 -ar 44100 -ac 1 -ab $AUDIOBITRATE \
$OTHEROPTS \
"$2"




### Encoding in TWO pass

# 1st pass: the statistics of the video are recorded
#nice -5 ffmpeg -i "$1" \
#-f avi -deinterlace \
#-vcodec mpeg4 -b $VIDEOBITRATE \
#-acodec mp3 -ar 44100 -ac 1 -ab $AUDIOBITRATE \
#-pass 1 -passlogfile ___ffmpeg.log \
#$OTHEROPTS \
#___pass1.avi

# 2nd pass: the video is generated at the exact requested bitrate
#nice -5 ffmpeg -i "$1" \
#-f avi -deinterlace \
#-vcodec mpeg4 -b $VIDEOBITRATE \
#-acodec mp3 -ar 44100 -ac 1 -ab $AUDIOBITRATE \
#-pass 2 -passlogfile ___ffmpeg.log \
#$OTHEROPTS \
#"$2"





echo

ls -sh "$2"



#echo test
#ffmpeg -t 10 -v 5 -i "$2" -f null -


#rm -f ___test.avi ___ffmpeg.log

#ffmpeg -i "$1" \
#-acodec mp3 -ar 44100 -ab $AUDIOBITRATE \
#-vcodec mpeg4 -hq -4mv -b $VIDEOBITRATE \
#-pass 1 -passlogfile ___ffmpeg.log \
#___test.avi

##ffmpeg -i "$1" \
##-acodec copy \
##-vcodec mpeg4 \
##-pass 1 -passlogfile ___ffmpeg.log \
##___test.avi

#if [ $? -ne 0 ]; then
#    echo	"qualcosa e' andato storto durante il primo passaggio della codifica!";
#    exit -1
#fi;

#ffmpeg -i "$1" \
#-acodec mp3 -ar 44100 -ab $AUDIOBITRATE \
#-vcodec mpeg4 -hq -4mv -b $VIDEOBITRATE \
#-pass 2 -passlogfile ___ffmpeg.log \
#"$2"




# -s 352x288 \
#-an \
#-acodec mp3 -ar 44100 -ab $AUDIOBITRATE \
#-vcodec mpeg4 -hq -4mv -b $VIDEOBITRATE \
#-deinterlace -async 1 -s 640x460 \
#-croptop 110 -cropbottom 110 -cropleft 6 -cropright 6 \
#-pass 1 -passlogfile ___ffmpeg.log \
# End















#!/bin/bash

echo
echo RICORDATI DI SETTARE I DATI IN DEFINE.SH
echo

sleep 1s;



# questo lo scegli tu, esempio
#   INPUT="dvd://1-3";			(riproduci solo i titoli da 1 a 3)
#   INPUT="dvd://1 -chapter 5-7";	(riproduci solo i capitoli da 5 a 7)
INPUT="dvd://";

# file prodotto dal coding audio
OUT_FILE="$2";



# questo lo leggi da language.log dopo aver eseguito 1_get_language.sh
#LANGUAGE_ID="-aid 128";
#SUBTITLE_ID="-sid 0";		# decommenta se non vuoi sottotitoli
# al posto degli identificativi  puoi mettere i codici a lettere, ma lo sconsiglio
LANGUAGE_ID="-alang it";
#SUBTITLE_ID="-slang es";	# decommenta se non vuoi sottotitoli

# questo riduce le dimensioni, ma consiglio di non ridimensionare il video
# attenti lasciare la virgola finale "..w:h,"

#SCALE="scale=640:480,";		# commenta se non vuoi ridimensionare
#SCALE="scale=800:450,";		# ovvero 16/9 (commenta come sopra)

# questo lo leggi da crop.log dopo aver eseguito 2_get_crop.sh
# bisogna settare la scala PRIMA di eseguire 2_get_crop.sh !!! (o meglio non la si setta affatto)
# attenti lasciare la virgola finale "..w:h:x:y,"
CROP="crop=718:548:2:14,";

# questo lo leggi da audio.log dopo aver eseguito 3_mk_audio.sh
BITRATE="700";



# questo lo abiliti se vuoi creare una piccola anteprima
#IF_PROVA="-ss 0:25:0 -endpos 35";	 # decommenta se non vuoi una anteprima



# codec usato per la codifica audio
OAC="mp3lame -lameopts vbr=2:q=9:vol=8 $LANGUAGE_ID $SUBTITLE_ID -srate 44100";

# codec usato nella codifica video a 1 passaggio
LAVAC_OPTS="lavc -lavcopts vcodec=mpeg4:keyint=50:vbitrate=$BITRATE:vhq:v4mv:mbd=2:vlelim=-4:vcelim=9:lumi_mask=0.05:dark_mask=0.03"

OVC="$LAVAC_OPTS -mc 1 -sws 1 -vf pp=0x20000,$CROP$SCALE";

# codec usato nella codifica video a 2 passaggi
OVC_PASS1="$LAVAC_OPTS:vpass=1 -mc 1 -sws 1 -vf hqdn3d=2:1:2,$CROP$SCALE"
OVC_PASS2="$LAVAC_OPTS:vpass=2 -mc 1 -sws 1 -vf hqdn3d=2:1:2,$CROP$SCALE"



# End
#!/bin/bash

. Define.sh



rm -f log/language.log

# questo per capire l'id del auidio in italiano, esempio di output ottenuto:
mencoder -v "$INPUT" \
    | grep language > log/language.log 

echo
echo
echo
cat log/language.log



# End
#!/bin/bash

. Define.sh



rm -f log/crop.log

# ottengo il crop consigliato
mplayer "$INPUT" \
    -ss 0:15:0 -frames 300 \
    -vop cropdetect,$SCALE\
    | grep crop | tail -20 > log/crop.log

echo
echo
echo
cat log/crop.log



# End
#!/bin/bash

. Define.sh



rm -f log/audio.log

# Rimuovi il file temporaneo che va in conflitto:
rm -f frameno.avi

mencoder "$INPUT" \
    -oac $OAC \
    -ovc frameno \
    -o frameno.avi \
    | grep Recommended > log/audio.log

echo
echo
echo
cat log/audio.log



# End