Script mencoder.sh
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