Functions and Methods
kernels while ensuring the interface will always remain the same, even across different plugins with their own settings and expected behavior.
For example, if you want to downscale a video clip to 1280x720 using Bicubic (b=0, c=1),
you can call the preset, vskernels.kernels.SharpBicubic
, like so:
kernels.SharpBicubic().scale(clip, width=1280, height=720)
Of course, there is also a generic Bicubic class should you want to assign the values manually.
kernels.Bicubic(b=0, c=1).scale(clip, width=1280, height=720)
This allows for easy customizability, and every kernel can be given unique parameters if required.
kernels.Bicubic(b=0, c=0.5)
kernels.Lanczos(taps=3)
kernels.Impulse(impulse, oversample=8, taps=1)
Using this interface allows for consistency, which makes supporting a wide array of kernels in your own function very simple.
Supporting Kernels in Your Own Function
Get a kernel by name. |
|
Get all kernels as a list. |
Kernels are very flexible, so if you want to use them as-is, they’re simple enough to add. However, you should also consider newer users and their inexperience with Kernels, but potential exposure to abusing strings for “presets”.
With that in mind, we believe the most optimal method to implement kernels is by allowing your function to accept both a Kernel object and a string. This allows users who want to make full use of kernels to do so while not making it any harder for newer users to rely on strings.
Below is some example code for implementing kernel support into a simple descaling function:
from vskernels import Kernel, get_kernel
def descale(clip: vs.VideoNode,
width: int = 1280, height: int = 720,
kernel: Kernel | str = 'bicubic') -> vs.VideoNode:
"""A simple descaling function"""
if isinstance(kernel, str):
kernel = get_kernel(kernel)()
descaled_clip = kernel.descale(clip, width, height)
return descaled_clip
Which in turn allows users to call the function in multiple ways:
import vskernels as kernels
example1 = descale(clip, 1280, 720, kernels.Bicubic())
example2 = descale(clip, 1280, 720, 'bicubic')
Easy as pie!
Functions
Methods
Every Kernel class comes with a set of methods:
- class vskernels.kernels.Example.scale(self, clip, width, height, shift=(0, 0))
Perform a regular scaling operation
- Parameters
clip (
VideoNode
) – Input clipwidth (
int
) – Output widthheight (
int
) – Output heightshift (
Tuple
[float
,float
]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).
- Return type
VideoNode
- class vskernels.kernels.Example.descale(self, clip, width, height, shift=(0, 0))
Perform a regular descaling operation
- Parameters
clip (
VideoNode
) – Input clipwidth (
int
) – Output widthheight (
int
) – Output heightshift (
Tuple
[float
,float
]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).
- Return type
VideoNode
- class vskernels.kernels.Example.shift(self, clip, shift=(0, 0))
Perform a regular shifting operation
- Parameters
clip (
VideoNode
) – Input clipshift (
Tuple
[float
,float
]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).
- Return type
VideoNode
- class vskernels.kernels.Example.resample(self, clip, format, matrix=None, matrix_in=None)
Perform a regular resampling operation
- Parameters
clip (vs.VideoNode) – Input clip
format (vs.PresetFormat | vs.VideoFormat) – Output format
matrix (vs.MatrixCoefficients | Matrix | None) – Output matrix. If None, will take the matrix from the input clip’s frameprops.
matrix_in (vs.MatrixCoefficients | Matrix | None) – Input matrix. If None, will take the matrix from the input clip’s frameprops.
- Return type
VideoNode
All Available Kernels
- class vskernels.kernels.BSpline(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=1, c=0
- class vskernels.kernels.Bessel(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Bessel kernel.
- class vskernels.kernels.Bicubic(b=0, c=0.5, **kwargs)
Bases:
vskernels.kernels.Kernel
Built-in bicubic resizer. b=0, c=0.5
Dependencies:
VapourSynth-descale
- Parameters
b (
float
) – B-param for bicubic kernelc (
float
) – C-param for bicubic kernel
- class vskernels.kernels.BicubicDidee(**kwargs)
Bases:
vskernels.kernels.Bicubic
Kernel inspired by a Didée post.Bicubic b=-0.5, c=0.25
This is useful for downscaling content, but might not help much with upscaling.
- class vskernels.kernels.BicubicDogWay(**kwargs)
Bases:
vskernels.kernels.Bicubic
Kernel inspired by DogWay.
Bicubic b=-0.6, c=0.4
This is useful for downscaling content with ringing.
- class vskernels.kernels.BicubicSharp(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=0, c=1
- class vskernels.kernels.Bilinear(**kwargs)
Bases:
vskernels.kernels.Kernel
Built-in bilinear resizer.
- class vskernels.kernels.BlackHarris(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Black-Harris kernel.
- class vskernels.kernels.BlackMan(taps=4, **kwargs)
Bases:
vskernels.kernels.FmtConv
fmtconv’s blackman resizer.
- class vskernels.kernels.BlackManMinLobe(taps=4, **kwargs)
Bases:
vskernels.kernels.FmtConv
fmtconv’s blackmanminlobe resizer.
- class vskernels.kernels.BlackNuttall(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
BlackNuttall kernel.
- class vskernels.kernels.Bohman(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Bohman kernel.
- class vskernels.kernels.Box(taps=4, **kwargs)
Bases:
vskernels.kernels.FmtConv
fmtconv’s box resizer.
- class vskernels.kernels.Catrom(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=0, c=0.5
- class vskernels.kernels.Cosine(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Cosine kernel.
- class vskernels.kernels.FlatTop(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
FlatTop kernel.
- class vskernels.kernels.FmtConv(taps=4, **kwargs)
Bases:
vskernels.kernels.Kernel
Abstract fmtconv’s resizer.
Dependencies:
fmtconv
- class vskernels.kernels.Gaussian(curve=30, **kwargs)
Bases:
vskernels.kernels.FmtConv
fmtconv’s gaussian resizer.
- class vskernels.kernels.Ginseng(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Ginseng kernel.
- class vskernels.kernels.Hamming(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Hamming kernel.
- class vskernels.kernels.Hann(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Hann kernel.
- class vskernels.kernels.Hermite(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=0, c=0
- class vskernels.kernels.Impulse(impulse, oversample=8, taps=1, **kwargs)
Bases:
vskernels.kernels.FmtConv
fmtconv’s impulse resizer.
- class vskernels.kernels.Kaiser(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Kaiser kernel.
- class vskernels.kernels.Kernel(**kwargs)
Bases:
abc.ABC
Abstract scaling kernel interface.
Additional kwargs supplied to constructor are passed only to the internal resizer, not the descale resizer.
- kwargs: Dict[str, Any]
Arguments passed to the kernel filter
- class vskernels.kernels.Lanczos(taps=3, **kwargs)
Bases:
vskernels.kernels.Kernel
Built-in lanczos resizer.
Dependencies:
VapourSynth-descale
- Parameters
taps (
int
) – taps param for lanczos kernel
- class vskernels.kernels.MinSide(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
MinSide kernel.
- class vskernels.kernels.Mitchell(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=1/3, c=1/3
- class vskernels.kernels.NearestNeighbour(**kwargs)
Bases:
vskernels.kernels.Gaussian
Nearest Neighbour kernel.
- class vskernels.kernels.Parzen(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Parzen kernel.
- class vskernels.kernels.Point(**kwargs)
Bases:
vskernels.kernels.Kernel
Built-in point resizer.
- class vskernels.kernels.Quadratic(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Quadratic kernel.
- class vskernels.kernels.Robidoux(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=0.37822, c=0.31089
- class vskernels.kernels.RobidouxSharp(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=0.26201, c=0.36899
- class vskernels.kernels.RobidouxSoft(**kwargs)
Bases:
vskernels.kernels.Bicubic
Bicubic b=0.67962, c=0.16019
- class vskernels.kernels.Sinc(taps=4, **kwargs)
Bases:
vskernels.kernels.FmtConv
fmtconv’s sinc resizer.
- class vskernels.kernels.Spline16(**kwargs)
Bases:
vskernels.kernels.Kernel
Built-in spline16 resizer.
Dependencies:
VapourSynth-descale
- class vskernels.kernels.Spline36(**kwargs)
Bases:
vskernels.kernels.Kernel
Built-in spline36 resizer.
Dependencies:
VapourSynth-descale
- class vskernels.kernels.Spline64(**kwargs)
Bases:
vskernels.kernels.Kernel
Built-in spline64 resizer.
Dependencies:
VapourSynth-descale
- class vskernels.kernels.Welch(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Welch kernel.
- class vskernels.kernels.Wiener(oversample, **kwargs)
Bases:
vskernels.kernels.Impulse
Wiener kernel.