210 lines
6.7 KiB
Batchfile
210 lines
6.7 KiB
Batchfile
@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=32"
|
|
)
|
|
) 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 Detect audio bitrate & bucket to safe values
|
|
rem =========================
|
|
for /f "tokens=1,2,3 delims=," %%A in ('ffprobe -v error -select_streams a:0 -show_entries stream=index,channels,bit_rate -of csv=p=0 "%INPUT_FILE%"') do (
|
|
set "STREAM_INDEX=%%A"
|
|
set "STREAM_CHANNELS=%%B"
|
|
set /a "STREAM_BR=%%C/1000" rem kbps approx
|
|
|
|
if %%B==2 (
|
|
if !STREAM_BR! lss 80 (
|
|
set "AUDIO_BITRATE=64000"
|
|
) else if !STREAM_BR! lss 112 (
|
|
set "AUDIO_BITRATE=96000"
|
|
) else (
|
|
set "AUDIO_BITRATE=128000"
|
|
)
|
|
set "AUDIO_CHANNELS=2"
|
|
) else (
|
|
if !STREAM_BR! lss 176 (
|
|
set "AUDIO_BITRATE=160000"
|
|
) else (
|
|
set "AUDIO_BITRATE=192000"
|
|
)
|
|
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=128000"
|
|
if "!AUDIO_CHANNELS!"=="" set "AUDIO_CHANNELS=2"
|
|
|
|
set "LANGUAGE_TAG="
|
|
for /f "tokens=1,* delims==" %%A in ('ffprobe -v error -select_streams a:0 -show_entries stream_tags=language -of default=nokey=1:noprint_wrappers=1 "!INPUT_FILE!"') do (
|
|
set "LANGUAGE_TAG=%%A"
|
|
)
|
|
|
|
if "!LANGUAGE_TAG!"=="" (
|
|
set "LANGUAGE_METADATA=-metadata:s:a:0 language=eng"
|
|
) else (
|
|
set "LANGUAGE_METADATA="
|
|
)
|
|
|
|
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! !LANGUAGE_METADATA! -metadata:s:a:0 bit_rate=!AUDIO_BITRATE! ^
|
|
-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.
|
|
)
|
|
) else (
|
|
echo Skipping: %%~nxF (contains 'EHX' or 'MeGusta')
|
|
)
|
|
)
|
|
|
|
endlocal
|
|
pause
|