Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
@echo off SetLocal EnableDelayedExpansion set title1=Convert to GIF title %title1% if "%~1"=="" ( echo ERROR: NO INPUT & echo & pause & goto :eof ) else ( title %title1%^: "%~nx1") :: you can override exe paths here. for example, set "ffmpeg=C:\ffmpeg\bin\ffmpeg.exe" set "ffmpeg=ffmpeg.exe" :: only these file extensions will be processed by the script set supported_formats=avi,bik,flv,m2ts,m4p,m4v,mkv,mov,mp2,mp4,mpg,mpeg,mpe,mpv,mts,qt,swf,wmv,xmf,webm :: optional default subfolder to output to. for example, set "subfolder=converted" set subfolder= :CheckFFMPEG if not exist "%ffmpeg%" ( if exist "%~dp0ffmpeg.exe" set "ffmpeg=%~dp0ffmpeg.exe" & goto :CheckFFPROBE ffmpeg.exe>nul 2>&1 if !errorlevel!==9009 CALL :PrintMessage "ERROR: FFMPEG NOT FOUND / INSTALLED. EXITING." & echo & pause & goto :eof ) :CountFiles :: count files set total=0 for %%F in (%*) do ( if not "%%~xF"=="" ( for %%A in (%supported_formats%) do ( if /i %%~xF==.%%A set /a total=!total!+1 ) ) ) if %total%==0 echo & CALL :PrintMessage "NO FILES TO PROCESS" "EXITING" & pause>nul & goto :eof if %total% GTR 1 title %title1%^: %total% files :Resize if defined width goto :FrameRate set width= echo. set /p width="resize (width) = " if not "!width!"=="" ( set "width=!width: =!" for /f "delims=1234567890" %%A in ('echo !width!') do ( echo invalid number & goto :Resize ) if !width! LSS 5 echo invalid number & goto :Resize ) :FrameRate if defined framerate goto :ConformFilters set frate= echo. set /p frate="framerate = " if not "!frate!"=="" ( set "frate=!frate: =!" for /f "delims=1234567890" %%A in ('echo !frate!') do ( echo invalid number & goto :FrameRate) if !frate! LSS 1 echo invalid number & goto :FrameRate set "newframerate=!frate!" ) :ConformFilters if not "!width!"=="" set filters=scale='min(!width!,iw)':-1:flags=lanczos if not "!newframerate!"=="" ( if "!filters!"=="" ( set filters=fps=!newframerate!) else ( set filters=!filters!,fps=!newframerate!)) if not "!filters!"=="" ( set filters=-vf "!filters!,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse") else ( set filters=-vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse") :BatchProcess set current= for %%F in (%*) do ( if not "%%~xF"=="" ( for %%A in (%supported_formats%) do ( if /i %%~xF==.%%A CALL :ProcessFile "%~1") ) ) title Finished goto :eof :: MAIN ROUTINE :ProcessFile if "!current!"=="" ( set current=1) else ( set /a current=!current!+1) if %total% GTR 1 set "ratio= !current!/!total!" title %title1%^:!ratio! "%~nx1" if not "%cd%\"=="%~dp1" cd /d "%~dp1" :Add_Postfix if exist "%~n1.gif" ( for /L %%N in (1,1,1000) do ( if not exist "%~n1_%%N.gif" ( set "postfix=_%%N" & goto :FFmpeg) ) ) :FFmpeg "%ffmpeg%" -i "%~1" -an !filters! "%~n1!postfix!.gif" if not !errorlevel!==0 CALL :ErrorSubroutine "!outpath!%~n1%suffix%!postfix!.%ext%" goto :eof :: if output file is empty, deletes it. prints some messages. stores goterror var. :ErrorSubroutine if "%~z1"=="0" del %1 & ( echo & echo ERROR: FILE OUTPUT FAILED & echo.) set goterror=true pause goto :eof :: UTILITIES :PrintMessage echo. echo --------------------------------------------------------------- echo %~1 if not "%~2"=="" echo %~2 if not "%~3"=="" echo %~3 if not "%~4"=="" echo %~4 echo --------------------------------------------------------------- goto :eof
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)