VapourSynth for JavaScript.
This module allows you to create Vapoursynth
objects with the following
syntax:
let clip = vsjs.Vapoursynth(scriptContents, [scriptFilename]);
scriptContents
is the actual contents of the script (as a buffer) which
should be evaluated.
scriptFilename
is the path of the script being evaluated. This is optional.
See
the vapoursynth C documentation
for more information on vapoursynth's behavior if no filename is specified.
clip.getInfo();
Which returns some useful information about the clip:
{
"height": 480,
"width": 640,
"numFrames": 1000,
"fps": {
"numerator": 24000,
"denominator": 1001
},
"frameSize": 460800
}
frameSize
indicates how large the buffer must be to fetch frames from this
clip.
clip.getFrame(frameNumber, frameBuffer, callback);
frameNumber
is the desired frame.
frameBuffer
is the destination buffer. If no error occurs it will be populated
with the frame data.
callback
will be called when the frame data has been fetched with the
following arguments:
callback(error, frameNumber, frameBuffer);
error
is any exception encountered while getting the frame. If no exception
was encountered it will be null.
frameNumber
is the number of the fetched frame.
frameBuffer
is the same buffer which was originally provided, but now with
populated with frame data.
const fs = require('fs');
const vsjs = require('vsjs');
const pathToScript = 'C:\\VapourSynth\\example.vpy';
const clip = vsjs.Vapoursynth(fs.readFileSync(pathToScript), pathToScript);
console.log(clip.getInfo());
clip.getFrame(0, Buffer.alloc(clip.getInfo().frameSize), (err, frameNumber, buffer) => {
if (err) {
console.log(err);
} else {
console.log(`buffer now contains frame ${frameNumber}`);
}
});
Install our dependencies:
> npm install
Then we go through the normal node-gyp process:
> node-gyp configure [--VS_SDK="C:/Vapoursynth/Install/sdk"]
> node-gyp build
To be honest I'm not sure if I've followed all the best practices for gyp builds or if the build will work on non-windows systems. If you have trouble building please try editing the binding.gyp or open an issue.
The vapoursynth dlls are no longer installed system-wide. This presents a challenge as they must be copied to wherever vsjs will be used...