At this stage I can only recommend NOT to use VapourSynth.nim. It is too slow
(not because of nim, but I cannot find out why).
Testing the convolution filter in Python:
import vapoursynth as vs
core = vs.get_core()
core.std.SetMaxCPU('none')
clip = core.std.BlankClip(format=vs.GRAYS, length=100000, fpsnum=24000,
fpsden=1001, keep=True)
clip = core.std.Convolution(clip, matrix=[1,2,1,2,4,2,1,2,1])
clip.set_output()
Run
So I get:
$ vspipe test.vpy /dev/null
Output 100000 frames in 26.73 seconds (3740.91 fps)
My version:
import ../vapoursynth
import options
BlankClip( format=pfGrayS.int.some,
width=640.some,
height=480.some,
length=100000.some,
fpsnum=24000.some,
fpsden=1001.some,
keep=1.some).Convolution(@[1.0,2.0,1.0,2.0,4.0,2.0,1.0,2.0,1.0]).Null
Run
so:
$ nim c -f --gc:none -d:release -d:danger modifyframe
$ time ./modifyframe
real 0m37,872s
user 0m38,989s
sys 0m1,997s
which is: 2640.47fps
On the other hand you can create your own filters. In that regard, I have
managed to apply a simple Gauss filter to 100000frames in:
$ time ./modifyframe
real 8m25,425s
user 8m24,112s
sys 0m5,422s
which is 198fps. Way too slow when compared with the C++ version.