Update files

This commit is contained in:
Stian
2025-01-12 21:32:41 +01:00
parent b2dec79a81
commit da887c7a4c
8 changed files with 296 additions and 229 deletions
+83 -88
View File
@@ -2,8 +2,7 @@
:: Description: Video to GIF/APNG/WEBP converter
:: By: MDHEXT, Nabi KaramAliZadeh, Pathduck
:: Version: 6.0
:: Url: https://github.com/Pathduck/vid2ani/ forked from https://github.com/MDHEXT/video2gif
:: What this script is based on: http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html
:: Url: https://github.com/Pathduck/vid2ani/
:: License: GNU General Public License v3.0 (GPLv3)
:: Enable delayed variable expension
@@ -17,73 +16,69 @@ SET "YELLOW="
SET "BLUE="
SET "CYAN="
:: Clearing all variables
SET "scale="
SET "fps="
SET "mode="
SET "dither="
SET "bayerscale="
SET "filetype="
SET "start_time="
SET "end_time="
SET "webp_lossy="
SET "colormax="
SET "version="
SET "build="
SET "loglevel="
:: Checking for blank input or help commands
IF "%~1" == "" GOTO :help_message
IF "%~1" == "-?" GOTO :help_message
IF "%~1" == "/?" GOTO :help_message
IF "%~1" == "--help" GOTO :help_message
:: Check input
:: Assign input and output
SET input="%~1"
SET output=%~dpn1
:: Setting the path to the Working Directory
:: Validate input file
IF NOT EXIST %input% (
ECHO %RED%Input file not found: %input%%OFF%
GOTO :EOF
)
:: Setting the path to the working directory
SET WD=%TEMP%\VID2ANI
:: Checking for blank input or help commands
IF %input% == "" GOTO :help_message
IF %input% == "-?" GOTO :help_message
IF %input% == "/?" GOTO :help_message
IF %input% == "help" GOTO :help_message
IF %input% == "--help" GOTO :help_message
:: Clearing input vars and setting defaults
SET "fps=15"
SET "mode=1"
SET "dither=0"
SET "scale=-1"
SET "filetype=gif"
SET "webp_lossy="
SET "webp_lossy_def=75"
SET "loglevel=error"
SET "bayerscale="
SET "colormax="
SET "start_time="
SET "end_time="
SET "errorswitch="
SET "picswitch="
GOTO :varin
:varin
:: Using SHIFT command to go through the input and storing each setting into its own variable
IF NOT "%~1" =="" (
IF "%~1" =="-r" SET "scale=%~2" & SHIFT
IF "%~1" =="-f" SET "fps=%~2" & SHIFT
IF "%~1" =="-m" SET "mode=%~2" & SHIFT
IF "%~1" =="-d" SET "dither=%~2" & SHIFT
IF "%~1" =="-b" SET "bayerscale=%~2" & SHIFT
IF "%~1" =="-t" SET "filetype=%~2" & SHIFT
IF "%~1" =="-o" SET "output=%~dpn2" & SHIFT
IF "%~1" =="-t" SET "filetype=%~2" & SHIFT
IF "%~1" =="-r" SET "scale=%~2" & SHIFT
IF "%~1" =="-l" ( IF 1%2 NEQ +1%~2 ( SET "webp_lossy=%webp_lossy_def%"
) ELSE IF "%~2" == "" ( SET "webp_lossy=%webp_lossy_def%"
) ELSE ( SET "webp_lossy=%~2" & SHIFT )
)
IF "%~1" =="-f" SET "fps=%~2" & SHIFT
IF "%~1" =="-s" SET "start_time=%~2" & SHIFT
IF "%~1" =="-e" SET "end_time=%~2" & SHIFT
IF "%~1" =="-d" SET "dither=%~2" & SHIFT
IF "%~1" =="-b" SET "bayerscale=%~2" & SHIFT
IF "%~1" =="-m" SET "mode=%~2" & SHIFT
IF "%~1" =="-c" SET "colormax=%~2" & SHIFT
IF "%~1" =="-l" SET "webp_lossy=%~2" & SHIFT
IF "%~1" =="-v" SET "loglevel=%~2" & SHIFT
IF "%~1" =="-k" SET "errorswitch=1"
IF "%~1" =="-p" SET "picswitch=1"
SHIFT & GOTO :varin
)
GOTO :help_check_2
:help_check_2
:: Noob proofing the script to prevent it from breaking should critical settings not be defined
IF NOT DEFINED scale SET "scale=-1"
IF NOT DEFINED fps SET "fps=15"
IF NOT DEFINED mode SET "mode=1"
IF NOT DEFINED dither SET "dither=0"
IF NOT DEFINED filetype SET "filetype=gif"
IF NOT DEFINED loglevel SET "loglevel=error"
GOTO :safchek
:safchek
:: Setting a clear range of acceptable setting values and noob proofing bayerscale
:: Output file type
:: Validate output file extension
echo %filetype% | findstr /r "\<gif\> \<png\> \<apng\> \<webp\>" >nul
IF %errorlevel% NEQ 0 (
ECHO %RED%Not a valid file type: %filetype%%OFF%
@@ -95,19 +90,19 @@ IF "%filetype%"=="apng" SET "output=%output%.png"
IF "%filetype%"=="webp" SET "output=%output%.webp"
:: Validate Palettegen
IF %mode% GTR 3 (
IF !mode! GTR 3 (
ECHO %RED%Not a valid palettegen ^(-m^) mode%OFF%
GOTO :EOF
) ELSE IF %mode% LSS 1 (
) ELSE IF !%mode! LSS 1 (
ECHO %RED%Not a valid palettegen ^(-m^) mode%OFF%
GOTO :EOF
)
:: Validate Dithering
IF %dither% GTR 8 (
IF !dither! GTR 8 (
ECHO %RED%Not a valid dither ^(-d^) algorithm %OFF%
GOTO :EOF
) ELSE IF %dither% LSS 0 (
) ELSE IF !dither! LSS 0 (
ECHO %RED%Not a valid dither ^(-d^) algorithm%OFF%
GOTO :EOF
)
@@ -121,7 +116,7 @@ IF DEFINED bayerscale (
ECHO %RED%Not a valid bayerscale ^(-b^) value%OFF%
GOTO :EOF
)
IF %dither% NEQ 1 (
IF !dither! NEQ 1 (
IF !bayerscale! LEQ 5 (
ECHO %RED%Bayerscale ^(-b^) only works with Bayer dithering%OFF%
GOTO :EOF
@@ -151,8 +146,8 @@ IF DEFINED start_time (
GOTO :EOF
)
)
IF NOT DEFINED start_time (
IF DEFINED end_time (
IF DEFINED end_time (
IF NOT DEFINED start_time (
ECHO %RED%Please input the start time ^(-s^)%OFF%
GOTO :EOF
)
@@ -168,11 +163,11 @@ IF DEFINED fps (
:: Validate Max Colors
IF DEFINED colormax (
IF !colormax! LSS 3 (
IF !colormax! GTR 256 (
ECHO %RED%Max colors ^(-c^) must be between 3 and 256.%OFF%
GOTO :EOF
)
IF !colormax! GTR 256 (
IF !colormax! LSS 3 (
ECHO %RED%Max colors ^(-c^) must be between 3 and 256.%OFF%
GOTO :EOF
)
@@ -204,21 +199,21 @@ SET filters=fps=%fps%,scale=%scale%:-1:flags=lanczos
:: APNG muxer does not support multiple palettes so fallback to using palettegen diff mode
IF "%filetype%"=="apng" (
IF %mode% EQU 2 (
IF !mode! EQU 2 (
ECHO %YELLOW%APNG does not support multiple palettes - falling back to Palettegen mode 1 ^(diff^)%OFF%
SET mode=1
)
)
:: Palettegen encode mode
IF %mode% EQU 1 SET "encode=palettegen=stats_mode=diff"
IF %mode% EQU 2 SET "encode=palettegen=stats_mode=single"
IF %mode% EQU 3 SET "encode=palettegen"
IF !mode! EQU 1 SET "encode=palettegen=stats_mode=diff"
IF !mode! EQU 2 SET "encode=palettegen=stats_mode=single"
IF !mode! EQU 3 SET "encode=palettegen"
:: Max colors
IF DEFINED colormax (
IF %mode% LEQ 2 SET "mcol=:max_colors=%colormax%"
IF %mode% EQU 3 SET "mcol==max_colors=%colormax%"
IF !mode! LEQ 2 SET "mcol=:max_colors=%colormax%"
IF !mode! EQU 3 SET "mcol==max_colors=%colormax%"
)
:: Executing command to generate palette
@@ -228,37 +223,37 @@ ffmpeg -v %loglevel% %trim% -i %input% -vf "%filters%,%encode%%mcol%" -y "%palet
:: Checking if the palette file is in the Working Directory, if not cleaning up
IF NOT EXIST "%WD%\palette_00001.png" (
ECHO %RED%Failed to generate palette file%OFF%
ECHO %RED%Palette generation failed: %palette% not found.%OFF%
GOTO :cleanup
)
:: Setting variables to put the encode command together
:: Palettegen decode mode
IF %mode% EQU 1 SET "decode=paletteuse"
IF %mode% EQU 2 SET "decode=paletteuse=new=1"
IF %mode% EQU 3 SET "decode=paletteuse"
IF !mode! EQU 1 SET "decode=paletteuse"
IF !mode! EQU 2 SET "decode=paletteuse=new=1"
IF !mode! EQU 3 SET "decode=paletteuse"
:: Error diffusion
IF DEFINED errorswitch (
IF %mode% EQU 1 SET "errordiff==diff_mode=rectangle"
IF %mode% EQU 2 SET "errordiff=:diff_mode=rectangle"
IF %mode% EQU 3 SET "errordiff==diff_mode=rectangle"
IF !mode! EQU 1 SET "errordiff==diff_mode=rectangle"
IF !mode! EQU 2 SET "errordiff=:diff_mode=rectangle"
IF !mode! EQU 3 SET "errordiff==diff_mode=rectangle"
)
:: Prepare dithering and encoding options
IF %dither% EQU 0 SET "ditheralg=none"
IF %dither% EQU 1 SET "ditheralg=bayer"
IF %dither% EQU 2 SET "ditheralg=heckbert"
IF %dither% EQU 3 SET "ditheralg=floyd_steinberg"
IF %dither% EQU 4 SET "ditheralg=sierra2"
IF %dither% EQU 5 SET "ditheralg=sierra2_4a"
IF %dither% EQU 6 SET "ditheralg=sierra3"
IF %dither% EQU 7 SET "ditheralg=burkes"
IF %dither% EQU 8 SET "ditheralg=atkinson"
IF !dither! EQU 0 SET "ditheralg=none"
IF !dither! EQU 1 SET "ditheralg=bayer"
IF !dither! EQU 2 SET "ditheralg=heckbert"
IF !dither! EQU 3 SET "ditheralg=floyd_steinberg"
IF !dither! EQU 4 SET "ditheralg=sierra2"
IF !dither! EQU 5 SET "ditheralg=sierra2_4a"
IF !dither! EQU 6 SET "ditheralg=sierra3"
IF !dither! EQU 7 SET "ditheralg=burkes"
IF !dither! EQU 8 SET "ditheralg=atkinson"
:: Paletteuse error diffusion
IF NOT %mode% EQU 2 (
IF NOT !mode! EQU 2 (
IF DEFINED errorswitch SET "ditherenc=:dither=!ditheralg!"
IF NOT DEFINED errorswitch SET "ditherenc==dither=!ditheralg!"
) ELSE SET "ditherenc=:dither=!ditheralg!"
@@ -281,11 +276,11 @@ ffmpeg -v %loglevel% %trim% -i %input% -thread_queue_size 512 -i "%palette%" -la
:: Checking if file was created and cleaning up if not
IF NOT EXIST "%output%" (
ECHO %RED%Failed to generate animation%OFF%
ECHO %RED%Failed to generate animation: %output% not found.%OFF%
GOTO :cleanup
)
:: Starting default Photo Viewer
:: Open output file if picswitch is set
IF DEFINED picswitch START "" "%output%"
:cleanup
@@ -306,22 +301,22 @@ ECHO %GREEN%Usage:%OFF%
ECHO %~nx0 [input_file] [arguments]
ECHO:
ECHO %GREEN%Arguments:%OFF%
ECHO -o Output file. Default is the same as input file, sans extension.
ECHO -t Output file type. Valid: 'gif' (default), 'apng', 'png', 'webp'.
ECHO -o Output file. The default is the same name as the input video.
ECHO -r Scale or size. Width of the animation in pixels.
ECHO -l Enable lossy WebP compression and quality. Range 0-100, default 75.
ECHO -f Framerate in frames per seconds, default 15.
ECHO -s Start time of the animation (HH:MM:SS.MS).
ECHO -e End time of the animation (HH:MM:SS.MS).
ECHO -f Framerate in frames per second (default: 15).
ECHO -d Dithering algorithm to be used (default: 0).
ECHO -b Bayer Scale setting. Range 0 - 5 (default: 2).
ECHO -m Palettegen mode: 1 (diff), 2 (single), 3 (full) (default: 1).
ECHO -c Maximum colors usable per palette. Range 3 - 256 (default).
ECHO -d Dithering algorithm to be used, default 0.
ECHO -b Bayer Scale setting. Range 0-5, default 2.
ECHO -m Palettegen mode: 1 (diff), 2 (single), 3 (full), default 1.
ECHO -c Maximum colors usable per palette. Range 3-256 (default).
ECHO -k Enables paletteuse error diffusion.
ECHO -l Enable lossy WebP compression and quality. Range 0 - 100.
ECHO -p Opens the resulting animation in the default image viewer.
ECHO -v Set FFmpeg log level (default: error).
ECHO -p Opens the resulting animation in the default viewer.
ECHO:
ECHO %GREEN%Dithering Mode%OFF%
ECHO %GREEN%Dithering Algorithms%OFF%
ECHO 0: None
ECHO 1: Bayer
ECHO 2: Heckbert