LAPINPT

FF-enc

Feb 1st, 2016
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 4.91 KB | None | 0 0
  1. @ECHO OFF
  2.  
  3. setlocal ENABLEDELAYEDEXPANSION
  4. set "UAGENT=-useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0""
  5. FOR /F "delims=" %%D IN ('where lynx.cfg') DO SET "LYNX_CFG=%%D"
  6. ::SET "LYNX_CFG=D:\PortableApps\media-suite\lynx.cfg"
  7.  
  8. :LOOP
  9.  
  10. IF [%1]==[] GOTO EOF
  11.  
  12. CD /D "%~dp1"
  13.  
  14. SET "inMKV=%~nx1"
  15.  
  16. :: CLEAN FILE NAME ::
  17. SET "FLT=%~n1"
  18. SET "FLT1=%FLT: =.%"
  19. SET "FLT2=%FLT1:(=%"
  20. SET "FLT3=%FLT2:)=%"
  21. SET "FLT4=%FLT3:[=%"
  22. SET "FLT5=%FLT4:]=%"
  23.  
  24. FOR /F "delims=" %%N IN ('ECHO %FLT5% ^| sed -r "s/(.*[0-9]{4})\..*/\1/ ; s/\.(720p|1080p|bluray|x264).*//I"') DO SET "inMOVIE=%%N"
  25. SET "srchMOVIE=%inMOVIE:.= %"
  26.  
  27. :: CHECK IF ONLINE & GO IMDb ::
  28. PING -n 1 8.8.8.8 >NUL && (
  29.     FOR /F "delims=" %%S IN ('lynx %UAGENT% -dump -nonumbers -nolist "www.google.pt/search?q=%srchMOVIE% site:www.imdb.com" 2^>NUL ^| grep -m1 ") - IMDb" ^| sed "s/.*\. //;s/(//;s/) .*//;s/ /./g;s/://"') DO SET "imdbN=%%S"
  30.     FOR /F "delims=" %%U IN ('lynx %UAGENT% -dump -nonumbers -listonly "https://duckduckgo.com/lite/?q=%srchMOVIE% site:www.imdb.com" 2^>NUL ^| sed -n "s|.*\(www.imdb.com/title/tt[0-9]*\)/$|\1|p" ^| sed -n 1p') DO SET "imdbURL=%%U"
  31.    ::START "" "http://!imdbURL!/"
  32.     ECHO !imdbURL!
  33. ) || (
  34.     ECHO OFFLINE
  35. )
  36.  
  37. IF NOT "%imdbN%" == "" SET "inMOVIE=%imdbN%"
  38. SET "outMOVIE=%inMOVIE%.720p.BRRip.x264"
  39. ECHO %outMOVIE%
  40.  
  41.  
  42. SET /p SetAC=Audio Codec ac3 ou m4a?:
  43. IF [%SetAC%] == []  SET SetAC=ac3
  44. SET /p CRFv=CRF 17?:
  45. IF [%CRFv%] == []  SET CRFv=17
  46. SET /p ThrD=Threads 12?:
  47. IF [%ThrD%] == []  SET ThrD=0
  48. SET /p BfrM=bframes 8?:
  49. IF [%BfrM%] == []  SET BfrM=8
  50.  
  51.  
  52.  
  53. :: GET VIDEO DIMENSIONS ::
  54. FOR /F "tokens=1,2 delims=x" %%D IN ('mkvmerge -I "%inMKV%" ^| sed -rn "/Track ID .*video/ s/.*display_dimensions:([0-9]*x[0-9]*) .*/\1/p"') DO (SET "WIDTH=%%D" & SET "HEIGHT=%%E")
  55. ECHO %WIDTH%x%HEIGHT%
  56.  
  57.  
  58.  
  59. :: RESIZE & CROPDETECT 1080p > 720p ::
  60. IF %WIDTH% GEQ 1600 (
  61.     SET "vSCALE=scale=1280:trunc((ow/dar)/8+0.5)*8"
  62.     SET "vCROP=cropdetect=24:8:0"
  63.     FOR /F %%V IN ('ffmpeg64 -ss 30 -i "%inMKV%" -t 30 -vf "!vSCALE!,!vCROP!" -f null - 2^>^&1 ^| awk "/crop=/ {last=$NF} END{print last}"') DO SET "cropDT=%%V"
  64.     SET "ScaleCrop=-vf "!vSCALE!,!cropDT!""
  65.     FOR /F "tokens=2 delims=:" %%G IN ('echo !cropDT!') DO SET "HEIGHT=%%G"
  66.     ECHO !cropDT!
  67. )
  68.  
  69.  
  70.  
  71. :: SET R-FRAMES ::
  72. IF %HEIGHT% LEQ 546 (SET RFram=12
  73. ) ELSE IF %HEIGHT% LEQ 594 (SET RFram=11
  74. ) ELSE IF %HEIGHT% LEQ 654 (SET RFram=10
  75. ) ELSE IF %HEIGHT% LEQ 728 (SET RFram=9
  76. ) ELSE (SET RFram=8
  77. )
  78. ECHO RFram=%RFram%
  79.  
  80.  
  81.  
  82. :: GET AUDIO INFO ::
  83. FOR /F "tokens=1-3 delims= " %%H IN ('mkvmerge -I "%inMKV%" ^| grep -m1 ": audio" ^| sed "s/Track ID \(.\): audio (\(.*\)) .*language:\(...\) .*/\1 \2 \3/"') DO (SET "trackN=%%H" & SET "trackC=%%I" & SET "aLang=%%J")
  84. IF [%aLang%] == []  SET "aLang=eng"
  85. IF "%aLang%" == "und"  SET "aLang=eng"
  86. IF NOT "%trackC:AC3=%" == "%trackC%" (SET "aCodeC=ac3"
  87. ) ELSE IF NOT "%trackC:DTS=%" == "%trackC%" (SET "aCodeC=dts"
  88. ) ELSE IF NOT "%trackC:AAC=%" == "%trackC%" (SET "aCodeC=aac"
  89. )
  90.  
  91.  
  92.  
  93. :: AUDIO DEMUX AND ENCODE ::
  94. IF NOT EXIST "AudioTrack.*" (
  95.     ECHO %trackN% %aCodeC% %aLang%
  96.     mkvextract -q tracks "%inMKV%" "%trackN%:SATrack.%aCodeC%"
  97.     IF "%SetAC%" == "ac3" (
  98.         IF "%aCodeC%" == "dts" (
  99.             ECHO Encoding Audio to AC3
  100.             ffmpeg64 -i "SATrack.dts" -ac 6 -ab 640k "AudioTrack.ac3" 2> NUL
  101.             del "SATrack.dts"
  102.         ) ELSE IF "%aCodeC%" == "ac3" (
  103.             move "SATrack.ac3" "AudioTrack.ac3"
  104.         )
  105.     ) ELSE IF "%SetAC%" == "m4a" (
  106.         ffmpeg64 -i "SATrack.%aCodeC%" -ac 6 -c:a pcm_s24le -f wav - 2> NUL | qaac64 -V82 -q2 --threading -r keep --ignorelength --no-delay --no-optimize - -o "AudioTrack.m4a"
  107.         del "SATrack.%aCodeC%"
  108.     )
  109. )
  110.  
  111.  
  112.  
  113. :: VIDEO ENCODE AND MUX::
  114. SET "xEncSet=-hide_banner -report -threads %ThrD% -c:v libx264 -preset veryslow -level 4.1 -deblock -2:-2 -me_method umh -me_range 32 -subq 11 -crf %CRFv% -refs %RFram% -bf %BfrM% -psy-rd 1.00:0.00 -aq-mode 3 -aq-strength 0.90 -bufsize 30000k -maxrate 35000k -x264opts fast_pskip=0:keyint=240:min-keyint=23:partitions=p8x8,b8x8,i4x4,i8x8:mbtree=1:ipratio=1.3:pbratio=1.2:qcomp=0.70"
  115.  
  116. ffmpeg64 -y -i "%inMKV%" %xEncSet% %ScaleCrop% -map 0:v -metadata:s:v:0 title="" -an -sn -map_chapters -1 "VideoTrack.mkv" && (
  117.     mkvmerge -o "%outMOVIE%.mkv" --compression 0:none --track-name "0:" -A -M -T --no-global-tags "VideoTrack.mkv" --compression 0:none --language 0:%aLang% AudioTrack.%SetAC% --track-order 0:0,1:0 --title ""
  118.     del VideoTrack.mp4 AudioTrack.%SetAC%
  119.    
  120.     :: CLEAN REPORT ::
  121.     FOR /F "delims=" %%L IN ('DIR /B /O:-D ffmpeg-*.log ^| sed -n 1p') DO SET "ffLOG=%%L"
  122.     sed -i -n "/frame I.*Avg QP/,/kb\/s/p" !ffLOG!
  123.     sed -i "s/\[.*\] //" !ffLOG!
  124.     sed -i "s/\(.*B-frames.*\)/\1\n/" !ffLOG!
  125. )
  126.  
  127.  
  128. :: MP4Box -add "VideoTrack.mp4:name=" -add "AudioTrack.%SetAC%:lang=%aLang%:name=" -new "%outMOVIE%.mp4"
  129.    
  130.  
  131.  
  132. SHIFT
  133. GOTO :LOOP
  134.  
  135. :EOF
  136. ECHO. & ECHO JOB DONE
  137. PAUSE >NUL
Advertisement
Add Comment
Please, Sign In to add comment