AWarpSharp2 sharpens edges by warping them. This is a rewrite of the Avisynth filter (re)written by SEt.
warp.AWarpSharp2(clip clip[, int thresh=128, int blur=2, int type=0, int depth=[16, 8, 8], int chroma=0, int planes=<all>, bint opt=True, string cplace="mpeg1"]) warp.ASobel(clip clip[, int thresh=128, int planes=<all>, bint opt=True]) warp.ABlur(clip clip[, int blur=3, int type=1, int planes=<all>, bint opt=True]) warp.AWarp(clip clip, clip mask[, int depth=[3, 1, 1], int chroma=0, int planes=<all>, bint opt=True, string cplace="mpeg1"])
AWarpSharp2 performs edge detection, blurring, and warping, all in one.
ASobel performs edge detection, with an algorithm that might resemble the one used by std.Sobel.
Clip to process. Must have constant format and dimensions, 8..16 bit integer pixels, and it must not be RGB.
For the AWarp filter, clip must be either the same size as mask, or four times the size of mask in each dimension. The latter can be useful if better subpixel interpolation is desired, e.g. using nnedi3_rpow2.
If clip is upscaled to four times the original size, it must be top-left aligned. See the examples below.
- Edge mask. Must have the same format as clip.
No pixel in the edge mask will have a value greater than thresh. Decrease for weaker sharpening.
Range: 0..255. It will be scaled internally for bit depths greater than 8.
Controls the number of times to blur the edge mask. Increase for weaker sharpening.
Default: 2 for type 0, 3 for type 1.
Controls the type of blur to use. 0 means some kind of 13x13 average. 1 means some kind of 5x5 average. 1 is better, but requires more passes for similar sharpening strength as 0.
Controls how far to warp. Negative values warp in the other direction, i.e. will blur the image instead of sharpening.
Default for depth: 16 for AWarpSharp2, 3 for AWarp. Default for depth: depth // 2. Default for depth: depth.
Controls the chroma handling method. 0 will use the edge mask from the luma to warp the chroma. 1 will create an edge mask from each chroma channel and use those to warp each chroma channel individually.
Controls which planes are processed. Planes that are not processed are simply copied from the source frame, except in the AWarp filter, when clip is four times the size of mask, in which case the unprocessed planes will contain uninitialised memory.
If True, the best functions supported by your CPU will be used. If False, plain C++ functions will be used.
Chroma placement. Must be either "mpeg1" or "mpeg2".
Only relevant when chroma is 0 and the input is 4:2:0 or 4:2:2.
import vapoursynth as vs c = vs.get_core() src = c.d2v.Source("d2v.d2v") mask = c.warp.ASobel(src) mask = c.warp.ABlur(mask) # Use sx=0.375 sy=0.375 for top-left alignment. src4 = c.fmtc.resample(src, w=src.width * 4, h=src.height * 4, sx=0.375, sy=0.375) src4 = c.fmtc.bitdepth(src4, bits=8) warp = c.warp.AWarp(src4, mask)
mkdir build && cd build meson ../ ninja
./autogen.sh ./configure make
Meson runs faster than autogen.sh and configure.