ffe v2.5 RC1
After 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..
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
-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,
+ 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
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
+ 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
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
~ 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
+ 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...
~ 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
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
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
+ 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.
If you decide to roll your own for whatever reason (I can think of a
few), upload a list of images, named..
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.
~ 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:
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..
Set your version number *anything* smaller.
+ 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.
Show Post-File Command Window (true/false)
This sets whether or not we run the command hidden.
By default we show the program window..
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
~ 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
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:
+ 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
* 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
* 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"
* 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
* 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
* 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..
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!