R10 – VFW enters the scene from the left

Another few days have passed and the VFW module is now ready for a first test out in reality. It supports all the same output formats as Avisynth 2.6 plus one more! (which you will probably never use) I have decided that the official extension for these virtual avi scripts should be .vpy. Think Video PYthon script to remember it. It was the best I could come up with that wasn’t used by something else as well. The VFW part has been tested with AVISource in Avisynth, MPC-HC and VirtualDub. Out of these VirtualDub is the only one that needs a small workaround since it detects the special compatibility mode based on file extension, you MUST SELECT the compat option in the File\Open dialog or it won’t open.

Of course there’s also a bunch of other changes such an installer that comes with all the needed runtimes, the usual pile of  Python module fixes and other things. Release early, Release often as the saying goes. My schedule is to try to make a new release every time I cross off something on the todo list.

I have also added a donation button. At least consider using it. Click on it once and then quickly close the window if you don’t want to donate anything. I will however never threaten to stop the project or anything else that’s close to drama if donations are low.

R9 – the mostly done release

This is the big release. The new things are:

  • Full documentation of all the included functions
  • The full source released as LGPL
  • Fixes bugs in most of the internal filters
  • Adds Python + operator and slicing support to clips
  • Fully working on linux (and probably osx too if you want to try compiling there)
  • Many other small things like more fixes to y4m output

With this release I consider the API stable and the core mostly feature complete. So start writing and porting plugins!

What’s next on the todo list (in no particular order):

  • Write a masktools replacement (probably with asmjit)
  • Write a general subtitling plugin, something like AssRender for Avisynth
  • Figure out what to do about the horrible resizers
  • Write a vfw module
  • Make it possible to write full plugins and not just functions in Python
  • Document the C API and make a small example of how to write an Invert filter
  • Other stuff


R8 – The sad interim release with some bugfixes

The title says it all, I hoped to have a bit more ready but this is at least a bit over halfway to my stated goals.

The big news is the addition of a function type. This allows some interesting things like this:

def selector1(sdict):
 a = sdict['N']
 a = a % 2
 b = {'val':a}
 # return the index of the clip to select
 return b

def selector2(sdict):
 # for these functions the key 'N' holds the requested frame number
 # and FX corresponds to the index of the frames
 frame_properties = get_props(sdict['F0'])
 if frame_properties['SomeFrameProperty'] < 0.5:
 return {'val':0}
 return {'val':1}

# some source for clip0 and clip1 here
ret = core.std.SelectClip(clips=[clip0, clip1], src=[clip0], selector=selector1)

# ret will now return every other frame from clip0 and clip1 interleaved

# selector2 shows how frame properties can be factored into it

R7 – the source is slowly coming

After almost 2 weeks of rapid improvement R7 is done. It mostly introduces more improvements for the python module, which now accepts unnamed arguments and has improved y4m output. The most important detail being the addition of a B value to the y4m header so it can signal higher bitdepths automatically too. Since it’s a minor change I hope x264, libav and other tools will adopt this property soon.

Another new thing that may interest some of you is that this build also comes with the header for developing your own plugins plus a the full source for all the functions in the std namespace (MIT licensed). I still have a few more things I want to add and revise before releasing the rest of the source to the public.

So instead of giving an vague “soon” as a release schedule for the source I will simply give you a list of things I want to finish before it goes out the door:

  • Decide which license to release it under. (discuss it if you want but I’m tilting towards something like free for non-commercial use, source modifications must be shared)
  • The addition of a function type. This is mostly for internal use as python handles callable objects well enough.
  • The ability to write whole filters in python. It would make quick prototyping easy and open up filter writing for more people (unfortunately python itself has one huge mutex called the GIL so if it’s used too much it could lead to serious slowdowns).
  • More checks, one of the most important things in my opinion is to detect errors early and report them. Especially for developers. The core already has a lot of checks in its handling of external plugins so new plugin writers will become aware of their mistakes.
  • Finish the standard functions. The main missing functions are Transpose, CropRel and several small ones for property manipulation and per frame selection.

Maybe I’ll reveal the long term goals next time.