¶VirtualDub 1.6.5 released
VirtualDub 1.6.5 is out. I actually had this ready on Friday, but April 1st is not a good day to release software. It's a good thing too since a couple of bugs got fixed between then and today. The 1.6 branch is getting closer to stable and as such most of the changes are bug fixes, although a few new features snuck in there.
One new feature that I hadn't originally planned to add was significantly expanded support for automation; I worked a bit on this after talking with someone who was having difficulty automating video processing in a build pipeline. As a result, 1.6.5 introduces two new executables, vdub.exe and vdub64.exe that are used for command-line operation.
The vdub.exe and vdub64.exe executables are command-line executables that launch the 80x86 and AMD64 versions of VirtualDub, respectively. The main VirtualDub executable is still a GUI executable and will popup windows occasionally, but there are several differences in behavior when using this mode:
- The program launches synchronously, instead of spawning and releasing the command prompt. (This is actually caused by the shell due to VirtualDub's main application being GUI; the new CUI drivers fix this.)
- Progress and status windows are minimized by default.
- Log output is redirected to standard output.
- Errors cause VirtualDub to exit with a non-zero return code, so they can be detected through the %ERRORLEVEL% shell variable.
- The application automatically exits on completion (/x is implicit).
In addition, there are a few new command line switches, most notably /?, which gives help, and /queryVersion, which causes VirtualDub to exit with its build number as the return code. You can use this to work around quirks in versions going forward.
In 1.6.4, I added the /i switch, which lets you invoke a script with arguments. I forgot to add a way to convert the strings to numbers, though, which makes the parameters hard to use for anything other than filenames. This has been fixed in 1.6.5 with the addition of the Sylia.Atoi(), Atol(), and Atod() functions. The script is a bit ugly, but hopefully you'll be using your scripts more often than writing them.
The scripting reference was quite out of date, but I've finally updated it with everything that's been added in the 1.6 series, including the SetInputFormat()/SetOutputFormat() commands. All new commands are tagged with their first version of introduction.
Occasionally I get asked if there is a method to change the bitrate parameter of a video codec. The answer is no, because most modern video codecs bury it in the opaque config data structure (the ugly BASE64 encoded string). It is generally trivial to reverse engineer that structure to determine the location of the bitrate parameter, but this must be done on a per-codec and even per-codec-version basis, and unfortunately VirtualDub's scripting language doesn't yet have primitives to edit the BASE64 string.
I was reluctant to add multiple undo until someone pestered me and I realized that the edit list is very light, since it just holds ranges of frame numbers. So I just rigged the code to save entire copies of the edit list in a stack and multiple undo was born.
There was a bug in the fast recompress mode that caused it to run suboptimally for Avisynth users: it was testing UYVY/YUY2 capability before trying the source format, which meant that it basically always used 4:2:2 YCbCr through conversion on the input driver. This has been fixed so that the source format is always tried first, which means that a YV12 Avisynth script should always attempt YV12 first and then fall back to UYVY or YUY2 if the codec test fails. Logging has also been improved so that it tells you the formats involved, so you can tell if a fallback has occurred.
There is a new "run video analysis pass" command on the File menu. This simply runs the rendering engine with a null output backend. If you have a video codec or filter that generates dummy data in an analysis pass, you can use this command to run the pass without generating a junk file.
The edit mode has gotten a bit crufty over the years and it'll probably be time to overhaul it after I get done with the capture stuff. I have to get that done, first. *sigh*
In adding support for auto-saving settings, I forgot to add code to save the audio device. This in turn made the audio format not restore properly in some cases, since the app would use the wrong audio device and then fail to set the audio format since that device didn't support the format. This has been fixed. Note that compression settings and video format are not auto-saved and you have to explicitly save those in Device > Device Settings.
I wanted to add DV capture support to this release but ran into a critical problem: I have no DV capture devices for development. I do have a Pinnacle DVplus, but I have no drivers for it, the website seems to be specifically made to prevent you from getting any, and even if I had them it's not clear I could capture without a DV camcorder attached. It's basically impossible to diagnose capture problems without the actual hardware. As a result 1.6.5 still does not allow you to capture from a capture device that outputs DV data. Sorry.
It is probably not much consolation that 1.6.5 at least doesn't crash if you give it interleaved data that it can't save into an AVI file.
There is a new timing configuration option in the timing options for limiting the length of drop bursts. This mainly prevents VirtualDub from jamming if video timing goes really screwy and the latest timestamp jumps millions of frames forward. Also, the UI still updates even if all incoming frames are being dropped, which will help diagnose timing problems.
Build 23350 (1.6.5, experimental): [April 4, 2005] [features added] * Script: Added Sylia.Atoi(), Atol(), and Atod() functions to allow conversions from string to value. * Script: Added VirtualDub.Log(string) command to output to log output (or console). * Added vdub.exe launcher for basic command-line driven operation. * Added multiple undo/redo for timeline edits. * Added /? switch to list command-line options. * Added support for reading paletted BMPs. * Dub input format is now reported in the log. [bugs fixed] * Script: Binary operators sometimes promoted the wrong way, i.e. double + int -> int. * Script: The old form of the Open() command didn't choose the right driver when a specific driver was requested, due to sorting by priority. * Script: Fixed random crash when adding video filters after opening a video file. * Script: Fixed crash when issuing SaveWAV() command with no audio stream. * Capture: Fixed race condition induced random crash when RGB filtering and accelerated preview were both enabled. * Capture: Capture stats were not updated while frame dropping was occurring, which sometimes made it hard to diagnose timing problems. * Capture: Added adjustable limit on length of burst inserts when timing anomalies occur, to prevent the app from locking permanently on a very bad timing glitch. * Capture: Audio device was not auto-saved. * Capture: Fixed crash when attempting to capture with an unsupported video format (MPEG-1/2, interleaved DV, etc.). * MPEG-1 video decoder occasionally glitched due to a missing end tag. * Removed dumb debug code that was causing a "???" message box to appear when unrecognized command-line flags are seen. * Fixed display panes not always updating properly. * Fixed rare crash if an MPEG-1 open failed extremely early. * Fixed cases where the render start/end point wasn't updated properly when a selection bound was used to "push" the other, i.e. "set end" before start, or vice versa. * Paste (Ctrl+V) wasn't deleting the current selection before doing the insert. * Hex editor: Scroll bar thumb wasn't reset to top when loading a new file. * Fixed a bunch of busted paletted converters. * Fixed dialogs that had swapped OK/Cancel buttons. * Fixed conflicting accelerator for Audio > Conversion menu option. * Fast recompress mode now tests source format before UYVY and YUY2. * Y8 AVIs weren't accepted even though they could be generated. [regressions fixed] * Capture: "Hide on capture" now works. * Capture: Preview/overlay display commands toggle once again. * Priority drop-downs in preferences didn't have vertical scroll bars. * Top-down uncompressed RGB AVIs weren't handled properly. * Fixed busted non-MMX XRGB1555>XRGB8888 converter.