-
Posts
29 -
Joined
-
Last visited
Everything posted by lIlIIlIllIIIIlI
-
FileGetSize() problem
lIlIIlIllIIIIlI replied to lIlIIlIllIIIIlI's topic in AutoIt General Help and Support
I did some reading and apparently file size metadata does not typically update from video recording software, until it is finished recording. Opening and closing the file prior seems to work just fine though, thanks! -
Confused by AdlibRegister/AdlibUnRegister
lIlIIlIllIIIIlI replied to milos83's topic in AutoIt General Help and Support
I am guessing if the duration of AdlibRegister("CheckWorkers", 1000) is equal to the first Sleep(1000), it cannot ever reach that Sleep, because you scheduled it to run CheckWorkers. -
If you're gonna use ai for making programs, use chatgpt, grok is kind of bad and gemini is not as good. there are some other things that might be better like deepseek but you can use it for only like 10 prompts before their servers are overwhelmed and you have to wait hours. Chatgpt keeps your history so you can never "lose" a solution that it spits out for you.
-
I have a camera recording video via ffmpeg, but the video's file size doesn't seem to update when periodically checked via FileGetSize($path). It does update when I manually right click > property and check the file size, or when I reopen the folder containing the video and interact with it in some way. It's like windows isn't actually check when autoit asks, but it does check it when I manually inspect it... if that makes sense? Do you have to somehow modify the file or trick windows into re-checking the file, before calling FileGetSize()? Edit: To be more clear, a video file that is periodically written to by ffmpeg, which should be increasing in file size, does not display any increase in file size when checked with autoit. But checking manually in windows I can see the file size increasing.
-
i cant open sciTE.exe
lIlIIlIllIIIIlI replied to otongwibu's topic in AutoIt General Help and Support
Don't want to necrobump but I feel it's important to post helpful things regardless. I'm on a fresh windows install, and everywhere I looked to fix those .dll problems they just said to install the visual c redistributable. I did all different versions of the 64 bit version and nothing worked, until I also installed the 32 bit version. Seems scite requires that because now everything works fine. Also finding the download was weirdly challenging, no downloads from Microsoft seem to be working, but this page has permalinks for the latest 32/64bit versions required. https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 -
Just a quick question here. I don't have a cpu with the required tpm/encryption chip or whatever that windows 11 wants, and I don't feel like bootlegging or force-installing it on my computer, so I haven't been able to test autoit with Windows 11. I will probably wait until win10 stops receiving updates before I bother with windows 11. I'm wondering does it run autoit scripts fine? Does anything need changed? Any settings to turn on or something? I know windows is pretty good about backwards compatibility, and I'm not even sure there is much difference between 11 and 10, plus I haven't seen any mention of problems in this forum yet... so I moreso just curious than actually worried.
-
MsgBox with altered buttons captions
lIlIIlIllIIIIlI replied to pixelsearch's topic in AutoIt Example Scripts
Is the problem, with changing text on a msgbox button, ultimately that typical code execution is paused when the prompt for user input is displayed? -
2 GUIs is an absolute brain blast, for years now I have just been reusing the same block of code in my example above for creating a single GUI. To be honest I have never even imagined placing this 'gui creation block' inside a function, and having 2 guis active at once (not counting the built-in message box/file dialog/etc). I guess ultimately these FileOpen/messagebox are just that in the end, functions that create a specific type of gui, and there is nothing stopping you from making your own and calling it. I don't understand the example so I'll have to study it sometime, because it can be quite limiting relying on the default dialog guis for input, and also I tend to use tabs for this 'secondary gui' thing which is kind of ridiculous in hindsight now. Thanks again.
-
Try this #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> #include <Array.au3> const $WS_VISIBLE = 0x10000000 const $WS_EX_APPWINDOW = 0x00040000 const $WS_EX_TOOLWINDOW = 0x00000080 Local $aWindows = WinList() Local $sVisibleTitles = "" For $i = 1 To $aWindows[0][0] If $aWindows[$i][0] = "" Or $aWindows[$i][1] = 0 or not checkwindow($aWindows[$i][1]) Then ContinueLoop Local $hWnd = $aWindows[$i][1] Local $iState = WinGetState($hWnd) If BitAND($iState, 2) Then $sVisibleTitles &= "Window Title: " & $aWindows[$i][0] & ", State: " & $iState & @CRLF EndIf Next If $sVisibleTitles = "" Then MsgBox($MB_ICONINFORMATION, "Visible Windows", "No visible windows found.") Else MsgBox($MB_ICONINFORMATION, "Visible Windows", $sVisibleTitles) EndIf Func checkwindow($hWnd) If Not BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $WS_VISIBLE) Then Return False If BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE), $WS_EX_TOOLWINDOW) Then Return False If Not _WinAPI_GetParent($hWnd) And Not BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE), $WS_EX_TOOLWINDOW) Then Return True Return False EndFunc
-
What I really dislike about python is how many files a simple program will write to disk, because of all the dependencies and libraries it's using which are also writing to disk. Running a python program, for example webtorrent cli, and checking later on with software for reading overwritten data, it is almost a thousand various python files that were deleted. That annoys me for some reason. When I run a program, I like when it's just a tool and it does something simple. But these python and javascript and other package managed languages that effortlessly summon a million other python programs and their dependencies and their specific versions... I can't fully explain why it annoys me but it just seems really sloppy and bad. There is beauty in a compiled program that doesn't rely on other things, but this view does not seem supported by python developers, I guess is a good way to put it. I also don't like how there is no end statements (or closing bracket equivalents for code depth) in python. It looks ugly in my opinion, visually unbalanced, and I rely on those end statements to parse stuff. Lua in my opinion is like a prettier version of python because of the end statements it has.
-
I usually feel bad about posting my code because I don't use the proper variable naming or anything else like everyone else on this site, but this demonstrates what I meant by 'stutter'. Just focus on the background main gui after you select a file and open. For me at least it disappears and then reappears almost instantly and it looks weird. I have tried subbing in WinActivate for @SW_RESTORE but it still looks the same, you can uncomment it and then comment @SW_RESTORE and try it out in the Enable func. Opt('GUIOnEventMode', 1) $gui = GUICreate('Example', 350,350) GUISetFont(10) guictrlcreatelabel('Video list',10,10, 100, 20) GUICtrlCreateList('', 10, 30, 330, 100) GUICtrlCreateButton('Add videos', 10, 120, 330, 25) GUICtrlSetOnEvent(-1, "Add") GUISetOnEvent(-3, 'Close') GUISetState() func Add() Disable() FileOpenDialog('Open video ...', @ScriptDir, 'Videos (*.mkv;*.mp4)', 0x7) Enable() endfunc while 1 sleep(1000) wend func Disable() GUISetState(@SW_DISABLE , $gui) endfunc func Enable() GUISetState(@SW_ENABLE , $gui) GUISetState(@SW_RESTORE , $gui) ;WinActivate($gui) endfunc func Close() exit endfunc
-
I only noticed recently that with these gui pop-up things (dialogs?) open, you can still interact with the main gui, it all gets queued and processed once the dialog is closed. I find that disabling the main gui using @SW_DISABLE works for preventing this. The problem I have is restoring the main gui, or bringing the window back to focus? @SW_ENABLE works for re-enabling input, but it does not bring the window back to the forefront in focus, the window is like minimized or something. @SW_RESTORE seems to bring the window back to focus, but the entire gui disappears and then reappears very quickly, giving it a weird stuttering appearance, it doesn't feel smooth. I don't see a way to fully emulate how other programs handle dialogs using any of the options with GUISetState. I see other programs block input to the main gui and the cause the open dialog window to jiggle or flash as if to get your attention. I'm not worried about getting that attention jiggle so much as not having a stutter when the main gui is restored after being disabled. Help is much appreciated, thanks. Enable() ;Msgbox or other dialog Disable() func Disable() GUISetState(@SW_DISABLE , $gui) endfunc func Enable() GUISetState(@SW_ENABLE , $gui) GUISetState(@SW_RESTORE , $gui) endfunc
-
Ah, the function returns something! That makes so much sense, thanks.
- 2 replies
-
- guictrlsendmsg
- memory leak
-
(and 3 more)
Tagged with:
-
$img = GUICtrlCreatePic("", 500,0,1390,890) ... _GDIPlus_Startup() local $bitmap_1 = _GDIPlus_BitmapCreateFromMemory(InetRead($jpg_url)) local $bitmap_2 = _GDIPlus_ImageResize ($bitmap_1, 1390, 890) local $bitmap_3 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bitmap_2) GUICtrlSendMsg($img, 0x0172, 0, $bitmap_3) _GDIPlus_BitmapDispose($bitmap_1) _GDIPlus_BitmapDispose($bitmap_2) _WinAPI_DeleteObject($bitmap_3) _GDIPlus_Shutdown() I think this is all the relevant code. I've never worked with any of these functions before (aside from GUICtrlCreatePic and setting it to a picture file, not setting it via memory via GUICtrlSendMsg) so I don't know how to clean up properly after loading/drawing an image to screen. I commented out everything and went line by line figuring out what stops the leak. BitmapDispose and DeleteObject work for the varables I created... $bitmap_1, 2, 3 are good. Now all that remains is the GUICtrlSendMsg line of code. When I comment just this line, the memory leak stops. Do I need to do something to clear the picture control? Or send a message to $img using GUICtrlSendMsg telling it to clear the previous image? The docs for the function don't show anything (https://www.autoitscript.com/autoit3/docs/functions/GUICtrlSendMsg.htm) but I see it's being used to start/stop a marquee scrolling text for a progress bar control with the third parameter value 0/1... I tried this with Pic control thinking making 0 is for displaying the bitmap, and 1 is for clearing it, but it doesn't clear the memory. Help would be appreciated, thanks.
- 2 replies
-
- guictrlsendmsg
- memory leak
-
(and 3 more)
Tagged with:
-
Best way to read data from PyCharm?
lIlIIlIllIIIIlI replied to vulcan4d's topic in AutoIt General Help and Support
if you start the python script via autoit, you can read its output via https://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm -
these are basically straight from the documentation https://www.autoitscript.com/autoit3/docs/libfunctions/_DateAdd.htm https://www.autoitscript.com/autoit3/docs/libfunctions/_NowCalcDate.htm
-
hello using the udf examples, i built out a client/server to understand tcp and how to send and receive stuff. it works on the local network fine. to get it working with my public up, this will just require port forwarding and then reserving my ip since it has dhcp? anything else? i can never remember my router login so i'm just wanting to learn all the requirements first before i reset it so i can login and change things. thanks
-
you are assigning $wheelclick the string '10' ( '&' is for joining things together as strings ) likewise for $movewheel, you assign it the string 'downup' MouseWheel() only moves the mouse wheel, if you provide the right parameters. (see https://www.autoitscript.com/autoit3/docs/functions/MouseWheel.htm ) however it doesn't provide output of the mousewheel position in your While loop, nothing alters the values of $movewheel or $wheelclick, and both If/ElseIf statements are false at the start of the loop so the Tooltip() in both will never be reached those are just some mistakes. you need to find a UDF on the forum for detecting mousewheel events perhaps, i don't know how to do that
-
i don't enjoy object oriented languages, but i can make stuff with c# and i understand python/js to some extent. i learned java in high school and c++ in computer science courses but hated them. what got me into autoit was when i was learning windows batch, i somehow discovered windows-specific scripting languages and it was quick to install and test out and i really liked it autoit is just an overall nice language, though it's underrated how simple yet powerful it is and many don't even know what it is, but that's alright
-
$input = $CmdLine[1] $bytes = 1000000 ; 1000000 for 1 MB, 1000 for 1 KB $size = FileGetSize($input) $file = fileopen($input, 16) $max = ceiling($size / $bytes) for $i = 1 to $max $data = fileread($file, $bytes) $output = $input & '_' & $i & 'of' & $max filewrite($output, $data) next ^file split file path for a 20MB "video.mp4" is input, it will be output as "video.mp4_1of20", "video.mp4_2of20", etc. change $bytes to affect the split files size, this example made them 1MB (10^6 bytes) $input = $CmdLine[1] $name = stringtrimright($input, 1 + stringlen($input) - stringinstr($input, '_', 0, -1)) $split = stringsplit($input, 'of', 3) $max = $split[ubound($split) - 1] for $i = 1 to $max $in = $name & '_' & $i & 'of' & $max $file = fileopen($in, 16) $data = fileread($file) fileclose($file) filedelete($in) filewrite($name, $data) next ^ file join file path for any of the "video.mp4_Xof20" segments is input. the "video.mp4_Xof20" segments are read and written to "video.mp4" and then deleted, leaving the newly joined "video.mp4" in the end i made this today because i had a big file that i couldn't really open. i split it into 1000 chunks to make processing and stuff easier. i've also used it to split files to just under 25MB segments so i can attach and mail big files over gmail which is silly but it worked
-
_FileGetProperty - Retrieves the properties of a file
lIlIIlIllIIIIlI replied to BrewManNH's topic in AutoIt Example Scripts
#include <_FileGetProperty.au3> filter(@scriptdir & '\video.mp4') Func _FileGetFPS($fullpath, $property) $prop = _FileGetProperty($fullpath, $property) $string = stringsplit($prop, '.', 2) return $string[0] endfunc func filter($p) $frames = _FileGetFPS($p, 'Frame rate') if ($frames < 23) then msgbox(1,'Video low fps', $p & @crlf & 'Frame rate: ' & $frames) FileDelete($p) endif endfunc video.mp4 is a regular video at 30.00 fps. filter() shows 30 < 23 being true, because the "30" is evaluating to 0. It works as expected when i remove the first character of either $string[0] or $frames before making a comparison/converting to number/int. So there is some invisible character X at the beginning of the string. I noticed this earlier when trying to do a similar thing for grabbing frame rate. it had some character before everything else. Is this deliberate? It seems weird, but what do i know. I know it isn't white space because i tried stringstripws with 8 option for removing everything -
here's a cli tool for making thumbnails of videos. it just needs ffmpeg and imagemagick installed with the path environment variables set. information is on its github page including how to pass it parameters and some examples of output -> https://github.com/lllllll-llll-llllll/video_thumbnail_maker is there anything that could be improved or anything that looks weird? i am just a hobby programmer so i might have made mistakes. thanks! #include <Array.au3> #include <Date.au3> #include <AutoItConstants.au3> $config_input = null $config_output = null $config_columns = null $config_rows = null $config_size = null $config_border = null $config_font = null $config_fontsize = null $config_header = null $config_timestamp = null for $i = 1 to $cmdline[0] $parameter = stringsplit($cmdline[$i], '=') if $parameter[0] = 2 then $key = $parameter[1] $value = $parameter[2] select case ($key = 'input') or ($key = 'in') or ($key = 'i') $config_input = $value case ($key = 'output') or ($key = 'out') or ($key = 'o') $config_output = $value case ($key = 'columns') or ($key = 'column') or ($key = 'cols') or ($key = 'col') or ($key = 'c') or ($key = 'width') $temp = abs(int($value)) if ($temp <> 0) then $config_columns = $temp case ($key = 'rows') or ($key = 'row') or ($key = 'r') or ($key = 'height') or ($key = 'high') $temp = abs(int($value)) if ($temp <> 0) then $config_rows = $temp case ($key = 'size') or ($key = 's') $temp = abs(int($value)) if ($temp <> 0) then $config_size = $temp case ($key = 'border') or ($key = 'b') $config_border = abs(int($value)) case ($key = 'font') or ($key = 'f') $command = 'convert -list font' runwait(@ComSpec & ' /c ' & $command & ' > fonts.txt', '', @SW_HIDE) local $fonts[0] if fileexists('fonts.txt') then $text = FileReadToArray('fonts.txt') for $line in $text if stringleft($line, 8) = ' Font: ' then $trim = $line $trim = stringtrimleft($trim, 8) if $trim = $value then $config_font = $value exitloop endif endif next filedelete('fonts.txt') endif case ($key = 'fontsize') or ($key = 'fs') $temp = abs(int($value)) if ($temp <> 0) then $config_fontsize = $temp case ($key = 'header') or ($key = 'head') or ($key = 'h') if $value <> 'none' then $config_header = stringsplit($value, ',', 2) case ($key = 'timestamp') or ($key = 'time') or ($key = 'ts') or ($key = 't') select case ($value = 'north') or ($value = 'n') $config_timestamp = 'north' case ($value = 'northeast') or ($value = 'ne') $config_timestamp = 'northeast' case ($value = 'east') or ($value = 'e') $config_timestamp = 'east' case ($value = 'southeast') or ($value = 'se') $config_timestamp = 'southeast' case ($value = 'south') or ($value = 's') $config_timestamp = 'south' case ($value = 'southwest') or ($value = 'sw') $config_timestamp = 'southwest' case ($value = 'west') or ($value = 'w') $config_timestamp = 'west' case ($value = 'northwest') or ($value = 'nw') $config_timestamp = 'northwest' case ($value = 'none') $config_timestamp = 'none' endselect endselect endif next ;defaults if no parameter is supplied if $config_input = null then abort() if $config_output = null then $config_output = 'output.png' if $config_columns = null then $config_columns = 4 if $config_rows = null then $config_rows = 3 if $config_size = null then $config_size = 135 if $config_border = null then $config_border = 1 if $config_font = null then $config_font = 'arial' if $config_fontsize = null then $config_fontsize = 12 if $config_header = null then $config_header[4] = ['name', 'size', 'resolution', 'duration'] if $config_timestamp = null then $config_timestamp = 'southeast' ;metadata const $info = 'info.ini' $command = 'ffprobe -v error -show_format -show_streams ' & $config_input runwait(@ComSpec & ' /c ' & $command & ' > info.ini', '', @SW_HIDE) if not fileexists('info.ini') then abort() $ini_ratio = IniRead($info, 'stream', 'display_aspect_ratio', null) ; aspect ratio? > ... $ini_width = number(IniRead($info, 'stream', 'width', null)) ; horizontal resolution > out_resolution $ini_height = number(IniRead($info, 'stream', 'height', null)) ; vertical resolution > ^ $ini_duration = number(IniRead($info, 'stream', 'duration', null)) ; time in seconds > out_duration $ini_fps = IniRead($info, 'stream', 'avg_frame_rate', null) ; average frame rate > out_fps $ini_name = IniRead($info, 'format', 'filename', null) ; filename > ... $ini_size = number(IniRead($info, 'format', 'size', null)) ; filesize in bytes > out_size $ini_date = FileGetTime($config_input, 0) ; last modified > out_date ;format time $out_duration = timestamp($ini_duration) func timestamp($seconds) local $time[3] _TicksToTime(int($seconds) * 1000, $time[0], $time[1], $time[2]) if $time[0] < 10 then $time[0] = '0' & $time[0] if $time[1] < 10 then $time[1] = '0' & $time[1] if $time[2] < 10 then $time[2] = '0' & $time[2] return $time[0] & ':' & $time[1] & ':' & $time[2] endfunc ;format date local $month[12] = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] $out_date = $month[$ini_date[1] - 1] & ' ' & $ini_date[2] & ', ' & $ini_date[0] & ', ' & $ini_date[3] & ':' & $ini_date[4] & ':' & $ini_date[5] ;format file size select case $ini_size >= 1024^3 ;gigabytes $out_size = ($ini_size / 1024^3) & ' GB' case $ini_size >= 1024^2 ;megabytes $out_size = ($ini_size / 1024^2) & ' MB' case $ini_size >= 1024 ;kilobytes $out_size = ($ini_size / 1024) & ' KB' case else ; < 1024 bytes $out_size = $ini_size & ' B' endselect $out_size = stringformat("%.2f", $out_size) ;format dimension $out_resolution = $ini_width & 'x' & $ini_height ;format fps $out_fps = StringSplit($ini_fps, '/', 2) $out_fps = $out_fps[0] / $out_fps[1] $out_fps = stringformat("%.2f", $out_fps) ;create metadata header using imagemagick local $header_text1 = '' local $header_text2 = '' if $config_header <> 'none' then for $item in $config_header select case ($item = 'name') or ($item = 'n') $header_text1 &= 'File name \n' $header_text2 &= ': ' & $ini_name & '\n' case ($item = 'size') or ($item = 's') $header_text1 &= 'File size \n' $header_text2 &= ': ' & $out_size & '\n' case ($item = 'resolution') or ($item = 'res') or ($item = 'r') $header_text1 &= 'Resolution \n' $header_text2 &= ': ' & $out_resolution& '\n' case ($item = 'duration') or ($item = 'd') or ($item = 'length') or ($item = 'l') or ($item = 'time') or ($item = 't') $header_text1 &= 'Duration \n' $header_text2 &= ': ' & $out_duration & '\n' case ($item = 'fps') or ($item = 'f') $header_text1 &= 'FPS \n' $header_text2 &= ': ' & $out_fps & '\n' case ($item = 'audio') or ($item = 'a') ;$header_text1 &= 'Audio \n' ;$header_text2 &= ': ' & $ini_name & '\n' case ($item = 'video') or ($item = 'v') ;$header_text1 &= 'Video \n' ;$header_text2 &= ': ' & $ini_name & '\n' case ($item = 'comment') or ($item = 'c') ;$header_text1 &= 'Comment \n' ;$header_text2 &= ': ' & $ini_name & '\n' case ($item = 'date') $header_text1 &= 'Date \n' $header_text2 &= ': ' & $out_date & '\n' endselect next $header_text1 = StringTrimRight($header_text1, 2) $header_text2 = StringTrimRight($header_text2, 2) $command = 'convert -background black -fill white -font ' & $config_font & ' -pointsize ' & $config_fontsize & ' label:"' & $header_text1 & '" header1.png' runwait(@ComSpec & ' /c ' & $command & '', '', @SW_HIDE) $command = 'convert -background black -fill white -font ' & $config_font & ' -pointsize ' & $config_fontsize & ' label:"' & $header_text2 & '" header2.png' runwait(@ComSpec & ' /c ' & $command & '', '', @SW_HIDE) endif ;create thumbnails of the video $config_height = ($ini_width > $ini_height) ? $config_size : int($ini_height / ($ini_width / $config_size)) $config_width = ($ini_width > $ini_height) ? int($ini_width / ($ini_height / $config_size)) : $config_size for $i = 0 to (($config_rows * $config_columns) - 1) $time = int($ini_duration * ($i / (($config_rows * $config_columns) - 1))) $thumbs_filename = $i + 1 & '.png' $command = 'ffmpeg -ss ' & $time & ' -i ' & $config_input & ' -s ' & $config_width & 'x' & $config_height & ' -frames:v 1 ' & $thumbs_filename runwait(@ComSpec & " /c " & $command, "", @SW_HIDE) if $config_timestamp <> 'none' then $time_watermark = timestamp($time) $command = 'convert ' & $thumbs_filename & ' -gravity ' & $config_timestamp & ' -background black -extent ' & ($config_width + $config_border) & 'x' & ($config_height + $config_border) & ' -stroke black -pointsize 14 -strokewidth 2 -annotate 0 ' & $time_watermark & ' -stroke none -pointsize 14 -fill white -annotate 0 ' & $time_watermark & ' ' & $thumbs_filename runwait(@ComSpec & " /c " & $command, "", @SW_HIDE) endif next ;combine everything together local $montage[$config_rows * $config_columns] for $i = 1 to ubound($montage) $montage[$i - 1] = $i & '.png' next ;$command = 'montage ' & _ArrayToString($montage, ' ') & ' -geometry +' & ($config_border / 2) & '+' & ($config_border / 2) & ' -background black -tile ' & $config_columns & 'x' & $config_rows & ' mosaic.png' $command = 'montage ' & _ArrayToString($montage, ' ') & ' -geometry +0+0 -tile ' & $config_columns & 'x' & $config_rows & ' mosaic.png' runwait(@ComSpec & " /c " & $command, "", @SW_HIDE) $command = 'convert mosaic.png -gravity southeast -background black -splice '& $config_border & 'x' & $config_border & ' mosaic.png' runwait(@ComSpec & " /c " & $command, "", @SW_HIDE) if $config_header <> 'none' then $command = 'convert header1.png header2.png +append -bordercolor black -border 4x4 header.png mosaic.png -append ' & $config_output runwait(@ComSpec & " /c " & $command, "", @SW_HIDE) endif abort() func abort() for $file in $montage if FileExists($file) then filedelete($file) next if FileExists("fonts.txt") then FileDelete("fonts.txt") if FileExists("header1.png") then FileDelete("header1.png") if FileExists("header2.png") then FileDelete("header2.png") if FileExists("mosaic.png") then FileDelete("mosaic.png") if FileExists("info.ini") then FileDelete("info.ini") exit endfunc exit i've attached an example image of output using the code below as the command AutoIt3.exe thumbnail_maker.au3 "input=Big_Buck_Bunny.mp4" "output=thumbnails.png" "columns=4" "rows=3" "size=135" "border=1" "font=arial" "fontsize=12" "header=name,size,resolution,duration,date" "time=southeast"