1iJaCk icon

ffmpeg_gifme.bat

1iJaCk | PRO | 03/19/17 03:00:12 PM UTC | 0 ⭐ | 333 👁️ | Never ⏰ | []
Batch |

25.3 KB

|

None

|

0 👍

/

0 👎

:: by JaCk | DevStable 08/21/2017| https://pastebin.com/JGL83SM8 | ffmpeg_gifme.bat --- Creates a palette file from input file, then proceeds to generate a gif file with the same name as input file.
::
:: Based on command: ffmpeg -an -sn -ss 01:30 -i "video.mkv" -i "%temp%\fgme_palette.png" -vf "select='not(mod(n,60))',setpts='N/17/TB',scale=-1:360" -r 2/3 -y "out.gif"
::
::  Over-Engineered Mauch? Naw... *waves jedi/witcher hand signs* There is no script...   
::  Its ugly? You Dont say... Even a mother loves her ugly-ass turdling.
::
@echo off && setlocal EnableDelayedExpansion && (for /f "tokens=1 delims==" %%a in ('set fgme_') do set "%%a=") 2>nul 1>nul
 
:: Setting Script Parameters to Variables 
set "fgme_input_file=%~1"
set "fgme_output_file=%~2"
set "fgme_palette_file=%~3"
 
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 ::::::                                                                ::::::
  ::::                        Development Version                       ::::
  ::::                       USE AT YOUR OWN RISK                       ::::
 ::::::                                                                ::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
 
:::::::::::::::::::::::::::::::::::::::
:::                                 :::
::             User Vars             ::
::           User Settings           ::
:::                                 :::
:::::::::::::::::::::::::::::::::::::::
 
:: Hard Coded User Settings 
:: - if Not Set, script will prompt
set "fgme_start_time=01:30"         rem :: Default: 01:30 --- Description: starting time offset - ffmpeg will skip this duration before processing
set "fgme_duration_rate=2/3"        rem :: Default:   2/3 --- Description: Total duration of each frame in the gif that is to be created
set "fgme_scale_image_base=360"     rem :: Default:   360 --- Description: base width of the output file -- Height will be auto-magiclly calculated 
set "fgme_input_filev="             rem :: Default:       --- Description: when defined, it uses this filename AND its location when specified; when location is unspecified uses cd. Params DO NOT overset var
set "fgme_output_filev="            rem :: Default:       --- Description: when defined, it uses this filename AND its location when specified; when location is unspecified uses cd. Params DO NOT overset var
set "fgme_palette_filev="           rem :: Default:       --- Description: when defined, it uses this filename AND its location when specified; when location is unspecified uses cd. Params DO NOT overset var
 
::::::::::::::::::  :::::::::::::::::::
::::::                           ::::::
:::::::::::::::: :::: :::::::::::::::::
 
 
 
:::::::::::::::::::::::::::::::::::::::
:::                                 :::
::            Script Vars            ::
::          Script Settings          ::
:::                                 :::
:::::::::::::::::::::::::::::::::::::::
 
:: Notes on Usage
::  -Default: Not Set --- This means that the default setting was/is: empty, blank, null, nil, undefined
::  -Default: false; Type: Boolean  --- When var is undefined it is still [false]. Being undefined, the boolean function will consider it [false]
::  -Type: Boolean --- No matter how long the string is, only first character is used to determine setting [t/a/p/y/1/def] or [f/und/n/0/nul].  When first character is a white space, then it is considered false/NotSet.
::     False States:  [undefined]   : no; false; 0; 
::     True States: [defined=>true] : yes; true; 1; pass; 
::
 
 
rem :: Default: Not Set --- Type: String  --- Required: Optional :: Description: output location of the palette file. When set, uses set directory name.  When unset, uses %temp%.  Relative paths are relative to the video file.  Absolute paths, are absolute/fully-qualified
set "fgme_palette_dir=palette\"
 
rem :: Default: Not Set --- Type: String  --- Required: Optional :: Description: when set, uses set file name.  When unset, uses: video-filename.png
set "fgme_palette_name="
 
rem :: Default: false   --- Type: Boolean --- Required: Optional :: Description: when true, palette file is not deleted after use.
set "fgme_keep_palette=true"
 
rem :: Default: true    --- Type: Boolean --- Required: Optional :: Description: Increases the rate value ten-fold to increase creation.
set "fgme_fast_palette=true"
 
rem :: Default: false   --- Type: Boolean --- Required: Optional :: Description: makes sure not to overwrite already created files
set "fgme_wfilelock_bool="
 
rem Default: Not Set    --- Type: String  --- Required: Optional :: Description: base filters, the image-scaling will be appended to this var further down this script - [scale=-1:!fgme_scale_image_base!:flags=lanczos]
set "fgme_filters="
 
rem Default: Not Set    --- Type: String  --- Required: Optional :: Description: specific settings for ffmpeg gif muxer
rem Accepts:
rem    -loop         0  --- Number of times to loop the output: -1 - no loop, 0 - infinite loop. From -1 to 65535
rem    -final_delay -1  --- Force delay, in centiseconds, after the last frame. From -1 to 65535
set "fgme_ffmpeg_gifOpt="
 
rem :: Default: true    --- Type: Boolean --- Required: Optional :: Description: when true, line numbers will be dumped for debug messages.
set "fgme_debug_dline=true"
 
::::::::::::::::::  :::::::::::::::::::
::::::                           ::::::
:::::::::::::::: :::: :::::::::::::::::
 
 
 
:::::::::::::::::::::::::::::::::::::::
:::                                 :::
::          Prompt for input         ::
:::                                 :::
:::::::::::::::::::::::::::::::::::::::
 
:: Input the dam file... please
if defined fgme_input_filev if not defined fgme_input_file set "fgme_input_file=!fgme_input_filev!"
 
if not defined fgme_input_file call :func_get_user_input "fgme_input_file" "Input: Enter Video file [and relative path if needed]"
 
if not exist "!fgme_input_file!" (
    echo/ Error: Unable to locate Input file !fgme_input_file!
    goto :eof
)
 
 
:: drop the out file on the var... NOW
if not defined fgme_output_file if defined fgme_output_filev (
    set "fgme_output_file=!fgme_output_filev!"
) else (
    call :func_get_user_input fgme_output_file "Input: Enter Output file name [and outpath path if needed]"
    if defined fgme_output_file set "fgme_output_file=!fgme_output_file:"=!"
    echo/
)
 
 
:: I hope this palette is to you palettes liking  -- Making the external, internal
if defined fgme_palette_filev if not defined fgme_palette_file set "fgme_palette_file=!fgme_palette_filev!"
if defined fgme_palette_file for %%P in ("!fgme_palette_file!") do (
    set "fgme_palette_dir=%%~dpP"
    set "fgme_palette_name=%%~nxP"
    if "%%~xP" equ "" set "fgme_palette_name=%%~nP.png"
)
 
 
:: Did someone order a pallet of palettes -- oh well, to temp you go...
rem If we created the dir successfully then set remove bool
if defined fgme_palette_dir (
    if not exist "!fgme_palette_dir!" (
        echo/    Info: Creating dir: "!fgme_palette_dir!"
        
        mkdir "!fgme_palette_dir!"
        if !errorlevel! equ 0 if not defined fgme_keep_palette (
            set "fgme_dpalette_dir=true"
        )
    )
) else (
    set "fgme_palette_dir=%temp%"
    set "fgme_dpalette_dir="
)
 
 
 
if defined fgme_palette_name (
    set "fgme_palette=!fgme_palette_dir!\!fgme_palette_name!"
) else (
    for /f "tokens=1* delims=" %%z in ("!fgme_input_file!") do (
        if "%%~n" neq "" (
            set "fgme_palette_name=%%~nz.png"
            set "fgme_palette=!fgme_palette_dir!\!fgme_palette_name!"
        )
    )
)
 
 
:: out from in -- maybe
if not defined fgme_output_file (
    for /f "tokens=1* delims=" %%z in ("!fgme_input_file!") do (
        if "%%~n" neq "" set "fgme_output_file=%%~dpnz.gif"
    )
    
    if defined fgme_output_file (
        echo/
        echo/ - Info: Self Defined Output File name: !fgme_output_file!
        echo/
    ) else (
        echo/
        echo/ - Error: Unble to auto define Output file and one has not been defined
        echo/
        goto :eof
    )
)
 
:: Strip path to just the name to print purdy
:: Verify extension is gif
for /f "tokens=1* delims=" %%Z in ("!fgme_output_file!") do (
    if "%%~xZ" neq ".gif" (
        set "fgme_output_fname=%%~nxZ.gif"
        set "fgme_output_file=%%~Z.gif"
    ) else (
        set "fgme_output_fname=%%~nZ.gif"
    )
)
 
if not defined fgme_output_fname set "fgme_output_fname=!fgme_output_file!"
 
 
:: Over-Right [unlike over-left]
if exist "!fgme_output_file!" (
    echo/
    echo/
    echo/ - Warning: File Already Exits
 
    if not defined fgme_wfilelock_bool (
        call :func_get_bool_input "fgme_wfile_bool" "Input: User: Overwrite file [Yes/No]" "No"
        if not defined fgme_wfile_bool goto :eof
    ) else (
        set "fgme_wfile_bool="
        goto :eof
    )
)
 
:: Skip to time
if not defined fgme_start_time (
    echo/
    echo/
    call :func_get_user_input fgme_start_time  "Input: Optional: Enter the time capture starting point of video"   "01:30"
)
 
:: fgme_duration_rate of gif
if not defined fgme_duration_rate (
    echo/
    echo/
    call :func_get_user_input fgme_duration_rate  "Input: Optional: Enter the desired duration for the gif"   2/3
)
 
:: Filter Setttings
if not defined fgme_scale_image_base (
    echo/
    echo/
    call :func_get_user_input fgme_scale_image_base "Input: Optional: Enter the desired scale base [123,360,480,720,etc]"   360
)
 
 
::::::::::::::::::  :::::::::::::::::::
::::::                           ::::::
:::::::::::::::: :::: :::::::::::::::::
 
:: give it some lazlow and we are gtg
if defined fgme_filters (
    set "fgme_filters=!fgme_filters!,select='not(mod(n,60))',setpts='N/17/TB',scale=-1:!fgme_scale_image_base!:flags=lanczos"
) else (
    set "fgme_filters=select='not(mod(n,60))',setpts='N/17/TB',scale=-1:!fgme_scale_image_base!:flags=lanczos"
)
 
 
:::::::::::::::::::::::::::::::::::::::
:::                                 :::
::     tyme fowda EphEphEm-Paegg     ::
:::                                 :::
:::::::::::::::::::::::::::::::::::::::
 
 
:: Call ffmpeg to do teh magic
:: Palette and gif File Creation
if exist "!fgme_output_file!" (
    if defined fgme_wfile_bool (
        call :func_set_sstime 5 60
 
        if not exist "!fgme_palette!" (
            call :func_ffm_palette
        )
        
        if exist "!fgme_palette!" (
            call :func_ffm_pfsrc_gfout
        ) else (
            call :func_ffm_nopf_gfout
        )
    )
) else (
    call :func_set_sstime 5 60
    
    if not exist "!fgme_palette!" (
        call :func_ffm_palette
    )
    
    if exist "!fgme_palette!" (
        call :func_ffm_pfsrc_gfout
    ) else (
        call :func_ffm_nopf_gfout
    )
)
 
 
:: k, thnx, bai
if not defined fgme_keep_palette del /q /f "!fgme_palette!"
 
if defined fgme_dpalette_dir del /q /f "!fgme_palette_dir!"
 
::::::::::::::::::  :::::::::::::::::::
::::::                           ::::::
:::::::::::::::: :::: :::::::::::::::::
 
:::::::::::::::::::::::::::::::::::::::
::                                   ::
::        Fin-Finito                 ::
::                                   ::
:::::::::::::::::::::::::::::::::::::::
 
(for /f "tokens=1 delims==" %%a in ('set fgme_') do set "%%a=") 2>nul 1>nul
endlocal
goto :eof
 
::::::::::::::::::  :::::::::::::::::::
::::::                           ::::::
:::::::::::::::: :::: :::::::::::::::::
 
:::::::::::::::::::::::::::::::::::::::
::                                   ::
::         Functions                 ::
::                                   ::
:::::::::::::::::::::::::::::::::::::::
 
 
 
rem Parses through this script and looks for the line numbers containing uniqueParseMessage, such as the call to the/a function
rem   When function encounters an error, it will clear the variable fgme_debug_line 
rem   When function is called without a uniqueParseMessage, it will clear the variable fgme_debug_line and leave function
 
:: Usage: func_dump_debug_line    uniqueParseMessage
:func_dump_debug_line
if "%~1" equ "" (
    set "fgme_debug_line="
    goto :eof
)
 
set "fgme_debug_line="
for /f "eol=- tokens=1 delims=[]" %%a in ('find /N %* "%~dpnx0"') do (
    if "%%~a" neq "" if defined fgme_debug_line (
        set "fgme_debug_line=!fgme_debug_line!,%%a"
    ) else (
        set "fgme_debug_line=%%a"
    )
)
 
goto :eof
 
 
 
rem Prints messages from params 1 and 2 and dumps all script vars if param 3 is undef
rem  Examples -
rem    To dump all vars and not print other messages --
rem      func   "" ""
 
rem    To print MsgHeader and MsgText without dumping Vars --
rem      func   "INIT: " "Errorlevel is !errorlevel!"  0
       
rem    To print MsgText and dump all vars --
rem      func   "get_fduration all vars"
 
:: Usage :: func_dump_debug_msg  MsgTextORHeaderText-Optional   MsgText-Optional   doNotDumpVarsFlag-Optional
:func_dump_debug_msg
if "%~3" equ "" if "%~1" equ "" goto :eof
 
if "%~1" neq "" (
    if defined fgme_debug_dline (
        call :func_dump_debug_line %*
    )
)
    
if "%~1" neq "" (
    if defined fgme_debug_line (
        echo/    Debug: Line: [!fgme_debug_line!]: %~1%~2 
    ) else (
        echo/    Debug: %~1%~2 
    )
)
 
if "%~3" equ "" (
    if defined fgme_debug_line (
        call :func_dump_debug_vars "!fgme_debug_line!: "
    ) else (
        call :func_dump_debug_vars " "
    )
)
 
goto :eof
 
 
:: Usage :: func_dump_debug_vars   MsgOrHeaderText-Optional
:func_dump_debug_vars
set "_varCnt=0"
 
for /f "tokens=1,* delims==" %%a in ('set fgme_ ') do (
    if "%%~a" neq "" (
        set /a "_varCnt+=1"
        echo/    Debug: %~1Variable[!_varCnt!]: [%%~a]: [%%~b]
    )
)
 
for /f "tokens=1,* delims==" %%a in ('set _fgme_') do (
    if "%%~a" neq "" (
        set /a "_varCnt+=1"
        echo/    Debug: %~1Variable[!_varCnt!]: [%%~a]: [%%~b]
    )
)
 
set "_varCnt="
goto :eof
 
 
 
rem  Prompts User for input
rem    Quoted parameters optional, double-quotes will be dropped regardless, White-spaces ignored between params
rem    Example usage: 
rem      func   varUserFeedback   "Input: User: Did you like %~nx0"   "N/A"
  
:: Usage :: func_get_user_input  returnVar   msgText-Optional   defaultResponse-Optional
:func_get_user_input
if "%~1" equ "" (
    goto :eof
)
 
if "%~2" neq "" (
    echo/ %~2
)
 
if "%~3" neq "" (
    echo/   [Default: %~3]
    set "%~1=%~3"
)
 
set /p "%~1= ~> "
 
goto :eof
 
 
 
rem  Prompts User for input, then calls func_bool_bistate to check booleans, returns 'true' otherwise unsets returnVar
rem    Quoted parameters optional, double-quotes will be dropped regardless, White-spaces ignored between params
rem    Example usage: 
rem      func   boolUserFileOverwrite    "Input: User: Overwrite file Yes/No"   "No"
 
:: Usage :: func_get_bool_input  returnVar   msgText-Optional   defaultResponse-Optional
:func_get_bool_input
if "%~1" equ "" goto :eof
if "%~2" neq "" echo/ %~2
if "%~3" neq "" echo/   [Default: %~3]
 
set /p "%~1= -> "
 
if not defined %~1 set "%~1=%~3"
 
if "!%~1:~0,1!" equ "" (set "%~1=")
if "!%~1:~0,1!" equ "1" (set "%~1=true") 
if /i "!%~1:~0,1!" equ "y" (set "%~1=true")
if /i "!%~1:~0,1!" equ "p" (set "%~1=true")
if /i "!%~1:~0,1!" equ "a" (set "%~1=true") 
if /i "!%~1:~0,1!" equ "t" (set "%~1=true") else (set "%~1=")
 
goto :eof
 
 
 
rem Gets video duration from file using ffmpeg
rem  Note - when encountering errors sets returnVar to 0
rem  Note - when function is called incorrectly does not set vars and leave func
rem  Note - Returns returnVar rounded to the nearest second
 
:: Usage :: func_get_fduration returnVar "videoFile.ext"
:func_get_fduration
if "%~1" equ "" (goto :eof)
if "%~2" equ "" (goto :eof)
 
for /f "tokens=2 delims=, " %%d in ('call ffmpeg -i "%~2" 2^>^&1 ^| findstr /c:"Duration: "') do set "%~1=%%~d"
 
rem var will cause problems if unset
if "!%~1!" equ "" (
    set "%~1=0"
    goto :eof
)
 
rem strip out trailing zeros for batch calc not to confuse octal vs decimal
set "%~1=!%~1::0=:!"
 
for /f "tokens=1-4 delims=:." %%a in ("!%~1!") do (
    set "%~1=0"
    if "%%~a" neq "" (
        if %%a gtr 0 set /a "%~1+=%%~a * 3600"
        if %%b gtr 0 set /a "%~1+=%%~b * 60"
        if %%c gtr 0 set /a "%~1+=%%~c"
        if %%~d geq 50 set /a "%~1+=1"
    )
)
 
goto :eof
 
 
 
rem From param2-sendTime, Returns param1-returnVar in seconds
rem  Note - when encountering errors sets returnVar to 0
rem  Note - when function is called incorrectly does not set vars and leave func
rem  Note - Returns returnVar rounded to the nearest second
rem  Accepted notations -
rem   HH:MM:SS.MS 
rem   HH:MM:SS
rem   MM:SS.MS
rem   MM:SS
rem   SS.MS
rem   SS
rem 
rem  Examples -
rem    func  "DurationInSecs" "01:11:54.71"
rem    func  "DurationInSecs" "23:15.11"
rem    func  "DurationInSecs" "11:55"
rem    func  "DurationInSecs" "1.85"
 
:: Usage :: func_get_secs_duration returnVar  sendTime
:func_get_secs_duration
if "%~1" equ "" goto :eof
if "%~2" equ "" goto :eof
 
for /f "tokens=1,2 delims=." %%A in ("%~2") do (
    set "%~1=0"
 
    if "%%~B" equ "" if "%%~A" neq "" (
        for /f "tokens=1,2,3 delims=:" %%a in ("%%A") do (
            if "%%~c" equ "" if "%%~b" equ "" if "%%~a" neq "" (
                set /a "%~1+=%%~a"
            )
 
            if "%%~c" equ "" if "%%~b" neq "" (
                set /a "%~1+=%%~a * 60"
                set /a "%~1+=%%~b"
            )
 
            if "%%~c" neq "" (
                set /a "%~1+=%%~a * 3600"
                set /a "%~1+=%%~b * 60"
                set /a "%~1+=%%~c"
            )
        )
    )
    
    if "%%~B" neq "" if %%~B geq 50 (
        set /a "%~1+=1"
    )
) 2>nul
 
if "!%~1!" equ "" (
    set "%~1=0"
)
 
goto :eof
 
 
rem From param2-sendTime, Returns param1-returnVar in HH:MM:SS notation
rem  Note - Checks input validity except when param1 is missing
rem  Note - when encountering errors sets returnVar to 00:00:00
rem  Note - when function is called incorrectly does not set vars and leave func
rem   Example --- func  "varDuration" "6430"
 
rem func_get_time_from_secs returnVar  sendTime
:func_get_time_from_secs
if "%~1" equ "" (goto :eof)
 
if "%~2" equ "" (
    set "%~1=00:00:00"
    goto :eof
)
 
set /a "%~2*=1" 2>nul
if !errorlevel! neq 0 (
    set "%~1=00:00:00"
    goto :eof
)
 
if not %~2 gtr 0 (
    set "%~1=00:00:00"
    goto :eof
)
 
rem calc and pad/strip zeros
if %~2 lss 60 (
    set "%~1=00:00:%~2"
) else (
    set /a "_%~1h=%~2/3600"
    set /a "_%~1m=(%~2 - (!_%~1h! * 3600))/60"
    set /a "_%~1s=(%~2 - (!_%~1m! * 60) - (!_%~1h! * 3600))"
 
    if "!_%~1h:~0,2!" equ "!_%~1h!" (
        set "_%~1h=00!_%~1h!"
        set "_%~1h=!_%~1h:~-2!
    )
    set "_%~1m=00!_%~1m!"
    set "_%~1s=00!
 
    set "%~1=!_%~1h!:!_%~1m:~-2!:!_%~1s:~-2!"
 
    set "_%~1h="
    set "_%~1m="
    set "_%~1s="
)
 
 
if "!%~1!" equ "" set "%~1=00:00:00"
 
goto :eof
 
 
 
rem  Checks to see if the value is "t","a","p","y" or "1" and sets returBoolVar to "true" 
rem  Otherwise, unsets the var
rem  Case is ignored and White-spaces ignored between params
rem    Optional - Double Quoted parameters - double-quotes will be dropped regardless, 
rem    Optional - Un-setting the var - var will be overwritten except when param1 is missing
rem    Optional - Un/Pre-setting the var - param1s value can be passed as param2 - "setTestValue-Optional"
rem             - When param2 is defined - before param1 is evaluated - overwrites/sets param1 with param2
rem    Example usage: 
rem      func  flag_overwrite   "true"
rem      func  flag_disable_state
 
rem func_bool_bistate  returBoolVar   setTestValue-Optional
:func_bool_bistate
if "%~1" equ "" (goto :eof)
 
if "%~2" neq "" (set "%~1=%~2")
 
if "!%~1:~0,1!" equ "1" (set "%~1=true") 
if /i "!%~1:~0,1!" equ "y" (set "%~1=true")
if /i "!%~1:~0,1!" equ "p" (set "%~1=true")
if /i "!%~1:~0,1!" equ "a" (set "%~1=true") 
if /i "!%~1:~0,1!" equ "t" (set "%~1=true") else (set "%~1=")
 
goto :eof
 
 
 
rem  Checks to see if the value is "t","a","p","y" or "1" and sets returBoolVar to "true" 
rem  Checks to see if the value is "f","n" or "0" and sets returBoolVar to "false" 
rem  Otherwise, unsets the var
rem  Case is ignored and White-spaces ignored between params
rem    Optional - Double Quoted parameters - double-quotes will be dropped regardless, 
rem    Optional - Un-setting the var - var will be overwritten except when param1 is missing
rem    Optional - Un/Pre-setting the var - param1s value can be passed as param2 - "setTestValue-Optional"
rem    Example usage: 
rem      func  check_machine_status   false
rem      func     true
 
rem func_bool_tristate  returBoolVar   setTestValue-Optional
:func_bool_tristate
if "%~1" equ "" (goto :eof)
 
if "%~2" neq "" (set "%~1=%~2")
 
if "!%~1:~0,1!" equ "0" (set "%~1=false")
if /i "!%~1:~0,1!" equ "n" (set "%~1=false")
if /i "!%~1:~0,1!" equ "f" (set "%~1=false"
goto :eof)
 
if "!%~1:~0,1!" equ "1" (set "%~1=true")
if /i "!%~1:~0,1!" equ "y" (set "%~1=true")
if /i "!%~1:~0,1!" equ "p" (set "%~1=true")
if /i "!%~1:~0,1!" equ "a" (set "%~1=true")
if /i "!%~1:~0,1!" equ "t" (set "%~1=true"
goto :eof) else (set "%~1=")
 
goto :eof
 
 
 
rem  Cleans up MSOffice AutoFsckYou character swaps when coppie/pasta and etc.
rem    Example usage:
rem      func   "UserInputVar"
 
rem func_fix_funky_chars   Send-Return-var
:func_fix_funky_chars
if "%~1" equ "" goto :eof
 
if "!%~1:   = !" neq "!%~1!" (
    set "%~1=!%~1:  = !"
    )
if "!%~1:–=-!" neq "!%~1!" (
    set "%~1=!%~1:–=-!"
    )
if "!%~1:“="!" neq "!%~1!" (
    set "%~1=!%~1:“="!"
    )
if "!%~1:”="!" neq "!%~1!" (
    set "%~1=!%~1:”="!"
    )
 
goto :eof
 
 
rem Gets, checks and compares Skip_Start_Time with Total_File_Duration.  
rem When total is less than start+Pad, sets start to 1 or newTime-Optional
rem  Example -- func 5 60
rem  Example -- func "" 90
 
rem func_set_sstime newTime-Optional  padTimeSecs-Optional
:func_set_sstime
call :func_get_fduration "_fgme_fdur" "!fgme_input_file!"
call :func_get_secs_duration "_fgme_stm" "!fgme_start_time!"
 
if "%~1" neq "" (
    call :func_get_secs_duration _fgme_stmSecsOne "%~1"
    call :func_get_time_from_secs _fgme_stmStdOne "%~1"
)
 
if "%~2" neq "" (
    call :func_get_secs_duration _fgme_stmSecsPTwo "%~2"
    if defined _fgme_stmSecsPTwo (
        set /a "_fgme_stm+=!_fgme_stm!"
    ) else (
        set /a "_fgme_stm+=%~2"
    )
)
 
if !_fgme_fdur! leq !_fgme_stm! (
    if "%~1" neq "" (
        if %~1 geq 10 (
            call :func_get_time_from_secs _fgme_stm "%~1"
            set "fgme_start_time=!_fgme_stm!"
        ) else (
            set "fgme_start_time=00:00:%~1"
        )
    ) else (
        set "fgme_start_time=00:00:01"
    )
)
 
set "_fgme_stm="
set "_fgme_fdur="
 
goto :eof
 
 
rem  Duration Time Multiplier to decrease palette creation time
 
rem  Note: Multiplier Default is 10 - unless a valid setMultiplierValue-Optional is passed
rem  Note: When currentRateValue is less than zero, it's considered as zero
 
rem  Note: setMultiplierValue-Optional valid values are a positive number or an equation.
rem    -- processed in OOP -- ((equationORvalue) + 1) 
 
rem  Note: Predefined returnVar
rem    when  number  - multiplier is added to it
rem    when  string  - treated as undefined
rem    when   mixed  - preceeding numbers are used
 
rem func_calc_fast_palette   returBoolVar   currentRateValue   setMultiplierValue-Optional
:func_calc_fast_palette
if "%~1" equ "" goto :eof
if "%~2" equ "" goto :eof
 
set /a "%~1*=1"
 
if "%~3" neq "" (
    set /a "%~1+=(( %~3 ) + 1) * (( %~2 ) + 1)"
) else (
    set /a "%~1+=(     10    ) * (( %~2 ) + 1)"
)
 
goto :eof
 
 
 
rem echo/  Info: Create Palette: [Dir:!fgme_palette_dir!] [File:!fgme_palette_name!]
rem test params -metadata "JIF=%~nx0,JIF_CREATED_ON=!Date! !time!" 
:func_ffm_palette
set "fmge_palette_rate=!fgme_duration_rate!"
 
call :func_calc_fast_palette   fmge_palette_rate   !fgme_duration_rate!   100
 
if "!fgme_duration_rate:~0,2!" neq "!fmge_palette_rate:~0,2!" (
    echo/  Info: Create Palette:  Faster Mode: [!fgme_palette_name!]
) else (
    echo/  Info: Create Palette:  Normal Mode: [!fgme_palette_name!]
)
 
call ffmpeg -an -sn -dn -v warning -ss !fgme_start_time! -i "!fgme_input_file!" -filter_complex "!fgme_filters!, palettegen=stats_mode=diff" -r !fmge_palette_rate! -y "!fgme_palette!"
if not errorlevel 0 (
    echo/  Error: Create Palette: Removing "!fgme_palette_name!"
    if exist "!fgme_palette_name!" del /q "!fgme_palette_name!"
)
 
 
 
goto :eof
 
 
 
:func_ffm_nopf_gfout
echo/  Info: Create Gif w/o  Palette file: [!fgme_output_fname!]
call ffmpeg -an -sn -dn -v warning -ss !fgme_start_time! -i "!fgme_input_file!" -vf "!fgme_filters!" -r !fgme_duration_rate! -y "!fgme_output_file!"
 
goto :eof
 
 
 
:func_ffm_pfsrc_gfout
echo/  Info: Create Gif with Palette file: [!fgme_output_fname!]
call ffmpeg -an -sn -dn -v warning -ss !fgme_start_time! -i "!fgme_input_file!" -i "!fgme_palette!" -filter_complex "!fgme_filters!,paletteuse" -r !fgme_duration_rate! -y "!fgme_output_file!"
 
goto :eof

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎