From 094aa3a4470f708c0e3d3ae93922a8f7ce59db2b Mon Sep 17 00:00:00 2001 From: TylerCG <117808427+TylerCG@users.noreply.github.com> Date: Thu, 2 Oct 2025 20:12:09 -0400 Subject: [PATCH] Create AV1 Master.bat --- AV1 Master.bat | 187 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 AV1 Master.bat diff --git a/AV1 Master.bat b/AV1 Master.bat new file mode 100644 index 0000000..76bf8cb --- /dev/null +++ b/AV1 Master.bat @@ -0,0 +1,187 @@ +@echo off +setlocal enabledelayedexpansion + +:: ========================= +:: Prompt for Origination Folder (required) +:: ========================= +:PromptOrigination +set "ORIGINATION_FOLDER=" +set /p ORIGINATION_FOLDER=Enter the origination folder path (e.g., P:\Anime\Show): +if "%ORIGINATION_FOLDER%"=="" ( + echo You must enter a path for the origination folder. + goto :PromptOrigination +) + +:: ========================= +:: Set default Processing Folder +:: ========================= +set "DEFAULT_PROCESSING_FOLDER=C:\Users\Tyler\Videos\Video Conversion\temp" + +:: Prompt for Processing Folder (optional) +set "PROCESSING_FOLDER=" +set /p PROCESSING_FOLDER=Enter processing folder path (or press Enter to use "%DEFAULT_PROCESSING_FOLDER%"): +if "%PROCESSING_FOLDER%"=="" ( + set "PROCESSING_FOLDER=%DEFAULT_PROCESSING_FOLDER%" +) + +:: Prompt for Completed Folder (optional) +set "COMPLETED_FOLDER=" +set /p COMPLETED_FOLDER=Enter completed folder path (or press Enter to put output back into the original folder): + +:: ========================= +:: Resolution choice (default 1080) +:: ========================= +:ChooseResolution +set "RES_CHOICE=" +set /p RES_CHOICE=Choose resolution (720 or 1080, default=1080): +if "%RES_CHOICE%"=="" set "RES_CHOICE=1080" + +if "%RES_CHOICE%"=="720" ( + set "RES_HEIGHT=720" +) else if "%RES_CHOICE%"=="1080" ( + set "RES_HEIGHT=1080" +) else ( + echo Invalid choice. Please enter 720 or 1080. + goto :ChooseResolution +) + +:: ========================= +:: Determine default CQ and filter based on folder type +:: ========================= +set "CQ_DEFAULT=" +set "FILTER_FLAGS=lanczos" + +echo %ORIGINATION_FOLDER% | findstr /i "\\tv\\" >nul +if not errorlevel 1 ( + set "FILTER_FLAGS=bicubic" + if "%RES_CHOICE%"=="1080" ( + set "CQ_DEFAULT=28" + ) else ( + set "CQ_DEFAULT=30" + ) +) else ( + REM Defaults for anime + if "%RES_CHOICE%"=="1080" ( + set "CQ_DEFAULT=32" + ) else ( + set "CQ_DEFAULT=34" + ) +) + +:: ========================= +:: CQ choice (user can override) +:: ========================= +set "CQ=" +set /p CQ=Enter CQ value (default=%CQ_DEFAULT%): +if "%CQ%"=="" set "CQ=%CQ_DEFAULT%" + +:: ========================= +:: Confirm the paths +:: ========================= +echo. +echo === Using These Paths === +echo Origination: %ORIGINATION_FOLDER% +echo Processing: %PROCESSING_FOLDER% +if defined COMPLETED_FOLDER ( + echo Completed: %COMPLETED_FOLDER% +) else ( + echo Completed: [Will return to original folder] +) +echo Resolution: %RES_CHOICE% (Height %RES_HEIGHT%) +echo CRF/CQ: %CQ% +echo Scaling: %FILTER_FLAGS% +echo ========================= + +:: ========================= +:: Ensure folders exist +:: ========================= +if not exist "%PROCESSING_FOLDER%" mkdir "%PROCESSING_FOLDER%" +if defined COMPLETED_FOLDER ( + if not exist "%COMPLETED_FOLDER%" mkdir "%COMPLETED_FOLDER%" +) + +set "SUFFIX= -EHX" + +:: ========================= +:: Loop through each episode recursively +:: ========================= +for /R "%ORIGINATION_FOLDER%" %%F in (*.mkv *.mp4) do ( + REM Skip files that contain "EHX" or "MeGusta" + echo %%~nxF | findstr /i "EHX MeGusta" >nul + if errorlevel 1 ( + echo ===================================================== + echo Processing: %%~nxF + + REM Copy episode to processing folder + copy "%%F" "%PROCESSING_FOLDER%\%%~nxF" + set "INPUT_FILE=%PROCESSING_FOLDER%\%%~nxF" + + REM Wait briefly to ensure copy finishes + timeout /t 1 /nobreak >nul + + REM ========================= + REM Determine audio bitrate based on channel count + REM ========================= + set "AUDIO_BITRATE=" + set "AUDIO_CHANNELS=" + for /f "tokens=1,2 delims=," %%A in ('ffprobe -v error -select_streams a -show_entries stream=index,channels -of csv=p=0 "%INPUT_FILE%"') do ( + if %%B==2 ( + set "AUDIO_BITRATE=128k" + set "AUDIO_CHANNELS=2" + ) else ( + set "AUDIO_BITRATE=192k" + set "AUDIO_CHANNELS=6" + ) + ) + + if "%RES_CHOICE%"=="1080" ( + set "SCALE_WIDTH=1920" + set "SCALE_HEIGHT=1080" + ) else ( + set "SCALE_WIDTH=1280" + set "SCALE_HEIGHT=720" + ) + + REM Default to 128k / 2 channels if detection failed + if "!AUDIO_BITRATE!"=="" set "AUDIO_BITRATE=128k" + if "!AUDIO_CHANNELS!"=="" set "AUDIO_CHANNELS=2" + + REM ========================= + REM Run conversion with AV1 NVENC, 10-bit, auto aspect ratio + REM ========================= + ffmpeg -y -i "!INPUT_FILE!" ^ + -vf "scale=!SCALE_WIDTH!:!SCALE_HEIGHT!:flags=!FILTER_FLAGS!:force_original_aspect_ratio=decrease" ^ + -map 0:v -map 0:a -map 0:s? ^ + -c:v av1_nvenc -preset p1 -cq %CQ% -pix_fmt p010le ^ + -c:a aac -b:a !AUDIO_BITRATE! -ac !AUDIO_CHANNELS! ^ + -c:s copy ^ + "%PROCESSING_FOLDER%\%%~nF%SUFFIX%.mkv" + + REM Move converted file to Completed folder or back to original + if defined COMPLETED_FOLDER ( + move "%PROCESSING_FOLDER%\%%~nF%SUFFIX%.mkv" "%COMPLETED_FOLDER%\%%~nF%SUFFIX%.mkv" + set "TARGET_PATH=%COMPLETED_FOLDER%\%%~nF%SUFFIX%.mkv" + ) else ( + move "%PROCESSING_FOLDER%\%%~nF%SUFFIX%.mkv" "%%~dpF%%~nF%SUFFIX%.mkv" + set "TARGET_PATH=%%~dpF%%~nF%SUFFIX%.mkv" + ) + + echo Moved file to "!TARGET_PATH!" + + REM Confirm conversion succeeded before deleting originals + if exist "!TARGET_PATH!" ( + echo Conversion confirmed. Deleting original files... + del "%%F" + del "!INPUT_FILE!" + echo Originals deleted. + ) else ( + echo ERROR: Converted file not found. Skipping deletion of originals. + ) + echo ===================================================== + ) else ( + echo Skipping: %%~nxF (contains 'EHX' or 'MeGusta') + ) +) + +endlocal +pause