Advertisement
Guest User

Untitled

a guest
Aug 1st, 2013
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.87 KB | None | 0 0
  1. #!/bin/bash
  2. # versione 4.41
  3.  
  4. if [ "$1" == "" ] || [ "$1" == "-h" ] || [ "$1" == "--h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then
  5.   echo ""
  6.   echo "usare: "
  7.   echo ""
  8.   echo "$0"
  9.   echo "    nomefile [obbligatorio]"
  10.   echo "  [opzioni]"
  11.   echo "    -b bitrate [kb] (-b 600, default: 730) "
  12.   echo "    -pass passate (-pass 2, -pass 3, default: singola) "
  13.   echo "    -nofast (-fastfirstpass 0, default 1) "
  14.   echo "    -audio (-alow (aacplus_32k), -amid (aac_fdk_96k) "
  15.   echo "            -an (no audio), -acopy (copia), default: aac_fdk_112k)"
  16.   echo "    -vcopy (-c:v copy, default no)"
  17.   echo "    -copy  (-c copy, default no)"
  18.   echo "    -scopy  (-c:s copy, subtitles, default no -> ass)"
  19.   echo "    preset (fast, medium, slow, default: faster)"
  20.   echo "    profile (main, high, default: auto)"
  21.   echo "    -level (da -level1 a -level5, default: auto)"
  22.   echo "    x264opts (nopts, default: le mie)"
  23.   echo "    -opencl (x264 OpenCL lookahead, default: no)"
  24.   echo "    -nr200 -nr500 (x264 noise reduction nr=200 or 500, default: no)"
  25.   echo "    -10bit (x264 10bit depth, default: no)"
  26.   echo "    -vf filtri (-vf pp=ac,hqdn3d=3)"
  27.   echo "    -ss inizio HH:MM:SS o sec (-ss 00:01:00 -ss 60)"
  28.   echo "    -t durata HH:MM:SS o sec (-t 00:02:00 -t 120)"
  29.   echo "    -r rate (-r 25, default auto)"
  30.   echo "    -nometa (come -map_metadata -1, default no)"
  31.   echo "    debug (stampa solo i comandi senza eseguire)"
  32.   echo "    -log (-psnr -report su logfile)"
  33.   echo ""
  34.   echo "esempio:"
  35.   echo ""
  36.   echo "$0    video.mp4 -b 800 -pass 2 -alow fast -vf pp=ac,hqdn3d=3"
  37.   echo ""
  38.   exit 1;
  39. fi
  40.  
  41. eseguibile="ffmpeg2"
  42.  
  43. #--------------------------------------------------------
  44. debug=0
  45. for param in "$@"; do
  46.   if [ "$param" == "debug" ]; then
  47.     debug=1
  48.     break
  49.   else
  50.     debug=0
  51.   fi
  52. done
  53.  
  54. #--------------------------------------------------------
  55. video="$1"
  56. if [ ! -f "$video" ]; then
  57.   echo "il file $video non esite"
  58.   exit 1;
  59. fi
  60.  
  61. nameori=$(basename "$video")
  62. namenew=${nameori%.*}.mkv
  63.  
  64. if [ -f "$namenew" ]; then
  65.   namenew=${nameori%.*}_2_.mkv
  66. fi
  67. #-------------------------------------------------------------------------------------------------
  68. # bitrate in k, es: -b 500  altimenti 730k
  69.  
  70. shift
  71.  
  72. bitrate="-b:v 730k"
  73. filterin="no"
  74. for param in "$@"; do
  75.   if [ $filterin == "rilevato" ]; then    
  76.     bitrate="-b:v "$param"k"
  77.     break
  78.   elif [ $param == "-b" ]; then
  79.       filterin="rilevato"
  80.   fi
  81. done
  82.  
  83. # frame rate, -r 25
  84. rate=""
  85. filterin="no"
  86. for param in "$@"; do
  87.   if [ $filterin == "rilevato" ]; then    
  88.     rate="-r "$param
  89.     break
  90.   elif [ $param == "-r" ]; then
  91.       filterin="rilevato"
  92.   fi
  93. done
  94.  
  95. #-------------------------------------------------------------------------------------------------
  96. #parametri video:
  97. preset="-preset faster -tune film"
  98. for param in "$@"; do
  99.   if [ "$param" == "fast" ]; then
  100.     preset="-preset fast -tune film"
  101.     break
  102.   elif [ "$param" == "medium" ]; then
  103.     preset="-preset medium -tune film"
  104.     break
  105.   elif [ "$param" == "slow" ]; then
  106.     preset="-preset slow -tune film"
  107.     break
  108.   fi
  109. done
  110.  
  111.  
  112. #profile
  113. profile=""
  114. for param in "$@"; do
  115.   if [ "$param" == "main" ]; then
  116.     profile="-profile:v main"
  117.     break
  118.   elif [ "$param" == "high" ]; then
  119.     profile="-profile:v high"
  120.     break
  121.   fi
  122. done
  123.  
  124. #opts264
  125. # noparm="parametri"
  126. set_264="-x264opts ref=4:bframes=4:direct=auto:aq-strength=1.3:ssim"
  127. for param in "$@"; do
  128.   if [ "$param" == "nopts" ]; then
  129.     set_264="-x264opts ssim"
  130. #     noparm="nulla"
  131.     break
  132.   fi
  133. done
  134.  
  135. # opencl lookahead
  136. for param in "$@"; do
  137.   if [ "$param" == "-opencl" ]; then
  138.      set_264=$set_264":opencl"
  139.     break
  140.   fi
  141. done
  142.  
  143.  
  144. # -nr x264 denoise = 100
  145. for param in "$@"; do
  146.   if [ "$param" == "-nr200" ]; then
  147.      set_264=$set_264":nr=200"
  148.     break
  149.   elif [ "$param" == "-nr500" ]; then
  150.      set_264=$set_264":nr=500"
  151.     break
  152.   fi
  153. done
  154.  
  155. #parametri level
  156.  
  157. livello1="level=1.0:ref=1:bframes=0:vbv-bufsize=218:vbv-maxrate=80"
  158. livello2="level=2.0:ref=2:b-pyramid=none:vbv-bufsize=2500:vbv-maxrate=2500"
  159. livello3="level=3.0:vbv-bufsize=12500:vbv-maxrate=12500"
  160. livello4="level=4.0:vbv-bufsize=25000:vbv-maxrate=20000"
  161. livello5="level=5.0:vbv-bufsize=168750:vbv-maxrate=168750"
  162.  
  163. for param in "$@"; do
  164.   if [ "$param" == "-level1" ]; then
  165.       set_264=$set_264":"$livello1
  166.     break
  167.   elif [ "$param" == "-level2" ]; then
  168.       set_264=$set_264":"$livello2
  169.     break
  170.   elif [ "$param" == "-level3" ]; then
  171.       set_264=$set_264":"$livello3
  172.     break
  173.   elif [ "$param" == "-level4" ]; then
  174.       set_264=$set_264":"$livello4
  175.     break
  176.   elif [ "$param" == "-level5" ]; then
  177.       set_264=$set_264":"$livello5
  178.     break
  179.   fi
  180. done
  181.  
  182. # x264 10 bit depth
  183.  
  184. for param in "$@"; do
  185.   if [ "$param" == "-10bit" ]; then
  186.     eseguibile="ffmpeg-x10bit"
  187.     break
  188.   fi
  189. done
  190.  
  191.  
  192.  
  193. #-------------------------------------------------------------------------------------------------
  194. #parametri audio:
  195.  
  196. audio_parm="-c:a libfdk_aac -b:a 112k -ar 48k -ac 2"
  197. for param in "$@"; do
  198.   if [ "$param" == "-alow" ]; then
  199.     audio_parm="-c:a libaacplus -b:a 32k -ar 48k -ac 2"
  200.     break
  201.   elif [ "$param" == "-amid" ]; then
  202.     audio_parm="-c:a libfdk_aac -b:a 96k -ar 48k -ac 2"
  203.     break
  204.   elif [ "$param" == "-acopy" ]; then
  205.     audio_parm="-c:a copy"
  206.     break
  207.   elif [ "$param" == "-an" ]; then
  208.     audio_parm="-an"
  209.     break
  210.   fi
  211. done
  212. #-------------------------------------------------------------------------------------------------
  213. # passate 1,2 o 3
  214.  
  215. pass=1
  216. filterin="no"
  217. for param in "$@"; do
  218.   if [ $filterin == "rilevato" ]; then    
  219.     if [ $param == "2" ]; then
  220.       pass="2"
  221.     elif [ $param == "3" ]; then
  222.       pass="3"
  223.     else
  224.       pass="1"
  225.     fi
  226.     break
  227.   elif [ $param == "-pass" ]; then
  228.       filterin="rilevato"
  229.   fi
  230. done
  231.  
  232. # -nofast -fastfirstpass 0
  233. nofastfirst="no"
  234. for param in "$@"; do
  235.   if [ "$param" == "-nofast" ]; then
  236.     nofastfirst="si"
  237.     break
  238.   fi
  239. done
  240.  
  241. #-------------------------------------------------------------------------------------------------
  242. # filtri -vf deshake,pp=ac/al
  243. filter=""
  244. filterin="no"
  245. for param in "$@"; do
  246.   if [ $filterin == "rilevato" ]; then    
  247.     filter="-vf "$param
  248.     break
  249.   elif [ $param == "-vf" ]; then
  250.       filterin="rilevato"
  251.   fi
  252. done
  253.  
  254. #-------------------------------------------------------------------------------------------------
  255. # tempo start e durata esemio
  256. # tempo="-ss 00:03:00 -t 00:05:00"
  257. # tempoin=""
  258. # tempodur=""
  259.  
  260. # -ss
  261.  
  262. tempoin=""
  263. filterin="no"
  264. for param in "$@"; do
  265.   if [ $filterin == "rilevato" ]; then    
  266.     tempoin="-ss "$param
  267.     break
  268.   elif [ $param == "-ss" ]; then
  269.       filterin="rilevato"
  270.   fi
  271. done
  272.  
  273. # -t  
  274.  
  275. tempodur=""
  276. filterin="no"
  277. for param in "$@"; do
  278.   if [ $filterin == "rilevato" ]; then    
  279.     tempodur="-t "$param
  280.     break
  281.   elif [ $param == "-t" ]; then
  282.       filterin="rilevato"
  283.   fi
  284. done
  285.              
  286. # logfile -log
  287. #-psnr -report
  288.  
  289. logfile=""
  290. for param in "$@"; do
  291.   if [ "$param" == "-log" ]; then
  292.     logfile=" -psnr -report "
  293.     break
  294.   fi
  295. done
  296.  
  297. #--------------------------------------------------
  298. #altri paramentri
  299. altro=""
  300. altroinuso="no"
  301.  
  302. # -nometa -map_metadata -1
  303. for param in "$@"; do
  304.   if [ "$param" == "-nometa" ]; then
  305.     altro="-map_metadata -1 "
  306.     altroinuso="si"
  307.     break
  308.   fi
  309. done
  310.  
  311. # -scopy -c:s copy subtitles
  312. for param in "$@"; do
  313.   if [ "$param" == "-scopy" ]; then
  314.     if [ $altroinuso == "no" ]; then
  315.       altro="-c:s copy "
  316.       altroinuso="si"
  317.       break
  318.     else
  319.       altro=$altro"-c:s copy "
  320.       break
  321.     fi
  322.   fi
  323. done
  324.  
  325. # ----------------------------------
  326. #codec video default
  327. vcodec="-c:v libx264"
  328.  
  329. #-vcopy = -c:v copy -----------------------
  330.  
  331. for param in "$@"; do
  332.   if [ "$param" == "-vcopy" ]; then
  333.     vcodec="-c:v copy"
  334.     #azzeramento altri paramentri video
  335.     rate=""
  336.     preset=""
  337.     profile=""
  338.     set_264=""
  339.     bitrate=""
  340.     pass="1"
  341.     break
  342.   fi
  343. done
  344.  
  345. #-copy = -c copy -----------------------------
  346.  
  347. for param in "$@"; do
  348.   if [ "$param" == "-copy" ]; then
  349.     vcodec="-c copy"
  350.     #azzeramento altri paramentri video e audio
  351.     rate=""
  352.     preset=""
  353.     profile=""
  354.     set_264=""
  355.     bitrate=""
  356.     pass="1"
  357.     audio_parm=""
  358.     break
  359.   fi
  360. done
  361.  
  362. #-------------------------------------------------------------------------------------------------
  363. # esecuzione ffmpeg
  364.  
  365. # ---- crono start ----------------------------------
  366. # Get time as a UNIX timestamp (seconds elapsed since Jan 1, 1970 0:00 UTC)
  367. Tstart="$(date +%s)"
  368. # ------------------------------------------
  369.  
  370. #---------- variabili per non ripetere il comando finale
  371.  
  372. #unica="$eseguibile $logfile -i \""$video"\" $filter $tempoin $tempodur $rate -threads 0 $vcodec $preset $profile $set_264 $audio_parm -f matroska $bitrate $altro \""$namenew"\""
  373.  
  374. # --------- per passata 1 di 2 e 3, e 2 di 3, aggiungere tra le due parti $chepassata e $isfast
  375. intermedia1="$eseguibile $logfile -y -i \""$video"\" $filter $tempoin $tempodur $rate -threads 0 $vcodec $preset $profile $set_264 -an "
  376.  
  377. intermedia2=" -f null $bitrate /dev/null"
  378.  
  379. # --------- passata finale unica unire le 2 parti, per 2 di 2 e 3, aggiungere tra le due parti $chepassata
  380. finale1="$eseguibile $logfile -i \""$video"\" $filter $tempoin $tempodur $rate -threads 0 $vcodec $preset $profile $set_264 $audio_parm -f matroska $bitrate "
  381.  
  382. finale2=" $altro \""$namenew"\""
  383.  
  384. # -------------  passata unica
  385. if [ "$pass" == "1" ]; then
  386.  
  387.   unica=$finale1$finale2
  388.  
  389.   echo ""
  390.   echo $unica
  391.   echo ""
  392.  
  393.   if [ $debug == "0" ]; then
  394.     eval $unica
  395.   fi
  396. fi
  397.  
  398.  
  399. # -------------  passata 1 di 2 o 3
  400. if [ "$pass" == "2" ] || [ "$pass" == "3" ]; then
  401.  
  402.   chepassata="-pass 1"
  403.   if [ $nofastfirst == "no" ]; then
  404.     isfast=" -fastfirstpass 1"
  405.   fi
  406.   intermedia1_2=$intermedia1$chepassata$isfast$intermedia2
  407.  
  408.   echo ""
  409.   echo $intermedia1_2
  410.   echo ""
  411.  
  412.   Tstart1="$(date +%s)"
  413.  
  414.   if [ $debug == "0" ]; then
  415.     eval $intermedia1_2
  416.   fi
  417.  
  418.   Tp1="$(($(date +%s)-Tstart1))"
  419.  
  420. fi
  421.  
  422. # -------------  passata 2 di 2
  423. if [ "$pass" == "2" ]; then
  424.  
  425.   chepassata="-pass 2"
  426.  
  427.   finale2_2=$finale1$chepassata$finale2
  428.  
  429.  
  430.   echo ""
  431.   echo $finale2_2
  432.   echo ""
  433.  
  434.   Tstart2="$(date +%s)"
  435.  
  436.   if [ $debug == "0" ]; then
  437.     eval $finale2_2
  438.     rm ffmpeg2pass-*
  439.   fi
  440.  
  441.   Tp2="$(($(date +%s)-Tstart2))"
  442.  
  443. fi
  444.  
  445. # -------------  passata 2 e 3 di 3
  446. if [ "$pass" == "3" ]; then
  447.  
  448.   chepassata="-pass 3"
  449.   isfast=""
  450.  
  451.   intermedia2_3=$intermedia1$chepassata$isfast$intermedia2
  452.  
  453.   echo ""
  454.   echo $intermedia2_3
  455.   echo ""
  456.  
  457.   Tstart2="$(date +%s)"
  458.  
  459.   if [ $debug == "0" ]; then
  460.     eval $intermedia2_3
  461.   fi
  462.  
  463.   Tp2="$(($(date +%s)-Tstart2))"
  464.  
  465.   finale3_3=$finale1$chepassata$finale2
  466.  
  467.   echo ""
  468.   echo $finale3_3
  469.   echo ""
  470.  
  471.   Tstart3="$(date +%s)"
  472.  
  473.   if [ $debug == "0" ]; then
  474.     eval $finale3_3
  475.     rm ffmpeg2pass-*
  476.   fi
  477.  
  478.   Tp3="$(($(date +%s)-Tstart3))"
  479.  
  480. fi
  481.  
  482. # ---- crono stop ----------------------------------
  483. Ttotal="$(($(date +%s)-Tstart))"
  484.  
  485. #----- crono print ---------------------------------
  486. if [ $debug == "0" ]; then
  487.   echo ""
  488.   #echo "Time in seconds: ${T}"
  489.  
  490.   printf "Tempo conversione: %02dh:%02dm:%02ds\n" "$((Ttotal/3600%24))" "$((Ttotal/60%60))" "$((Ttotal%60))"
  491.   echo ""
  492.  
  493.   if [ $pass == "2" ]; then
  494.     printf "pass 1: %02dh:%02dm:%02ds\n" "$((Tp1/3600%24))" "$((Tp1/60%60))" "$((Tp1%60))"
  495.     printf "pass 2: %02dh:%02dm:%02ds\n" "$((Tp2/3600%24))" "$((Tp2/60%60))" "$((Tp2%60))"
  496.   fi
  497.  
  498.   if [ $pass == "3" ]; then
  499.     printf "pass 1: %02dh:%02dm:%02ds\n" "$((Tp1/3600%24))" "$((Tp1/60%60))" "$((Tp1%60))"
  500.     printf "pass 2: %02dh:%02dm:%02ds\n" "$((Tp2/3600%24))" "$((Tp2/60%60))" "$((Tp2%60))"
  501.     printf "pass 3: %02dh:%02dm:%02ds\n" "$((Tp3/3600%24))" "$((Tp3/60%60))" "$((Tp3%60))"
  502.   fi
  503.  
  504.   echo ""
  505. fi
  506.  
  507. # ---------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement