The past few weeks I’ve spent quite a bit of time re-factoring and updating FFMS2 and the result is now ready for initial testing in this doom9 thread. It’s a much needed update to clear out all unnecessary old hacks and finally deal with a few issues.
Report all regressions you find here or over att doom9 and I’ll try to fix with them.
R37 has been released. It’s mostly just a collection of bug fixes. Ironically the Avisynth 2.6 API was the cause of several of them in AVFS. Expect a long rant about this later.
Note: Both the installer and portable archives were updated to fix various compilation issues so if you experience crashes on resizing/missing dll errors you should re-download.
I fixed some bugs. Other people who understand Python improved things a bit. This is yet another maintenance release. See the changelog for the full list of fixes.
I added a discussion page. Direct your random comments to that one if you simply want to say or ask something small. I know Doom9 and its wait time is a bit annoying to use if you want help NOW!
I uploaded a new FFMS2 compile using the latest FFmpeg. This fixes many SWScale issues, for example planar RGB can now always be used as output, and also some other decoding issues. Especially VapourSynth users should update.
This is a quick bugfix release. It fixes an incorrect output bug in 3×3 (and smaller) convolutions and several AVFS output issues that were carried over from the original code. You should update.
Why do we need a trigger warning you ask? Because the mere idea of FFMS2 being updated is a big shock to most people? No. In fact it was caused by me once again declaring that XP is a dead end. This time using slightly different wording. If you meet any of these unfortunate users in real life don’t tell them that XP support ended long ago. They may go on a violent rampage or even worse, be offended.
Also a pile of bugs got fixed but nobody actually cares about that, after all we’ve now got a controversy surrounding this release and that’s more interesting.
Look at this image and remember the good old times that were actually shit
I actually did test this release. I mean it. Not like the previous one where only the core parts got tested. Anyway, this release fixes all known regressions that appeared in R33 and optimizes several internal functions. It also adds support for handling pre-multiplied alpha in MaskedMerge and a PreMultiply filter to apply it.
VSFS was removed and replaced with AVFS, importing all improvements such as faster mount speed and other fixes. The codebase was also unified for both Avisynth and VapourSynth to make maintaining it less annoying in the future. But wait! There’s more! When using recent Avisynth+ builds it can now output exactly the same high bitdepth formats as VapourSynth! Interestingly this makes AVFS considerably better than the current VFW output of Avisynth+.
Possibly breaking changes:
- Temporalsoften plugin no longer included because it’s horrible, use FrameAverage from miscfilter instead
- AVFS doesn’t have shell integration unlike the older VSFS
Some Avisynth filters are really, really popular and show up many scripts. Some of them like RemoveGrain and TemporalSoften have even been ported because they’re useful and used in so many scripts.
…But what is TemporalSoften really used for?
TemporalSoften is the definition of cargo cult programming, its code and concept gets copied over and over again and nobody knows exactly why. Let’s start with a few facts:
- TemporalSoften is a horribly bad temporal smoother even compared to its competition over 10 years ago
- TemporalSoften has never been used to unironically denoise anything the past 10 years
With these facts in mind you have to wonder why anyone’d ever put it in a script from the past decade. The answer is simple, if you set the denoising thresholds to their max values you get a filter that averages an odd number of frames. If you’re creative you can blend several frames with different weights. That’s actually kinda useful sometimes. So useful someone already wrote an Avisynth plugin for it. It’s a shame that it was fairly quickly forgotten. Unfortunately nobody who ported TemporalSoften to VapourSynth stopped to think about what it was actually used for and instead a very optimized version of TemporalSoften was created. And rewritten. And optimized a bit more. Because why not?
To try to counter this madness I’ve made a collection of small useful and experimental functions available. The first version can be found in this thread. Go try it and stop blending frames with TemporalSoften.
RemoveGrain is kind of an abomination as a filter. Mostly because it has over 20 different modes that effectively are different filters. These are probably just numbered in the order the author came up with them and this can be very confusing. Having that many modes also leads to the big question of what these modes actually do and which ones are actually used. A quick check showed that modes 2, 4, 11, 12, 19 and 20 are the most common (most other modes are useless and/or pointless in case you’re wondering).
Mode 2: 3×3 clipping operation with no nice name
Mode 4: 3×3 median
Mode 11&12: 3×3 convolution using [1 2 1, 2 4 2, 1 2 1]
Mode 19: 3×3 convolution using [1 1 1, 1 0 1, 1 1 1]
Mode 20: 3×3 convolution using [1 1 1, 1 1 1, 1 1 1]
If you’re paying attention you can easily see that all except mode 2 are easily replaceable by easier to read functions that support more input formats. Go do that!