Python 3.10 or 3.8 is now required. Yay for super regular Python releases. The rest is more or less bug fixes. Have fun.
Category Archives: VapourSynth
R57 – The forgotten release
It happened a while ago and bugs got fixed. That’s all.
R56 – Testing by a thousand monkeys
As usual all major new releases have a lot of bugs. Now there are a lot fewer.
- Performance fix for large resolution (4k+)
- Fix memory leak in VFW when reloading script
- Make working dir behavior match API3 again
- Lots of other small fixes
Now only those pesky people who use the output() function in Python have poor performance.
R55 – Start of the API3 builds
Starting from today there will separate builds of the new audio branch (master) and the old (api3) branch provided for those who need full compatibility with old scripts.
The biggest fixes in this release is that the handling of pow in expr has been fixed and no longer produces unexpected output. There’s also a new vsrepo included that once again works. That’s about it. It’s the life of a maintenance branch where only super serious things will be fixed.
R53 – Once more there are bug fixes!
If you’re wondering why it’s taken so long since the previous release it’s partly due to R52 having surprisingly few bugs. You could say that I’m a too good coder (on occasion). The new R53 release mainly exists to add Python 3.9 support to windows and apply a few contributes bugfixes.
R52 – Titles are meaningless
Regression fixes for R51. Everyone should update from R51.
R51 – Not very interesting but here it is anyway
It’s not interesting because it’s all bug fixes and nothing else really. That’s because I’ve been busy working on audio support (99% done) and a big API update (~90% done) so come back for that in a few weeks. That’ll need a huge post.
R50 – Low risk release
R50 is a pure regression fix release and has nothing new of interest. Install it now!
R51 will probably have lots of changes merge and maybe there’ll be a new audio test build soon too.
R49 – Just another release
There’s a new release that fixes all known R48 regressions and bugs. Not much else to say about it really. One notable thing is that I got myself a raspberry pi recently so now I can actually test compilation on ARM easily and it won’t be broken all the time. I guess that’s interesting for some people.
Audio Support and how it works
Finally the first test version of audio support is ready and this post will describe how it works. Spoiler: It doesn’t work like in Avisynth.
In Python scripts audio nodes are just another unique type. They aren’t stuck together with a video track like in Avisynth. This can be both an advantage and a disadvantage, for example cutting audio and video at the same time by frame numbers will currently require a bit of user scripting. On the other hand with the correct helper functions it’ll be possible to manipulate multiple audio and video tracks as a group easily. Audio also always has a constant format unlike video.
Feedback and downloads are on the Doom9 forum as usual for highly experimental things.
Audio filters
- BestAudioSource – a new sample accurate but somewhat slow FFmpeg based source filter (usage: core.bas.Source(“rule6.mp4”))
- BlankAudio – a classic
- AudioSplice and AudioTrim – with the expected Python overloads of course
Output support
- VSPipe – outputs raw pcm audio and using the -y switch adds wave64 headers
- AVFS – uses the audio node assigned to output slot 1
- VFW – uses the audio node assigned to output slot 1 and video must be assigned to slot 0
An output example
import vapoursynth as vs
audio = vs.core.bas.Source("somefile.mp3", track=-1)
video = vs.core.std.BlankClip()
video.set_output(0)
audio.set_output(1)
API Notes and Changes
Currently the API isn’t completely stable but only minor changes are expected at this point so starting to port plugins. The only mildly breaking change is that the clip type in function argument strings now has been renamed to vnode and obviously the new anode type has been introduced which may confuse existing software tries to parse the argument strings.
The best way to think of audio nodes is as a type completely separate from video nodes that only happen to share some functions to manipulate them. For example you can’t mix audio and video nodes in the same VSMap key or in any other context.