ffe v2.5 RC1After much sweat and, well, just sweat, ffe 2.5 is here. The details..
2.5 ("I do requests, Bob") Current release: v2.4.9.RC1 + You can now set the pause hotkey to global, so you can pause/suspend operation even whilst ffe is not at the front. This function is usually set to the ScrlLock key which as you know, IS USED FOR NOTHING ELSE! This can be toggled from the app menu. ~+ Improved Find dialog (for searching in output). The window will also now remain on top during searching. Window position is now also saved and restored between Finds. By the way, if you hold down the SHIFT key when you open the Find dialog (with button/F3), you get Replace options. Quite why *you* would want this, I have no idea. But there you have it. +~ Your recent files list now works globally, which makes more sense and less confusion. It will also automatically remove missing files from the recent files list (in the tray menu). These operations, like so much, are reported to the user in the console. + The recent files menu now shows only the base name of the files, as opposed to the full path. Clearly this makes for much neater menus. Way too much work went into this. ~ The Custom Buttons are now even more configurable. Well, the position, anyway. They have always been *completely* configurable! I fixed some positional issues, too, so everything should line up much better with the other buttons now, using the default settings. ~ There is no longer any theoretical limit to the number of rows of buttons you can create. You can fit six rows of buttons at 16px high (with a slightly smaller font), if you want *lots* of buttons. + Added new @tokens: @inputfile = Full path of input file. @appdir = ffe program directory + By popular request, I added two new buttons to launch quick tasks for ffmpeg and ffplay. These are of course configurable and to make them truly useful they accept @tokens. There are HotKeys for both buttons; F11 and F12, respectively. I like the logic: F1 (create) ==> F12 (play) Right-click the quick task button to edit the command. There is no context menu, the right-click takes you directly to the input. I like this system so much I've used it for the short test button, too. Enter.. Right-Now-Click! Command output is piped to the console for ffmpeg commands and also optionally** for ffplay commands (for simply watching a video, ffplay's output is superior. For troubleshooting, choose ffe console) ** You can toggle this setting from the app menu, and more quickly with the HotKey: F6. Like other controls, the ToolTip for these buttons updates to show you the current setting. Another good reason to keep the ToolTips enabled. There are *loads* of uses for these two wee buttons. Setting the FFplay Quick Task to "@outputfile" seems like a no-brainer. The FFmpeg button can be anything you fancy. How about a quick Video->MP3 converter button.. -i "@inputfile" "@parent\@item.mp3" Or one-click image extractor.. -i "@inputfile" -r 1 "@parent\@item_%05d.png" Imagination is the only limit! And the technical limitations of FFmpeg, of course. The button can't make espresso. At least, not a decent cup. + Shortcut (*.lnk) files are now resolved when dragging and dropping onto inputs/drop window. If you *really* want the old behaviour (inserting the shortcut file, rather than the linked file) hold down the SHIFT key while you drop. Though note, in that case, if you have automatic reporting for dropped items, you will, unless you have super-human reflexes and timing, get a useless media report for the .lnk shortcut in your default nfo viewer! Just, why? + You can now disable saving media reports. They will still appear in your console output, but won't leave report files next to the media files. Thank you! This setting is available from the app menu. ~ When you click on the "input:" label (to the left of the file input) rather than simply open the media file's containing folder, ffe will now open the folder in Explorer with the media file *selected*. W00! If the file in the input does not exist, the label flashes red, instead. + The positions of ALL the wee dialogs** are now remembered after you close them so they will open up in the same place next time. NOTE: if you cancel or OK an empty value, the position is NOT saved. ** Edit buttons, rename presets, set test length, etc., etc.. ~ Cleaned up the console output. There sure is a lot of it these days. + You can now disable ToolTips over the console output area (where they can annoy) whilst retaining the useful tips over your other inputs and controls.. allow_console_tooltip=false This setting is available from the app menu >> Visual Preferences. + You can now have ffe run your drag-and-drop command on files supplied on the command-line (or your retained settings), so when you launch ffe with a file (e.g. from your SendTo menu), it will immediately produce a media report, or just process it immediately, or whatever. This setting is available from the app menu. + Added a new drag-and-drop command; "Play", which plays the dropped file with FFplay, using your regular settings. + Also added "Generate", which generates an ffmpeg batch script, just like shift-clicking "do it!" or running ffe with generate(preset) on the command-line. + Added keyboard accelerators for ALL the app menu commands. Hit Alt+Space and away you go! + Added a tray menu option to open the data folder. Cleaned up the ordering of the tray menu, too. More logical. +~ Added and improved help messages, console output and other useful goodies. The window title is now used for more messages, too (e.g. when you copy the console to the clipboard). ~ If you launch ffe with the Shift key held down, it will ignore your previous exit settings and use the defaults. This has been true for a while but I didn't take a note of it anywhere. This action will now also disable retaining exit settings so that they will remain intact after re-launch, should you wish to enable the facility again (Ctrl+E), the old settings will still be there. As a side note, exit settings are now retained in your ini up until the point in time when they are replaced. If ffe gets killed for any reason, your exit settings will not. + Also, if you have exit settings disabled, and then enable it, ffe will offer to load your previously-stored exit settings (if you have any). ~ In the case of freak naming conflicts during unattended operations, ffe will now use a timestamp, rather than a random string, for the conflicting name's suffix. + You can now add video and audio codec to the lists from directly within the GUI (right-click the control). There are *hundreds* of these you can add. Only popular formats are included by default. Go nuts. Or rather, add what you need. + Similarly, you can now remove codecs the same way. ~ ffe now stores backup ini files inside the subfolder; "Backup", inside your data directory. Sorry. + You can now change the default extension from inside the ffe app menu. This is the global setting. As before, you will need to hack the setting into your presets if you need this set at the preset level. There is also a HotKey for this: F2. You can stop bugging me about this now! It should be noted that there is rarely any need to set this directly. ffe takes care of the extension mostly automatically. The default is used only as a fall-back when, for some reason, ffe can't determine the extension. Note: You can set this on a preset level. There is an edit item in the preset drop-down control's context menu. But again, you should not need to. Or at least, very rarely! + Added a few more GUI menu items, so you can get to more of the many many settings hidden away inside ffe.ini. ~ When saving a preset, ffe now only saves the settings you actually changed (mostly). The actual data saved is reported to your ffe console. ~ batch_commands_timeout and batch_commands_timeout are no longer saved automatically on a per-preset basis (they were simply copying the master settings anyway, as there is no way to alter these from within the ffe GUI). Users advanced enough to be using this stuff can add parameters to their presets manually, if you so desire, along with any of the other script control settings. + There is now an "About ffmpeg" option in the app menu and tray menu (beside the About ffe entries) so you can see the current version of whichever ffmpeg binary you are working with. The output is piped to your ffe console. ~ The default extension for the ffmpeg-generated help files is now "txt". You can change this in the help button preferences. ~ Removed the limit on the number of help button you can show in the GUI. Also the magic used to place them. There is a trade-off between the space taken up by these buttons and the space taken up by the custom command buttons. You will find balance. TIP: If you create enough custom buttons to fill a rectangular block MINUS ONE, you leave the bottom-right corner empty and a large number of help buttons will slide in comfortably. + Added an automatic extension mapping for "gif". ffmpeg can output animated gifs, by the way. I really must put these mappings into some kind of user preference. + Added quite a few app menu items so you can get to more of the hidden ffe settings. I don't think there are many left. I also moved a couple of prefs around to hopefully make things more logical. ~ The flag that tells ffe you already created a particular help file (with FFmpeg) and to simply re-load that instead of re-creating, is now unset when you load a fresh FFmpeg binary, in case the codecs and what-not have changed. + You can now disable the "with file paths" checkbox altogether, so file paths never get saved with or loaded from presets. A ToolTip will still appear over the control's area, informing the user that this preference has been disabled inside ffe.ini. File paths will always be remembered between sessions however, if you have "retain exit settings" enabled. Also, if you launch ffe with go(<preset-name>) and there is an input file specified, ffe will load that inputfile (which may have wildcards). ~ ffe will now report to your console if you attempt to create a media report from a missing input file. ~ The delimiter used to separate commands from comments inside the custom buttons has been changed from "|" to "***", as the pipe interfered with certain FFmpeg advanced commands. Sorry. You will need to update your buttons manually. Again, sorry. This is easiest in a text editor, though shift-clicking any button will get you to the gubbins. If you have lots of buttons, you definitely want to do this in a capable text editor; it will only take a few seconds.. Select the entire [custom buttons] section, replace "|" with "***". I have also made this available as a preference in your ini file. So you can keep the old behaviour if you prefer, update at leisure, whatever... button_delim=*** ~ The HotKey to abort the current task is now Ctrl+Q, which a) is more in line with the "q" we send to ffmpeg itself to quit, and b) works, which F4 seems not to any more. I may investigate. But then again, maybe not; F4 is too easy to hit by mistake! Pause/Break still aborts *everything*. *+ Fixed the F9 Drop Window toggle not working in recent Windows builds and improved it so it works no matter if you have the main GUI or drop window at the front. So long as ffe is at the front, F9 toggles the Drop Window. We're using twin-accelerators now, so it goes *really* fast! ~ On the subject of accelerators, I've re-coded most of the HotKeys to use GUI accelerators now, so there is no chance of those HotKeys interfering with other apps / being unavailable / etc.. + The current state of the tri-state controls is now shown in their pop-up ToolTips. Of course, you can see their state from the GUI, too: Checked = Enabled Unchecked = Disabled Filled = Unset + A simply mad amount of console and debug reporting. You want data? You got data! btw, "The data say" is good English. "Data" a plural. Unless we are talking Star Trek; in which case "Data" is a sentient android seeking humanity. The singular is "datum". But seriously, who says "Datum"? ~ Removed legacy (pre v0.9) pref handling. It's just confusion in the code and there's really no need for it any more. ~+* Ctrl+A will now select all the text of the control you are in, as opposed to only the console output. This only works in controls that normally have more than a few characters in them, so not for codecs and what-not (their text is automatically selected when they get focus), yes for parameters and file inputs. And the console, of course. Another pet annoyance bites the dust! + You can now add and remove help buttons from directly inside ffe. Right- click any help button for options. + You can now also edit help buttons from directly inside the GUI. ~ When you wipe a preset, ffe makes a backup, as ever. If you wipe a preset with the same name again, ffe takes a backup of your previous backup before creating the backup. That's two backups. No more. + You can now restore preset backups from directly within the ffe GUI. Shift+Click or Right-Now-Click the wipe button to get to the backup chooser. + Added a "Restart ffe" option to the tray menu. There is also a HotKey for this: Alt+F5**. This is useful if you need to reload after changing some global preference, and other stuff. ** This, like so much else, will become a thing. ~* I re-organised and re-wrote some menus to (hopefully) make them more logical. Someone won't agree. + Drop Window Image Starter Pack.. Added the facility to download a starter pack of images for your drop window. A small, tasteful, video-orientated selection. You can get to this feature from your ffe tray menu. There is a preference for the images' base URL, so you can use your own. image_pack_url=https://corz.org/windows/software/ffe/files/DropWindowImages/ If you decide to roll your own for whatever reason (I can think of a few), upload a list of images, named.. image_pack_urls.txt and drop it into the root images folder. Subfolders are fine; ffe will re-create those locally and make them available in your drop window's cascading images context menu. Pretty neat. All this is nicked from my upcoming app; BlobDrop. ffe will use this as a download manifest. The format of the file is a simple plain text list of image paths from the root, e.g. Film-Reel-Simple.png Folder-Videos-icon-By-Zerode_small.png Animated Gifs/Animated_film-strip-trans-by_Cor.gif ~ Updated the short test button to use "-frames:v" instead of "-vframes", which has been deprecated (it still works for now, but will be removed in the future). + You can use quit(preset) in place of run(preset) on the command-line, as it perhaps makes more sense. As usual, it runs the preset and quits. + Updated some of the detault custom button presets to be more in line with modern FFmpeg usage. + Added the current help command to the help buttons ToolTip, so you can see what the *actual* command is without editing the button. Lots of the ToolTips have useful dynamic information, by the way. + Added ini option to remove comments from your ini file, which is: clean_comments=true This will also happen automatically if your ini file grows to more than 60KB in size, to prevent clipping if it were to reach 64KB in size; the theoretical maximum size for an ini file. For some reason. Contrarywise, if you want the original comments back and you ini file is small enough to take them.. Inside ffe.ini Set: clean_comments=false Set your version number *anything* smaller. Restart ffe. + Post-File run options.. There is now a few choices for how to run the post-file command, that is the optional command ffe runs after each completed file, usually, though not necessarily, "doing something" to the output file. Firstly, you can choose the method used to run the command.. "Standard": Internal, direct, accepts arguments and > redirections. "dos": As above, but through Windows command interpreter (cmd.exe)). "ShellExecute": A simple mechanism enabling you to launch a file using Explorer's default verb, usually "open". Generally you want the internal (direct) method, but if your console program isn't working as expected, try the dos option. Note: When using the dos method, you will need to put "quotes" around any path with spaces in it, including the path of the program. NOTE: Any quotes in post-file commands are encoded as '"' in your ini file. It all happens automatically from the GUI, but remember this if you are editing you ini manually. When running direct/dos you also have the following options: Post-File Command Capture (true/false) Choose whether or not to capture the output (which will be visible in your ffe console). If you are capturing the output, you will obviously need to wait for the process to end. If your cammand is expected to take a long time, you may want to disable this. post_file_capture=true Show Post-File Command Window (true/false) This sets whether or not we run the command hidden. By default we show the program window.. post_file_show=true NOTE: Pre-Job, Post-Job and Post-File commands can all be saved inside presets, even the default preset. However, if you have any of these set and then load a preset with them unset, they will remain unchanged. This is by design.. You can load a preset with some commands setup, then another preset without any commands, then (perhaps after some tweaks) re-save the second preset, except now it has commands ini it. + The preference kill_ffmpeg_on_exit=<true/false> will now be honoured when read from a preset. Though this is technically a global setting, it has potential usage inside presets, so can be manually added, if required. ~ The "reset" button now resets ALL parameters and settings, including any pre- and post-job batch files and post-file commands. This is more in line with what most users expect to happen and is less confusing. ~ Although the state of the tri-state job buttons (overwrite, join, quit- when-done, shutdown-when-done) aren't normally saved to a preset unless they have been changed by the user (otherwise inheriting the defaults), they WILL now be retained between sessions, as to have half of them (the pre- and post- commands) remember and the others not, is odd if you don't understand the reasoning behind it, which was flimsy to begin with. NOTE: pre- and post-job command file locations, as well as post-file commands are grabbed fresh from your ini file before they are used, so you can edit these in the ffe GUI or your favourite text editor and the new batch scripts/commands will be picked up and used immediately. + You can now set a default audio file extension. This is rarely, if ever needed as most audio codecs map simply to file extensions. At any rate, it's now a pref: default_audio_extension=aac ~ Updated sample custom button Frei0r filters to use new syntax. I also tracked down a collection of x64 Windows DLL's (inside the excellent Shotcut) and put them in the goodies folder (see the ffe page) for you. Only some of these work. At least, my limited tests have only gotten some of them to work, albeit some of the funner ones. There is a list of the ones I got working, here: https://corz.org/windows/software/ffe/files/plugins/ + In the event of conversion failure (perhaps a plugin parameter?) ffe will now clean up the empty files FFmpeg leaves behind. +~ Fixed-up the logic of the pre- and post- job buttons. ffe will now also check for the existence of commands/batch files when you enable these features and move straight to the creation dialogs should any be absent. ffe will also inform you when pre-job and post-job command files load successfully, or not. Same with the post-file command. If these features are disabled/unset, ffe won't bother you about them. + ffe will now report the total time for a batch at the end of the batch. Quite an omission. + Improved the tracking of external commands, so you can see errors and such in the console. *** Fixes *** * Fixed a bug where ffe would annoyingly load the output file path (with MATOF, if enabled) even though you loaded a file on the command-line (SendTo, etc.). Now ffe will re-create the output path, as usual, from the input file. If you *really* want to get back the stored exit settings' output file path, click the MATOF button. * Fixed a bug where if you set a delayed start and there was an error creating the batch, the state (and the error message) would loop indefinitely, eating CPU. Thank the Teen Titans for spotting this one! * Fixed the version checking at the server end. Oops! * Fixed a bug where ffe wouldn't pass your Y/N response back to ffmpeg, as the ffmpeg developers had (finally) fixed that typo and ffe no longer recognised the question! * Cleaned up batch exiting so that total time and such are displayed in the console, just like regular jobs. * Fixed a lot of minor bugs as I went along. Things I noticed I'd not finished or not thought-out properly. Run a diff on the source if you want to see the many many changes. Some of these were recently introduced! Suffice to say, loads of wee niggles and annoyances have been taken care of.. * Fixed the flashing buttons. Oops. * Fixed new dialogs appearing top-left instead of centre. * Fixed MATOF's often wonky target file handling (dragging a folder onto the output is still the best way to set the output). * Cleaned up the double+ ToolTips. * Fixed the resizing errors. * Fixed codecs not present in the combo list not loading from presets. * Fixed certain settings not being remembered properly (e.g. the store_filepaths state checkbox wasn't being saved). * Fixed the incorrect menu items. * Stopped empty log files being created. This may still happen occasionally in the beta, when I forget to remove temporary lines with debug_level=0, but it won't happen spuriously on every run. * Fixed the presets menu not refreshing after renaming a preset. * Fixed renaming sections from re-ordering the presets combo (the AutoIt built-in IniRenameSection() function does this, so I re-wrote it; with a sledgehammer). * Fixed a bug where renaming custom buttons would place the renamed button at the end of the buttons. This annoyed people. Again, unthinking use of built-in functions was the cause. We use a much more elegant solution now and while I was in there I cleaned up some other old scrappy code. * Fixed the button grid re-creating two, or was it three times when the GUI was resized beyond its minimum limits and ffe had to resize the GUI automatically. Now it will refresh a single time, as expected. * Fixed the "gone too far" flag (when the above happens) not being unset after an automatic correction, so the button grid was being recreated every time the window dimensions changed, or were checked, which is a lot. * Fixed a couple of spurious variables that found their way tagged onto the end of console lines. * ffe will no longer crash if forced to use an empty ini file; it will simply replace it with the default version. * Fixed a bug where load(), run(), etc. would not work if retain_exit_settings was enabled. * Fixed a bug where exit settings were being destroyed on quit if you launched ffe with load() on the command-line. * Fixed a bug where the mian GUI would appear briefly during a "generate" option. * Fixed a few bugs with the pre-job, post-file and post-job commands buttons, tootlips and loading. Everything should now work as expected. * Fixed a bug where your log location would get set to the system temporary folder unless it was set inside your current preset. * Fixed a bug where running a non-existant preset from the command-line would result in the batch running with the default settings. Now, if a preset does not exist, ffe will fail with an error. * Fixed concatenation not working. We now instruct FFmpeg to accept "unsafe" paths. We are also properly tracking the output so we can know these things. * Post-batch tasks will no longer run if the batch was aborted. Oops! * Fixed the text selection issues on the command-line display. You can do Ctrl+A in there, too, to select all text. * Fixed the q/n keys not passing to FFmpeg during a concatenation operation. * Fixed a bug where slashes were being "fixed" in shell commands when the user put @tokens in their batch files, mangling the flags as a result. ~ DEV ~ +D Much improved error messages and debugging. You can set the debug level from 0 (off) to 10 (gobs), in your ini.. debug_level=10 This is useful for messing with the code or creating a bug report. Level 1 (the default) will reports only errors. We can also technically set debug_level=0, which will usually produce no output. This can be useful when we need to debug one particular section; we can add debug lines with the level set to 0 and we will see output for ONLY the section we are working on, which can save copious scrolling. The default level will display these messages too, of course. ~D We now use CorzFancyInputBox() exclusively for dialog inputs, so no need to include InputBox() resources. CorzFancyInputBox() has a few advantages, not least of which, it remembers the positions of your various dialogs. If you like your rename preset dialog to pop up precisely under the control, just put it there one time. Done. All input dialogs now use the Consolas font for the input. This can also now be set in your ini file. If the font name has spaces, enclose it "in quotes". + You can now set the maximum debug log size. When this limit is reached, the file is archived and a new log is created. +~ LOTS of internal code clean-ups, minor fixes and improved efficiency. ~ I moved a lot of the functions around to hopefully make things more logical. Forget running a diff. I also added dummy functions for easy navigation in any decent text editor. These have been growing for a while and are really useful for making and navigating to sections in your code. + Added a wee comment tag ("::dev::") above any items in the source code that I consider useful to you getting ffe compiled ASAP; places you will need to make edits/comment-out/etc..
Bug reports most welcome!