R32 – Interlaced Resizing is Evil

But we added it anyway. Seriously people, just say no to interlaced material. Or de-interlace it properly. And you should all update since a bug that caused caches to not always be automatically inserted where they should be was fixed.

Breaking changes:

Progressive material that’s encoded as interlaced (far too common) may now by default have interlaced resizing applied to it. Use core.std.SetFieldBased(clip, 0) to easily flag it as progressive before resizing.

PlaneAverage has now been removed. Use PlaneStats instead.

VSPipe outputs planar RGB in the GBR plane order now to match what other programs expect as input.

2016-03-26 12.09.00

Unsuspecting flowers having nothing to do with this post

R31 – Boring Maintenance

All code is bug free until someone else tries to run it. It’s a scientific fact!

This release fixes all known resizer issues that have been discovered so far. Fortunately none of them led to image corruption, just incorrect rejection of certain conversions.

And it can’t be a release without warning about something that’s slightly changed in some way. So here comes the warning. The installer now writes the registry keys related to the 64bit version into HKLM64 which makes more sense. All the old entries will also be kept until everyone has switched to the new ones. This is in preparation of the day the 32bit VapourSynth windows version stops existing, which unfortunately won’t be anytime soon despite it being over 12 years since we got x64.

R30 – Recommended by 9 out of 10 Installer Haters

Other possible titles:

  • DEATH TO… Installers?
  • More Avisynth than Avisynth
  • Improvements to Reduce Seeking in Source Filters

Welcome to the glorious even numbered release of R30! A release with so many new things a single topic cannot do it justice.

The first point proves that sometimes less is more. There’s now a version for windows that doesn’t need to be installed. It’s used together with embeddable Python and allows vspipe to be used for output. It’s also possible to use the VapourSynth Editor with it by putting it in the same directory.

For those of you who still can’t live without certain Avisynth filters there are great news. Avisynth 2.6 plugins are now supported in both 32 and 64 bit builds. Note that 64 bit builds can’t use 2.5 plugins. Which isn’t a real problem since almost none exist anyway.

And finally the performance related change. This continues the work in R29 of making the time it takes to produce a single frame more consistent. Plugins can now signal that they prefer to have frames requested in sequential order, if possible, and a reasonable effort will be made to make it that way. This fixes most of the remaining possible slowdowns to in scripts because the source filter has to search too much. Note that new source filter builds are needed which will be out soon. FFMS2, d2vsource and L-SMASH works will be released with support for this in a few days… or weeks.

Of course there are some other small fixes too but they aren’t really interesting enough to list here.

Possibly breaking changes:

The resize functions have their default behavior changed to make the colorimetry arguments override the frame properties by default. Previously the frame properties would always take precedence when present. To restore the old behavior set prefer_props.

PlaneDifference is completely removed and PlaneAverage will be completely removed in R32. They’re both replaced by PlaneStats which can calculate multiple metrics at once with no speed penalty.

R29 – DEATH TO SWSCALE!!!

Today is a great day. SWScale is no longer the default resizing library included with the core. Instead the much more accurate zimg library is now the default. This means a few new resize algorithms are available and there are many new options. The change has been made to break as few scripts as possible but there is one important difference, since YUV has so many different variants, the matrix to use always has to be specified when converting to YUV and it also sometimes has to be specified when converting from YUV.

Will always work:
c = core.resize.Bilinear(c, format=vs.YUV420P8, matrix_s="709")

Will now only work if c is a YUV clip:
c = core.resize.Bilinear(c, format=vs.YUV420P8)

Likewise this will always work for YUV input:
c = core.resize.Bilinear(c, format=vs.RGB24, matrix_in_s="709")

But this will only work with YUV input if the proper matrix is set as a frame property:
c = core.resize.Bilinear(c, format=vs.RGB24)

There are also many other fixes and changes such as:

  • More consistent performance with many threads
  • Various VIVTC fixes
  • R28 would sometimes misdetect Python paths and fail
  • More specific error messages in most core filters

R28 – eControversy

What’s controversial you ask? Checking if plugins actually use the API as documented. Walls of derping on the subject were quickly created. But enough about that, now it’s time to list the new features and interesting changes.

The first thing you’ll notice is that Python 3.5 is now required instead of 3.4. This is good because it’s not bad. And I don’t have to keep an ancient compiler around anymore when developing things. Windows development only needs VS2015 now.

Other interesting changes are:

  • Expr is much faster because it has runtime code generation – there should be much less reason to use Lut(2) now
  • Expr can have 26 input clips – many instances of Lut2 and other small logic filters can now be folded into one much faster expression
  • Float support in PlaneAverage, imwri, Lut and Lut2 (only output in the lut filters)
  • “vs.get_core()” can be used everywhere in scripts – previously it would throw an error if used in script function callbacks
  • Much smaller installer

And remember, this project doesn’t run on e-recognition. It runs on despair and hate on interweb forums. Occasionally supplemented by small donations.