Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # versione 4.41
- if [ "$1" == "" ] || [ "$1" == "-h" ] || [ "$1" == "--h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then
- echo ""
- echo "usare: "
- echo ""
- echo "$0"
- echo " nomefile [obbligatorio]"
- echo " [opzioni]"
- echo " -b bitrate [kb] (-b 600, default: 730) "
- echo " -pass passate (-pass 2, -pass 3, default: singola) "
- echo " -nofast (-fastfirstpass 0, default 1) "
- echo " -audio (-alow (aacplus_32k), -amid (aac_fdk_96k) "
- echo " -an (no audio), -acopy (copia), default: aac_fdk_112k)"
- echo " -vcopy (-c:v copy, default no)"
- echo " -copy (-c copy, default no)"
- echo " -scopy (-c:s copy, subtitles, default no -> ass)"
- echo " preset (fast, medium, slow, default: faster)"
- echo " profile (main, high, default: auto)"
- echo " -level (da -level1 a -level5, default: auto)"
- echo " x264opts (nopts, default: le mie)"
- echo " -opencl (x264 OpenCL lookahead, default: no)"
- echo " -nr200 -nr500 (x264 noise reduction nr=200 or 500, default: no)"
- echo " -10bit (x264 10bit depth, default: no)"
- echo " -vf filtri (-vf pp=ac,hqdn3d=3)"
- echo " -ss inizio HH:MM:SS o sec (-ss 00:01:00 -ss 60)"
- echo " -t durata HH:MM:SS o sec (-t 00:02:00 -t 120)"
- echo " -r rate (-r 25, default auto)"
- echo " -nometa (come -map_metadata -1, default no)"
- echo " debug (stampa solo i comandi senza eseguire)"
- echo " -log (-psnr -report su logfile)"
- echo ""
- echo "esempio:"
- echo ""
- echo "$0 video.mp4 -b 800 -pass 2 -alow fast -vf pp=ac,hqdn3d=3"
- echo ""
- exit 1;
- fi
- eseguibile="ffmpeg2"
- #--------------------------------------------------------
- debug=0
- for param in "$@"; do
- if [ "$param" == "debug" ]; then
- debug=1
- break
- else
- debug=0
- fi
- done
- #--------------------------------------------------------
- video="$1"
- if [ ! -f "$video" ]; then
- echo "il file $video non esite"
- exit 1;
- fi
- nameori=$(basename "$video")
- namenew=${nameori%.*}.mkv
- if [ -f "$namenew" ]; then
- namenew=${nameori%.*}_2_.mkv
- fi
- #-------------------------------------------------------------------------------------------------
- # bitrate in k, es: -b 500 altimenti 730k
- shift
- bitrate="-b:v 730k"
- filterin="no"
- for param in "$@"; do
- if [ $filterin == "rilevato" ]; then
- bitrate="-b:v "$param"k"
- break
- elif [ $param == "-b" ]; then
- filterin="rilevato"
- fi
- done
- # frame rate, -r 25
- rate=""
- filterin="no"
- for param in "$@"; do
- if [ $filterin == "rilevato" ]; then
- rate="-r "$param
- break
- elif [ $param == "-r" ]; then
- filterin="rilevato"
- fi
- done
- #-------------------------------------------------------------------------------------------------
- #parametri video:
- preset="-preset faster -tune film"
- for param in "$@"; do
- if [ "$param" == "fast" ]; then
- preset="-preset fast -tune film"
- break
- elif [ "$param" == "medium" ]; then
- preset="-preset medium -tune film"
- break
- elif [ "$param" == "slow" ]; then
- preset="-preset slow -tune film"
- break
- fi
- done
- #profile
- profile=""
- for param in "$@"; do
- if [ "$param" == "main" ]; then
- profile="-profile:v main"
- break
- elif [ "$param" == "high" ]; then
- profile="-profile:v high"
- break
- fi
- done
- #opts264
- # noparm="parametri"
- set_264="-x264opts ref=4:bframes=4:direct=auto:aq-strength=1.3:ssim"
- for param in "$@"; do
- if [ "$param" == "nopts" ]; then
- set_264="-x264opts ssim"
- # noparm="nulla"
- break
- fi
- done
- # opencl lookahead
- for param in "$@"; do
- if [ "$param" == "-opencl" ]; then
- set_264=$set_264":opencl"
- break
- fi
- done
- # -nr x264 denoise = 100
- for param in "$@"; do
- if [ "$param" == "-nr200" ]; then
- set_264=$set_264":nr=200"
- break
- elif [ "$param" == "-nr500" ]; then
- set_264=$set_264":nr=500"
- break
- fi
- done
- #parametri level
- livello1="level=1.0:ref=1:bframes=0:vbv-bufsize=218:vbv-maxrate=80"
- livello2="level=2.0:ref=2:b-pyramid=none:vbv-bufsize=2500:vbv-maxrate=2500"
- livello3="level=3.0:vbv-bufsize=12500:vbv-maxrate=12500"
- livello4="level=4.0:vbv-bufsize=25000:vbv-maxrate=20000"
- livello5="level=5.0:vbv-bufsize=168750:vbv-maxrate=168750"
- for param in "$@"; do
- if [ "$param" == "-level1" ]; then
- set_264=$set_264":"$livello1
- break
- elif [ "$param" == "-level2" ]; then
- set_264=$set_264":"$livello2
- break
- elif [ "$param" == "-level3" ]; then
- set_264=$set_264":"$livello3
- break
- elif [ "$param" == "-level4" ]; then
- set_264=$set_264":"$livello4
- break
- elif [ "$param" == "-level5" ]; then
- set_264=$set_264":"$livello5
- break
- fi
- done
- # x264 10 bit depth
- for param in "$@"; do
- if [ "$param" == "-10bit" ]; then
- eseguibile="ffmpeg-x10bit"
- break
- fi
- done
- #-------------------------------------------------------------------------------------------------
- #parametri audio:
- audio_parm="-c:a libfdk_aac -b:a 112k -ar 48k -ac 2"
- for param in "$@"; do
- if [ "$param" == "-alow" ]; then
- audio_parm="-c:a libaacplus -b:a 32k -ar 48k -ac 2"
- break
- elif [ "$param" == "-amid" ]; then
- audio_parm="-c:a libfdk_aac -b:a 96k -ar 48k -ac 2"
- break
- elif [ "$param" == "-acopy" ]; then
- audio_parm="-c:a copy"
- break
- elif [ "$param" == "-an" ]; then
- audio_parm="-an"
- break
- fi
- done
- #-------------------------------------------------------------------------------------------------
- # passate 1,2 o 3
- pass=1
- filterin="no"
- for param in "$@"; do
- if [ $filterin == "rilevato" ]; then
- if [ $param == "2" ]; then
- pass="2"
- elif [ $param == "3" ]; then
- pass="3"
- else
- pass="1"
- fi
- break
- elif [ $param == "-pass" ]; then
- filterin="rilevato"
- fi
- done
- # -nofast -fastfirstpass 0
- nofastfirst="no"
- for param in "$@"; do
- if [ "$param" == "-nofast" ]; then
- nofastfirst="si"
- break
- fi
- done
- #-------------------------------------------------------------------------------------------------
- # filtri -vf deshake,pp=ac/al
- filter=""
- filterin="no"
- for param in "$@"; do
- if [ $filterin == "rilevato" ]; then
- filter="-vf "$param
- break
- elif [ $param == "-vf" ]; then
- filterin="rilevato"
- fi
- done
- #-------------------------------------------------------------------------------------------------
- # tempo start e durata esemio
- # tempo="-ss 00:03:00 -t 00:05:00"
- # tempoin=""
- # tempodur=""
- # -ss
- tempoin=""
- filterin="no"
- for param in "$@"; do
- if [ $filterin == "rilevato" ]; then
- tempoin="-ss "$param
- break
- elif [ $param == "-ss" ]; then
- filterin="rilevato"
- fi
- done
- # -t
- tempodur=""
- filterin="no"
- for param in "$@"; do
- if [ $filterin == "rilevato" ]; then
- tempodur="-t "$param
- break
- elif [ $param == "-t" ]; then
- filterin="rilevato"
- fi
- done
- # logfile -log
- #-psnr -report
- logfile=""
- for param in "$@"; do
- if [ "$param" == "-log" ]; then
- logfile=" -psnr -report "
- break
- fi
- done
- #--------------------------------------------------
- #altri paramentri
- altro=""
- altroinuso="no"
- # -nometa -map_metadata -1
- for param in "$@"; do
- if [ "$param" == "-nometa" ]; then
- altro="-map_metadata -1 "
- altroinuso="si"
- break
- fi
- done
- # -scopy -c:s copy subtitles
- for param in "$@"; do
- if [ "$param" == "-scopy" ]; then
- if [ $altroinuso == "no" ]; then
- altro="-c:s copy "
- altroinuso="si"
- break
- else
- altro=$altro"-c:s copy "
- break
- fi
- fi
- done
- # ----------------------------------
- #codec video default
- vcodec="-c:v libx264"
- #-vcopy = -c:v copy -----------------------
- for param in "$@"; do
- if [ "$param" == "-vcopy" ]; then
- vcodec="-c:v copy"
- #azzeramento altri paramentri video
- rate=""
- preset=""
- profile=""
- set_264=""
- bitrate=""
- pass="1"
- break
- fi
- done
- #-copy = -c copy -----------------------------
- for param in "$@"; do
- if [ "$param" == "-copy" ]; then
- vcodec="-c copy"
- #azzeramento altri paramentri video e audio
- rate=""
- preset=""
- profile=""
- set_264=""
- bitrate=""
- pass="1"
- audio_parm=""
- break
- fi
- done
- #-------------------------------------------------------------------------------------------------
- # esecuzione ffmpeg
- # ---- crono start ----------------------------------
- # Get time as a UNIX timestamp (seconds elapsed since Jan 1, 1970 0:00 UTC)
- Tstart="$(date +%s)"
- # ------------------------------------------
- #---------- variabili per non ripetere il comando finale
- #unica="$eseguibile $logfile -i \""$video"\" $filter $tempoin $tempodur $rate -threads 0 $vcodec $preset $profile $set_264 $audio_parm -f matroska $bitrate $altro \""$namenew"\""
- # --------- per passata 1 di 2 e 3, e 2 di 3, aggiungere tra le due parti $chepassata e $isfast
- intermedia1="$eseguibile $logfile -y -i \""$video"\" $filter $tempoin $tempodur $rate -threads 0 $vcodec $preset $profile $set_264 -an "
- intermedia2=" -f null $bitrate /dev/null"
- # --------- passata finale unica unire le 2 parti, per 2 di 2 e 3, aggiungere tra le due parti $chepassata
- finale1="$eseguibile $logfile -i \""$video"\" $filter $tempoin $tempodur $rate -threads 0 $vcodec $preset $profile $set_264 $audio_parm -f matroska $bitrate "
- finale2=" $altro \""$namenew"\""
- # ------------- passata unica
- if [ "$pass" == "1" ]; then
- unica=$finale1$finale2
- echo ""
- echo $unica
- echo ""
- if [ $debug == "0" ]; then
- eval $unica
- fi
- fi
- # ------------- passata 1 di 2 o 3
- if [ "$pass" == "2" ] || [ "$pass" == "3" ]; then
- chepassata="-pass 1"
- if [ $nofastfirst == "no" ]; then
- isfast=" -fastfirstpass 1"
- fi
- intermedia1_2=$intermedia1$chepassata$isfast$intermedia2
- echo ""
- echo $intermedia1_2
- echo ""
- Tstart1="$(date +%s)"
- if [ $debug == "0" ]; then
- eval $intermedia1_2
- fi
- Tp1="$(($(date +%s)-Tstart1))"
- fi
- # ------------- passata 2 di 2
- if [ "$pass" == "2" ]; then
- chepassata="-pass 2"
- finale2_2=$finale1$chepassata$finale2
- echo ""
- echo $finale2_2
- echo ""
- Tstart2="$(date +%s)"
- if [ $debug == "0" ]; then
- eval $finale2_2
- rm ffmpeg2pass-*
- fi
- Tp2="$(($(date +%s)-Tstart2))"
- fi
- # ------------- passata 2 e 3 di 3
- if [ "$pass" == "3" ]; then
- chepassata="-pass 3"
- isfast=""
- intermedia2_3=$intermedia1$chepassata$isfast$intermedia2
- echo ""
- echo $intermedia2_3
- echo ""
- Tstart2="$(date +%s)"
- if [ $debug == "0" ]; then
- eval $intermedia2_3
- fi
- Tp2="$(($(date +%s)-Tstart2))"
- finale3_3=$finale1$chepassata$finale2
- echo ""
- echo $finale3_3
- echo ""
- Tstart3="$(date +%s)"
- if [ $debug == "0" ]; then
- eval $finale3_3
- rm ffmpeg2pass-*
- fi
- Tp3="$(($(date +%s)-Tstart3))"
- fi
- # ---- crono stop ----------------------------------
- Ttotal="$(($(date +%s)-Tstart))"
- #----- crono print ---------------------------------
- if [ $debug == "0" ]; then
- echo ""
- #echo "Time in seconds: ${T}"
- printf "Tempo conversione: %02dh:%02dm:%02ds\n" "$((Ttotal/3600%24))" "$((Ttotal/60%60))" "$((Ttotal%60))"
- echo ""
- if [ $pass == "2" ]; then
- printf "pass 1: %02dh:%02dm:%02ds\n" "$((Tp1/3600%24))" "$((Tp1/60%60))" "$((Tp1%60))"
- printf "pass 2: %02dh:%02dm:%02ds\n" "$((Tp2/3600%24))" "$((Tp2/60%60))" "$((Tp2%60))"
- fi
- if [ $pass == "3" ]; then
- printf "pass 1: %02dh:%02dm:%02ds\n" "$((Tp1/3600%24))" "$((Tp1/60%60))" "$((Tp1%60))"
- printf "pass 2: %02dh:%02dm:%02ds\n" "$((Tp2/3600%24))" "$((Tp2/60%60))" "$((Tp2%60))"
- printf "pass 3: %02dh:%02dm:%02ds\n" "$((Tp3/3600%24))" "$((Tp3/60%60))" "$((Tp3%60))"
- fi
- echo ""
- fi
- # ---------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement