Advertisement
slyfox1186

ffmpeg-auto-convert-videos-to-hevc-cuda-geforce.bat

Dec 23rd, 2022 (edited)
1,419
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 6.55 KB | None | 1 0
  1. @ECHO OFF
  2. SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
  3. COLOR 0A
  4.  
  5. :-----------------------------------------------------------------------------
  6.  
  7. REM BY: SlyFox1186
  8. REM PASTEBIN: https://pastebin.com/u/slyfox1186
  9. REM GitHub: https://github.com/slyfox1186
  10.  
  11. REM NEED A PROGRAMMER? YOU FOUND A GOOD ONE! CONTACT ME ON GITHUB!
  12.  
  13. :-----------------------------------------------------------------------------
  14.  
  15. REM PURPOSE
  16.  
  17. REM THIS SCRIPT WILL RECURSIVELY SEARCH FOR MKV OR MP4 VIDEOS IN THE CURRENT SCRIPTS DIRECTORY
  18. REM AND CREATE A CONVERTED ROUGHLY HALF-SIZE VERSION OF THE ORIGINAL IN X265 10-BIT (HEVC).
  19.  
  20. REM ADDITIONAL NOTES
  21.  
  22. REM THE ORIGINAL VIDEO SHOULD NOT BE OVERWRITTEN. SO FAR, THIS IS AS CLOSE TO INDISTINGUISHABLE
  23. REM QUALITY AS I HAVE BEEN ABLE TO GET USING AN AUTOMATED LOOP SCRIPT SO ENJOY MY EFFORTS!
  24.  
  25. REM CONVERT METHOD
  26.  
  27. REM THE SCRIPT UTILIZES GEFORCE VIDEO CARDS THAT ARE VERSION TURING AND HIGHER
  28. REM BY USING HARDWARE ACCELERATION (CUDA) TO SPEED UP THE ENCODING PROCESS.
  29.  
  30. REM INSTRUCTIONS
  31.  
  32. REM YOU MUST POINT THE FF AND FP VARIABLES BELOW TO THE FULL PATH OF YOUR OWN EXE FILES
  33. REM IF THEY ARE NOT ALREADY INSIDE YOUR WINDOWS ENVIRONMENT AND IF SO THEN
  34. REM REPLACE %FF% BELOW WITH ffmpeg.exe AND %FP% WITH ffprobe.exe
  35.  
  36. REM IMPORTANT
  37.  
  38. REM I HIGHLY RECOMMEND YOU USE THIS GITHUB REPO TO COMPILE ALL OF THE EXE FILES NEEDED
  39. REM FOR THIS SCRIPT TO RUN. https://github.com/m-ab-s/media-autobuild_suite
  40.  
  41. REM I ASSUME NO RISK AND PROVIDE THIS AS-IS WHICH MEANS YOU
  42. REM SHOULD RUN TESTS BEFORE YOU USE THIS ON ANY DATA YOU VALUE.
  43.  
  44. REM FINAL COMMENT
  45.  
  46. REM GOOD LUCK AND GIVE ME A THUMBS UP IF YOU LIKE THIS! IT KEEPS
  47. REM ME MOTIVATED TO POST MY FAVORITE PERSONAL SCRIPTS ON HERE!
  48.  
  49. :-----------------------------------------------------------------------------
  50.  
  51. REM CHANGE THE WORKING DIRECTORY TO THE SCRIPTS, REOPEN CMD MAXIMIZED, AND SET THE WINDOW TITLE
  52. PUSHD "%~dp0"
  53. IF NOT "%1"=="MAX" START /MAX CMD /D /C %0 MAX & GOTO :EOF
  54. FOR /F "TOKENS=*" %%A IN ("%CD%") DO SET "WIN_TITLE=%%A"
  55. TITLE %WIN_TITLE%
  56.  
  57. :-----------------------------------------------------------------------------
  58.  
  59. REM SET MANUAL VARIABLES HERE
  60. SET FF=G:\MAB\local64\bin-video\ffmpeg.exe
  61. SET FP=G:\MAB\local64\bin-video\ffprobe.exe
  62.  
  63. :-----------------------------------------------------------------------------
  64.  
  65. REM DELETE ANY LEFTOVER FILES FROM PREVIOUS RUNS
  66. FOR /R %%G IN (*.mkv, *.mp4) DO (
  67.     SET FNAME=%%~dpnG
  68.     SET FNAME_END=!FNAME:~-7!
  69.     IF "!FNAME_END!%%~xG"==" (x265)%%~xG" (
  70.         ECHO MAKE A CHOICE: & ECHO=
  71.         ECHO [1] Delete
  72.         ECHO [2] Keep
  73.         ECHO [3] Exit & ECHO=
  74.         CHOICE /C 123 /N & CLS
  75.             IF ERRORLEVEL 3 GOTO :EOF
  76.             IF ERRORLEVEL 2 GOTO NEXT
  77.             IF ERRORLEVEL 1 (
  78.                 DEL /Q "!FNAME!%%~xG"
  79.                 ECHO File Deleted: "!FNAME!%%~xG"
  80.             )
  81.       ) ELSE (
  82.         :NEXT
  83.        REM STORES THE CURRENT VIDEO WIDTH, ASPECT RATIO, PROFILE, BIT RATE, AND TOTAL DURATION IN VARIABLES FOR USE LATER IN THE FFMPEG COMMAND LINE.
  84.         FOR /F "TOKENS=*" %%A IN ('%FP% -hide_banner -v error -select_streams v:0 -show_entries stream^=width -of csv^=s^=x:p^=0 -pretty "%%G"') DO SET VW=%%A
  85.         FOR /F "TOKENS=*" %%A IN ('%FP% -hide_banner -v error -select_streams v:0 -show_entries stream^=display_aspect_ratio -of default^=nk^=1:nw^=1 -pretty "%%G"') DO SET AR=%%A
  86.         FOR /F "TOKENS=1" %%A IN ('%FP% -hide_banner -v error -select_streams v:0 -show_entries stream^=profile -of default^=nk^=1:nw^=1 -pretty "%%G"') DO SET PROFILE=%%A
  87.         FOR /F "TOKENS=1" %%A IN ('%FP% -hide_banner -v error -show_entries format^=bit_rate -of default^=nk^=1:nw^=1 -pretty "%%G"') DO SET MR=%%A
  88.         FOR /F "TOKENS=1" %%A IN ('%FP% -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%%G"') DO SET LENGTH=%%A
  89.  
  90.         REM REMOVES ALL TRAILING DECIMALS FROM THE LENGTH VARIABLE TO GET THE TOTAL MINUTES
  91.        REM I HAD TO MAKE TWO VARS IN CASE THE VIDEO IS OVER A CERTAIN LENGTH LONG SO ONLY ONE
  92.        REM OF THESE WILL BE ACCURATE AND YOU SHOULD BE ABLE TO TELL THE DIFFERENCE WHEN EXECUTING
  93.        REM THE SCRIPT... UNFORTUNATE LIMIT OF BATCH CODE
  94.         SET "LN1=!LENGTH:~0,4!"
  95.         SET "LN2=!LENGTH:~0,5!"
  96.         SET /A "LN3=LN1/60"
  97.         SET /A "LN4=LN2/60"
  98.  
  99.         REM GETS THE INPUT VIDEO'S MAX DATARATE AND APPLIES LOGIC TO DETERMINE BITRATE, BUFSIZE, AND MAXRATE VARIABLES
  100.         SET "MR1=!MR:~0,4!"
  101.         SET /A "BR1=MR/2"
  102.         SET /A "BR2=BR1*1000"
  103.         SET /A "BR=BR2+1000"
  104.         SET /A "MR=MR1*1000"
  105.         SET /A "BF=BR*2"
  106.  
  107.         REM TEST IF THE DECIMAL IS 0.51 OR HIGHER THEN ADD NUMBERS TO THE VARAIABLE MAXRATE BASED ON LOGIC.
  108.        REM IF THE MAXRATE DECIMAL PLACE IS 0.51 OR HIGHER ADD 3 TO MAXRATE ELSE ADD 2. AGAIN A LIMIT OF
  109.        REM BATCH CODE OTHERWISE I WOULD WRITE THIS DIFFERENTLY... HOWEVER, IT SEEMS TO WORK WELL.
  110.         SET _MR=!MR:~2,4!
  111.         IF "!_MR!" GEQ "51" (SET /A "MR=MR+2") ELSE (SET /A "MR=MR+1")
  112.  
  113.         REM ECHO THE STORED VARIABLES THAT CONTAIN THE VIDEO'S STATS
  114.         ECHO= & ECHO=
  115.         ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  116.         ECHO=
  117.         ECHO FILE NAME:    %%G
  118.         ECHO=
  119.         ECHO LENGTH:       !LN3! MINUTES ^(SHORT VIDEOS^)
  120.         ECHO LENGTH:       !LN4! MINUTES ^(LONG VIDEOS^)
  121.         ECHO=
  122.         ECHO VIDEO WIDTH:  !VW!
  123.         ECHO=
  124.         ECHO ASPECT RATIO: !AR!
  125.         ECHO=
  126.         ECHO BITRATE:      !BR!k
  127.         ECHO BUFSIZE:      !BF!k
  128.         ECHO MAXRATE:      !MR!k
  129.         ECHO=
  130.         ECHO PROFILE:      !PROFILE!
  131.         ECHO=
  132.         ECHO ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  133.  
  134.         REM RUN FFMPEG
  135.         %FF% ^
  136.         -y ^
  137.         -threads 0 ^
  138.         -fflags "+igndts +nofillin" ^
  139.         -hide_banner ^
  140.         -hwaccel_output_format cuda ^
  141.         -i "%%G" ^
  142.         -fps_mode vfr ^
  143.         -movflags +faststart ^
  144.         -c:v hevc_nvenc ^
  145.         -preset:v p7 ^
  146.         -tune:v hq ^
  147.         -pix_fmt:v p010le ^
  148.         -rc:v vbr ^
  149.         -b:v !BR!k ^
  150.         -bufsize:v !BF!k ^
  151.         -maxrate:v !MR!k ^
  152.         -bf:v 3 ^
  153.         -b_ref_mode:v middle ^
  154.         -qmin:v 0 ^
  155.         -qmax:v 99 ^
  156.         -temporal-aq:v 1 ^
  157.         -rc-lookahead:v 20 ^
  158.         -i_qfactor:v 0.75 ^
  159.         -b_qfactor:v 1.1 ^
  160.         -c:a libfdk_aac ^
  161.         -qmin:a 1 ^
  162.         -qmax:a 4 ^
  163.         "%%~dpnG (x265)%%~xG"
  164.         )
  165.     )
  166. )
  167.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement