gf
Authors: | Manao, Tsp, TSchniede, SEt, Fizick (Alexander Balakhnin), Vit, Firesledge, pinterf | |
Version: | 2.7.45 | |
git: | https://github.com/pinterf/mvtools/tree/mvtools-pfmod | |
Forum: | https://forum.doom9.org/showthread.php?t=173356 | |
Base versions: | 2.6.0.5 + 2.5.11.22 | |
Base download: | Contained in the Dither package, http://ldesoras.free.fr/prod.html | |
Category: | Misc Plugins | |
Requirements: | YV12, YV16, YV24 or YUY2, Y, YUV420P10-16, YUV422P10-16, YUV444P10-16 for finding vectors | |
8-32 bit Y, YUV 420, 422, 444 and planar RGB for MSuper, MCompensate and MDegrains and MFlowXX family | ||
License: | GPL |
MVTools plugin for Avisynth+ and AviSynth 2.6 is collection of functions for estimation and compensation of objects motion in video clips. Motion compensation may be used for strong temporal denoising, advanced framerate conversions, image restoration and other tasks.
The plugin contains the motion estimation server-function MAnalyse to find the motion vectors and several motion compensation client-functions (MCompensate, MMask and others) which use these vectors.
Plugin uses block-matching method of motion estimation (similar methods are used in MPEG2, MPEG4, etc). At analysis stage plugin divides frames by small blocks and try to find for every block in current frame the most similar (matching) block in second frame (previous or next). The relative shift of these blocks is motion vector. The main measure of block similarity is sum of absolute differences (SAD) of all pixels of these two blocks compared. SAD is a value which says how good the motion estimation was.
The output of MAnalyse (server) is special clip with motion vector information in some format.
At compensation stage the plugin client functions read the motion vectors and use them to move blocks and form motion compensated frame (or realize some other full or partial motion compensation or interpolation function). Every object (block) in this (fully) compensated frame is placed in the same position as this object in current frame. So, we may (for example) use strong temporal denoising even for quite fast moving objects without producing annoying artefactes and ghosting (object's features and edges are coincide if compensation is perfect). Plugin can create compensated neighbor frames for every current frame, and denoise it by internal function. Alternatively, you can use compensated and original frames to create interleaved clip, denoise it by any external temporal filter, and select central cleaned original frames for output (see examples).
Of course, the motion estimation and compensation is not ideal and precise. In some complex cases (video with fading, ultra-fast motion, or periodic structures) the motion estimation may be completely wrong, and compensated frame will be blocky and (or) ugly. Severe difficulty is also due to objects mutual screening (occlusion) or reverse opening. Complex Avisynth scripts with many motion compensation functions may eat huge amount of memory and result in very slow processing. It is not simple but quite advanced plugin. Use it for appropriate cases only, and try tune its parameters. There are many discussions about motion compensation using at doom9 Avisynth forum. In particular see old MVTools thread , true motion thread, new MVTools thread, MVTools-pfmod thread and some other. Try read postings in addition to this documentation and ask for support there. If you really interested in motion estimation and compensation topics, you can easy find numerous scientific publications (use WWW search).
2.5.11.22 and 2.6.0.5 classic versions had some limitations, only progressive YV12, YUY2 video were supported.
Versions from 2.7.5.22 support all 420, 422, 444 planar YUV formats, 8 and 10-16 bits
with recent Avisynth Plus versions.
Since 2.7.40 almost all 8-32 bit Y, YUV and planar RGB colorspaces are supported for many filters.
Except that for motion vector search only 8-16 bit Y or YUV clips are supported.
Use color format conversion and try using (smart) bob-deinterlace for
interlaced video (SeparateFields
may works too with or without
SelectEven
/SelectOdd
).
Some complex scripts (QTGMC
, TempGaussMC
,
MVBOB
, MCBOB
) use MVTools for
motion compensated
deinterlacing.
Alternatively you can try to use
Motion plugin by
mg262.
MVTools version 2 is a major internal and external upgrade. Main goals of MVTools v2.X branch are clarity and stability (in particular for multithreaded environment with multicore CPU) and of course performance and memory usage improving.
Main mean for goals achievement is removing MVTools internal buffer
with mysterious (for many people) index (idx) and some other internal tricks
(see thread
MVTools
without idx
).
To implement this without performance degradance we use normal effective
Avisynth cache and introduce new mandatory preparation stage (before motion
estimation by MAnalyse
).
At this stage a new function MSuper
will get source clip and
prepare special "super" clip with multilevel (hierarchical scaled) frames data
(in previous MVTools versions 0.X-1.X these multilevel datas were prepared,
saved and cached internally with idx as an index of pseudo-clip of these
"superframes").
The super clip is then used by both MAnalyse
function and client
motion compensation functions.
Related syntax change: some MAnalyse
parameters (pel, sharp)
are moved to MSuper
function.
Other essential external change is replacing all named clips parameters by unnamed (mandatory, without double-quotes in description) for normal work of Avisynth implicit "last" clip.
Also faster planar processing for YUY2 is implemented in v2.0.
Since v2.2 MVTools.dll
is renamed to
mvtools2.dll
, and since v2.3 all functions are renamed from
MVxxx to Mxxx (e.g. from MVAnalyse
to MAnalyse
),
so you can continue to use old MVTools 1.x with your old scripts, and you
are able to use / make new scripts with MvTools 2.x without changing the
dll loading.
I also have an intention to remove (not implement) some obsolete functions like MVDenoise, MVFlowFps2 (please, vote).
Full list of changes see at Revisions section.
Generally, new MVTools 2.0 should provide similar results as v1.11.4. Algorithm improvements is planned in v2.1 and later.
Note: MVTools v1.x branch is not developed and not supported anymore (by Fizick).
To benefit from native multi-threading, you'll have to install the
latest avstp.dll
in your plugin folder.
This is recommended but not mandatory.
Filters that use motion vectors have common parameters.
Those are the scene-change detection thresholds, and the isse MMX
flag.
They also use one or several vectors stream, which are produced by
MAnalyse
.
thSCD1 (int, 400)
Threshold which decides whether a block has changed between the previous frame and the current one. When a block has changed, it means that motion estimation for it isn't relevant. It occurs for example at scene changes. So it is one of the thresholds used to tweak the scene changes detection engine. Raising it will lower the number of blocks detected as changed. It may be useful for noisy or flickered video. The threshold is compared to the SAD (Sum of Absolute Differences, a value which says how bad the motion estimation was ) value. For exactly identical blocks we have SAD = 0. But real blocks are always different because of objects complex movement (zoom, rotation, deformation), discrete pixels sampling, and noise. Suppose we have two compared 8×8 blocks with every pixel different by 5. It this case SAD will be 8×8×5 = 320 (block will not detected as changed for thSCD1 = 400). Actually this parameter is scaled internally in MVTools, and it is always relative to 8x8 block size. Default is 400 (since v.1.4.1).
thSCD2 (int, 130)
Threshold which sets how many blocks have to change for the frame to be considered as a scene change. It is ranged from 0 to 255, 0 meaning 0 %, 255 meaning 100 %. Default is 130 (which means 51 %).
isse (bool, true)
Flag which allows to enable (if set to True) or disable ISSE, MMX and other CPU optimizations (for debugging). If your processor doesn't support CPU optimizations, it will be disabled anyway (and you won't be able to activate them).
planar (bool, false)
Flag to use special planar color format for YUY2
clips both for input and output of function.
It uses special trick for storing of frames with planar color data
organisation (separate Y, U, V planes in memory) in normal interleaved YUY2
frames format as a container.
This way we can avoid numerous internal interleaved to planar conversions and
increase speed.
You can convert normal interleaved YUY2 source clip to planar format with
Interleaved2planar
function from
RemoveGrain plugin by
kassandro
,
and convert final result by Planar2interleaved
function.
This special planar YUY2 format is also supported by Removegrain plugin by
Kassandro, MaskTools2 plugin by Manao and some others.
This trick will not be needed in Avisynth v2.6 with native support of planar
YV16 format.
This paramenter is ignored for YV12 clips. Note: super clip is always planar.
MSuper ( clip, int hpad (8), int vpad (8), int pel (2), int levels (0), bool chroma (true), int sharp (2), int rfilter (2), clip pelclip (undefined), bool isse, bool planar, bool mt (true) )
Get source clip and prepare special "super" clip with multilevel
(hierarchical scaled) frames data.
The super clip is used by both MAnalyse
and motion compensation
(client) functions.
For storing and transferring its parameters we use audio properties of super
clip (specifically, num_audio_samples
) as a trick.
So, audio is killed in super clip.
That is one of reasons why we additionally use source clip with client
functions.
You may have a look to super clip yourself (it has normal format).
Supported formats: greyscale, YUV and planar RGB 8-32 bits, YUY2
You can use different Super clip for generation vectors with MAnalyze and a different
super clip format for the actual action. Thus MFlowFPS can support native RGB (planar),
and MDegrain can work with 32 bit float input clips.
hpad
It is horizontal padding added to source frame (both left and right). Small padding is added for more correct motion estimation near frame borders. (In MVTools before v2.0 the value of padding = block size was always used internally. Now it is not strict but recommended value.)
vpad
It is vertical padding added to source frame (both top and bottom).
pel
It is the accuracy of the motion estimation. Value can only be 1, 2 or 4. 1 means a precision to the pixel. 2 means a precision to half a pixel, 4 means a precision to quarter a pixel, produced by spatial interpolation (more accurate but slower and not always better due to big level scale step). Default is 2 since v1.4.10.
levels
It is the number of hierarchical levels in super clip frames.
MAnalyse
is need in all levels, but for other client functions
single finest level is enough (coarser levels are not used).
0 = auto, all possible levels are produced.
chroma
If set to true, it allows to prepare chroma planes too in superclip. False means luma only.
sharp
Subpixel interpolation method for pel = 2 or 4. Use:
0 | for soft interpolation (bilinear), |
1 | for bicubic interpolation (4 tap Catmull-Rom), |
2 | for sharper Wiener interpolation (6 tap, similar to Lanczos). |
This parameter controls the calculation of the first level only. When pel = 4, bilinear interpolation is always used to compute the second level.
rfilter
Hierarchical levels smoothing and reducing (halving) filter.
0 | Simple 4 pixels averaging like unfiltered SimpleResize (old method), |
1 | Triangle (shifted) filter like ReduceBy2 for more smoothing (decrease aliasing), |
2 | Triangle filter like BilinearResize for even more smoothing, |
3 | Quadratic filter for even more smoothing, |
4 | Cubic filter like BicubicResize(b=1, c=0) for even more smoothing. |
Default is 2 (since v2.3.1). You may also try to apply some external filter to superclip or its coarse bottom part (by appropriate crop and overlay).
pelclip
Optional upsampled source clip for using instead of internal subpixel interpolation (for pel > 1). Pixels at rows and colunms positions multiple to pel (0, 2, 4,… for pel = 2) (without padding) must be original source pixels, other pixels must be interpolated. Example for pel = 2:
LanczosResize (width*2, height*2, src_left=0.25, src_top=0.25)
Recent note: it is true for luma, but it doesn't correspond to chroma
pixels positions of internal MVTools interpolation.
Nevertheless vectors and motion compensation are quite similar for usual
clips, same chroma would be with src_left = 0.5
for YUY2 and
additionally src_top = 0.5
for YV12.
Other useful example is EEDI2 edge-directed resampler.
mt
Enables internal multi-threading (through avstp.dll).
MAnalyse ( clip super, int blksize (8), int blksizeV (blksize), int levels (0), int search (4), int searchparam (2), int pelsearch (pel), bool isb (false), int lambda (0 | 1000*blksize*blksizeV/64), bool chroma (true), int delta (1), bool truemotion (true), int lsad (400 | 1200), int plevel (0 | 1), bool global (truemotion), int pnew (0 | 50), int pzero (pnew), int pglobal (0), int overlap (0), int overlapV (overlap), string outfile (""), int dct (0), int divide (0), int sadx264 (0), int badSAD (10000), int badrange (24), bool isse, bool meander (true), bool temporal (false), bool trymany (false), bool multi (false), bool mt (true), int scaleCSAD (0) )
Get prepared multilevel super clip, estimate motion by block-matching method and produce special output clip with motion vectors data (used by other functions).
Some hierarchical multi-level search methods are implemented (from coarse image scale to finest). Function uses zero vector and neighbors blocks vectors as a predictors for current block. Firstly difference (SAD) are estimated for predictors, then candidate vector changed by some values to some direction, SAD is estimated, and so on. The accepted new vector is the vector with minimal SAD value (with some penalty for motion coherence).
Try using MShow
function to check estimated motion field and
tune parameters.
Note: MAnalyse
(if pel ≥ 2) detects fieldbased
video flag (after SeparateFields
) and automatically makes
correction of motion vectors according to verticlal shift of fields with
different parity.
Try using AssumeFrameBased if you do not need in it.
Technical note: MAnalyse does not generate a regular clip that can be
displayed.
Don't try to modify its content or it will get corrupted.
It is made of a single long line, actually containing binary data (vectors,
block SAD, misc. information…) instead of pixel values.
It also alters the audio descriptor to pass additional data to other
filters before any frame request.
Therefore, in the current state, a vector clip cannot be saved to a lossless
file and reloaded later for processing.
If you want to do so, you have to transcode it first with
MStoreVect
and MRestoreVect
.
Furthermore, joining vector clips generated with different parameters may
lead to unexpected results, because the aforementioned additional data is
global to the whole clip and is not updated on each frame.
When the MAnalyse filter is destructed (removed from the memory), the
additional data is lost too, and an attempt to using the produced vectors
may crash the application or give wrong results.
For this reason, avoid using MAnalyse in ScriptClip
and other
functions of the Avisynth runtime subsystem.
super
This is multilevel super clip prepared by MSuper function. Mandatory.
blksize
Size of a block (horizontal).
Larger blocks are less sensitive to noise, are faster, but also less
accurate.
List of available block sizes (blksize x blksizeV)
64x64, 64x48, 64x32, 64x16
48x64, 48x48, 48x24, 48x12
32x64, 32x32, 32x24, 32x16, 32x8
24x48, 24x24, 24x32, 24x12, 24x6
16x64, 16x32, 16x16, 16x12, 16x8, 16x4, 16x2
12x48, 12x24, 12x16, 12x12, 12x6, 12x3
8x32, 8x16, 8x8, 8x4, 8x2, 8x1
6x24, 6x12, 6x6, 6x3
4x8, 4x4, 4x2
3x6, 3x3
2x4, 2x2
Note: some smaller block sizes can only be available in 4:4:4 formats, due to block size division (chroma subsampling)
blksizeV
Vertical size of a block. Default is equal to horizontal size.
levels
A positive value is the number of levels used in the hierarchical analysis made while searching for motion vectors.
Negative or zero value is the number of coarse levels NOT used in the hierarchical analysis made while searching for motion vectors. The lower the usually better (vectors with any length can be found). It is kept variable for study's purposes mostly. Sometimes levels is useful to prevent large (false) vectors (computer graphics, etc). Default = 0 since v.2.5 (all levels are used).
search, searchparam, pelsearch
search decides the type of search at every level, searchparam is an additional parameter (step, radius) for this search, and pelsearch is the radius parameter at finest (pel) level. Below are the possible values for the search type:
0 | 'OneTimeSearch'. searchparam is the step between each vectors tried (if searchparam is superior to 1, step will be progressively refined). |
1 | 'NStepSearch'. N is set by searchparam. It's the most well known of the MV search algorithm. |
2 | Logarithmic search, also named Diamond Search. searchparam is the initial step search, there again, it is refined progressively. |
3 | Exhaustive search, searchparam is the radius (square side is 2*radius+1). It is slow, but it gives the best results, SAD-wise. |
4 | Hexagon search, searchparam is the range. (similar to x264). |
5 | Uneven Multi Hexagon (UMH) search, searchparam is the range. (similar to x264). |
6 | pure Horizontal exhaustive search, searchparam is the radius (width is 2*radius+1). |
7 | pure Vertical exhaustive search, searchparam is the radius (height is 2*radius+1). |
isb
Allows to choose between a forward search (motion from the previous frame to current one) for isb =false and a backward search (motion from following frame to the current one) for isb =true (isb stands for "IS Backward", it is implemented and named exactly as written here, do not ask :-).
chroma
Set to true, it allows to take chroma into account when doing the motion estimation (false: luma only).
delta
Set the frame interval between the reference frame and the current frame.
By default, it's 1, which means that the motion vectors are searched between
the current frame and the previous (or next) frame.
Setting it to 2 will allow you to search mvs between the frame n and n-2 or
n+2 (depending on the isb setting).
If delta is negative or null, -delta is the absolute index of a fixed
reference frame.
In this case, the isb value is ignored.
Only a few functions are compatible with fixed reference frames
(MCompensate
, MFlow
and MDegrain*
).
pzero
relative penalty (scaled to 256) to SAD cost for zero vector. It prevent replacing of quite good predictor by zero vector with a little better SAD (lambda is not used for zero vector). Default is equal to pnew since v1.11.
pglobal
Relative penalty (scaled to 256) to SAD cost for global predictor vector. (lambda is not used for global vector).
overlap
block overlap value (horizontal).
Must be even and less than block size (up to blksize/2 for
MCompensate
).
The step between blocks for motion estimation is equal to
(blksize − overlap).
N blocks cover the size
((blksize − overlap) * N + overlap)
on frame.
Try using overlap value from blksize/4 to bblksize/2.
The greater overlap, the more blocks number, and the lesser the processing
speed.
However the default value 0 may cause blocking-like artefacts.
Functions with overlap support are:
MFlow
, MFlowInter
, MFlowFps
,
MShow
, MMask
, MCompensate
and all the
MDeGrain*
.
<----oh---> <---oh----> <---oh---> <------------bh------------> <------------bh------------> <------------bh------------> <------------bh------------> ^ +--------------------------+ +--------------------------+ | | +---------|----------------+ +--------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | bv | | | | | | | | | | | | | | | | | ^ ^ | |+--------------------------+ |+--------------------------+ | | | | || |+---------|----------------+ |+--------------------------+ ov | | || || || || || || || || | | | || || || || || || || || | | | || || || || || || || || v | v +|----------------|--------+| +|--------||------||-------+| || | | +|---------|------|--------+| +|--------|----------------+| bv | | | | | | | | ^ | +--------------------------+| +--------------------------+| | | | ^ || +---------|----------------+| +--------------------------+| ov | | || || || || || || || || | | | || || || || || || || || | | | || || || || || || || || v v | |+---------------|---------|+ |+--------||------||-------|+ || | | |+--------|------|---------|+ |+-------|-----------------|+ | | | | | | | | | ^ ^ bv |+--------------------------+ |+--------------------------+ | | | | || |+---------|----------------+ |+--------------------------+ ov | | || || || || || || || || | | | || || || || || || || || | | | || || || || || || || || v | | +|----------------|--------+| +|--------||------||-------+| || bv v | +|---------|------|--------+| +|--------|----------------+| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | v +--------------------------+ +---------|-------|--------+ | +--------------------------+ +--------------------------+ bh=blocksize horizontal bv=blocksize vertical oh=overlap horizntal ov=overlap vertical
overlapv
Vertical block overlap value. Default is equal to horizontal. Must be even for YV12 and less than block size.
outfile
Name of file to write motion vectors data, or an empty string (nothing
written).
This data may be used by some external program or may be by next MVTools
versions for second pass coding, etc.
Produced binary file has a header (MVAnalysisData
structure,
see MVInterface.h
source code), and the data sequence:
Important: using outfile in a multi-threaded context (Classic Avisynth MT modes 1, 2 and 4, or setting other than MT_SERIALIZED for Avisynth+) has an undefined behaviour and will generate a corrupted file. Note: Since 2.7.32 the filter registers itself automatically MT_SERIALIZED instead of MT_MULTI_INSTANCE under Avisynth+ when an output file is given
dct
Using of block DCT (frequency spectrum) for blocks difference (SAD) calculation. In particular it can improve motion vector estimation at luma flicker and fades.
0 | Usual spatial blocks, do not use DCT. |
1 | Use block DCT instead of spatial data (slow for block size 8x8 and very slow for other sizes). |
2 | Mixed spatial and DCT data; weight is dependent on mean frame luma difference. |
3 | Adaptive per-block switching from spatial to equal-weighted mixed mode (experimental, a little faster). |
4 | Adaptive per-block switching from spatial to mixed mode with more weight of DCT (experimental, a little faster). |
5 | SATD instead of SAD for luma. |
6 | Same as 2 only use SATD. |
7 | Same as 3 only use SATD. |
8 | Same as 4 only use SATD. |
9 | Similar to 2, use SATD and weight ranges from SAD only to equal SAD & SATD. |
10 | Similar to 3/4,use SATD weight is on SAD, only on strong luma changes. |
Modes 5 to 10 were added in v1.9.5.3.
divide
post-processing motion vectors by dividing every block into 4 subblocks.
0 | Do not divide |
1 | Divide blocks and assign the original vector to all 4 subblocks |
2 | Divide blocks and assign median (with 2 neighbors) vectors to subblocks |
Block size and overlap values must be selected to be acceptable after internal dividing.
sadx264
the parameter is ineffective in 2.7.x branch
badSAD
SAD threshold to make more wide second search for bad vectors. Value is scaled to block size 8x8. Default is 10000 (disabled), recommended is about 1000–2000.
badrange
The range (radius in image pixel units) of wide search for bad blocks. Use positive value for UMH search and negative for Exhaustive search.
meander
Alternate blocks scan in rows from left to right and from right to left. Default is True since v2.5.1.
temporal
Use temporal predictors from previous frame motion vectors.
Not compatible with SetMTMode
(classic Avisynth) or other than MT_SERIALIZED mode for Avisynth+, and requires a linear access to
work correctly.
Note: Since 2.7.32 the filter registers itself automatically MT_SERIALIZED instead of MT_MULTI_INSTANCE under Avisynth+ when temporal=true is given.
trymany
Try to start searches around many predictors (besides finest level).
multi
When set to true, MAnalyse generates the motion vectors for all the
reference frames −delta…−1 and +1…+delta.
The resulting clip is made of single MAnalyse results interleaved in the delta
order −1, +1, −2, +2, …, −delta, +delta, where negative
values indicate backward searchs.
This order is similar to the motion vector parameters in
MDegrain3
.
The output clip is intended to be used directly in MDegrainN
.
Single motion vector clips can be extracted with a
SelectEvery(delta*2, n)
.
mt
Enables internal multi-threading (through avstp.dll). default is true When avstp.dll is not present, parameter is ineffective.
Important note!
Parameter mt=true is giving a bit worse and not 100% similar result as mt=false.
This is _not_ Avisynth's multithreading, this is the filter's internal one.
For speedup you can always use Avisynth's mt support (see Prefetch) and
delete avstp.dll or set mt=false if you still need avstp.dll for other tasks.
When mt = true and avstp.dll is found then internal multithreading is active.
Internal mt is processing the X*Y sized motion block matrix in "slices", where
slices are still matrixes with with a smaller vertical size. The original matrix
is divided vertically to 2, 3, ... (depends on processor count) units.
As and example: let's suppose we have two threads. One thread is processing
blocks with y coordinates from 0 to height/2-1 (=top half), and the other thread from
height/2 to height-1 (bottom half).
Unfortunately - for algorithmical reasons - this speedup results in different output as
the single-thread case due to the fact that the unit boundaries are handled specially.
A non-multithreaded approach is processing the whole frame in a single run, in one thread, having
only 2 (namely the top and bottom lines) boundary, while the N-thread version has N*2 boundary.
scaleCSAD
Fine tune chroma part weight in SAD calculation (since 2.7.18.22)
Possible values for luma:chroma SAD ratio
-2: 4:0.5
-1: 4:1
0: 4:2 (default, same as the native ratio for YV12)
1: 4:4
2: 4:8
There are few advanced parameters which set coherence of motion vectors for so called true motion estimation. Some matched blocks from other frame may be most similar to sample blocks of current frame by intensity criterion (SAD), but not correspond to true object motion. For example, they may belong to other similar object in different corner of the frame or belong to some periodic structure. "True motion" parameters try maintain the motion field more coherent, instead of some random vectors distribution. It is especially important for partial motion compensation and interpolation. Some parameters are experimental and may be removed (replaced) in next versions after testing. Please report your conclusions.
truemotion
This is a preset of these parameters values. It allows easy to switch default values of all "true motion" parameters at once. Set it true for true motion search (high vector coherence), set it false to search motion vectors with best SAD. Default is true since v1.4.10. In any case you can tune each parameter individually.
lambda
Set the coherence of the field of vectors. The higher, the more coherent. However, if set too high, some best motion vectors can be missed. Values around 400–2000 (for block size 8) are strongly recommended. Internally it is coefficient for SAD penalty of vector squared difference from predictor (neighbors), scaled by 256. Default is 0 for truemotion = false and 1000*blksize*blksizeV/64 for truemotion = true.
lsad
SAD limit for lambda using. Local lambda is decreased (smoothly since v1.10.2) if SAD value of vector predictor (formed from neighbor blocks) is greater than the limit. It prevents bad predictors using but decreases the motion coherence. Values above 1000 are recommended for true motion. Scaled to 8x8 blocksize internally (since v2.0.11). Default is 400 for truemotion = false and 1200 for truemotion = true.
pnew
Relative penalty (scaled to 256) to SAD cost for new candidate vector. New candidate vector must be better will be accepted as new vector only if its SAD with penalty (SAD + SAD*pnew/256) is lower then predictor cost (old SAD). It prevent replacing of quite good predictors by new vector with a little better SAD but different length and direction. Default is 0 for truemotion = false and 50 for truemotion = true.
plevel
Penalty factor lambda level scaling mode. Dependence from hierarchical level size:
0 | No scaling |
1 | Linear |
2 | Quadratic |
Note that vector length is smaller at lower level. Default is 0 for truemotion = false and 1 for truemotion = true.
global
Estimate global motion (at every level) and use it as an additional predictor. Only pan shift is estimated (no zoom and rotation). Use false to disable, use true to enable. Default is like truemotion.
MCompensate ( clip source, clip super, clip vectors, bool scbehavior (true), float recursion (0), int thSAD (10000), bool fields (false), int thSCD1, int thSCD2, bool isse, bool planar, bool mt (true), int tr (0), bool center (true), clip cclip (undefined), int thSAD2 (undefined) )
Do a full motion compensation of the frame. It means that the blocks pointed by the motion vectors in the reference frame will be moved along the vectors to reach their places in the current frame.
Overlapped blocks processing is implemented as window block summation (like FFT3DFilter, overlap value up to blksize / 2) for blocking artefactes decreasing.
super
This is multilevel super clip prepared by MSuper
function.
Mandatory.
From 2.7.37 may more bit depths and formats supported: 8-32 bits, YUV420-422-444, Planar RGB, and YUY2 planar
Super clip format must match with the source, but can be different from the base format of vector clip.
vectors
This is clip with motion vectors data produced by MAnalyse
function.
Mandatory. One can use vectors made from a 8 bit clip, independently from source and super clip format.
scbehavior
Decide which frame will be kept on a scene change. If true, the frame is left unchanged. Else, the reference frame is copied into the current one. Same for right and bottom padded area.
recursion
This is percent weight of previously compensated frames used for new compensation in special recursive mode. Rest weight is taken (uniformly) from given reference frame (used in ordinary mode). recursion = 100 is full recursion similar to in-loop mode = 2 of old MVTools v0.9.x. Do not use recursive mode unless you know what do you do.
thSAD
This is the SAD threshold for safe (dummy) compensation. If block SAD is above thSAD, the block is bad, and we use source block instead of the compensated block. Default value of 10000 means it is practically disabled.
fields
if set to true and pel = 2, 4, then we add appropriate vertical shift (by halfpixel) of fields for fieldbased video. Try using it for deinterlacing (not for denoising).
mt
Enables internal multi-threading (through avstp.dll).
tr
Allows generating multiple compensations using a multi-vector clip.
Set tr to the temporal radius (same as delta used in
MAnalyse
with multi = true). A value of 0
indicates that normal compensation should be used.
Number, order and content of frames generated with tr > 0 depend on the center and cclip values.
center
In multi-compensation mode (tr > 0), indicates that the compensated frames should be centered around the original frame, or actually the frame from cclip. This arrangement is dedicated to temporal filters needing the motion-compensated previous and next frames. Therefore the output frames are arranged this way:
center | true | false | ||
---|---|---|---|---|
Output rate | tr × 2 + 1 | tr × 2 | ||
Result for input frame N | Compensated | N + tr | Compensated | N + 1 |
Compensated | N + tr − 1 | Compensated | N − 1 | |
Compensated | … | Compensated | … | |
Compensated | N + 1 | Compensated | … | |
Original or cclip | N | Compensated | N + tr − 1 | |
Compensated | N − 1 | Compensated | N − tr + 1 | |
Compensated | … | Compensated | N + tr | |
Compensated | N − tr + 1 | Compensated | N − tr | |
Compensated | N − tr | — |
Where “Compensated N + x” indicates a backward compensation, using picture data from the next frames, and “Compensated N − x” denotes forward compensation, using picture data from the previous frames.
cclip
When multi-compensation mode is activated (tr > 0) and center = true, the center frames are taken from this clip. If cclip is undefined, frames are taken from the source clip.
thSAD2
Define the SAD soft threshold for the furthest frames.
The actual SAD threshold for each reference frame is a smooth interpolation
between the original thSAD (close to the current frame) and
thSAD2.
Setting thSAD2 lower than thSAD allows large temporal
radii and good compensation for low SAD blocks while reducing the global error
and the risk of bluring when the result of MCompensate
is passed
to a temporal denoising filter.
MFlow ( clip source, clip super, clip vectors, float time (100.0), int mode (0), bool fields (false), int thSCD1, int thSCD2, bool isse, bool planar, clip tclip (undefined) )
Do a motion compensation of the frame not by blocks (like
MCompensate
), but by pixels.
Motion vector for every pixel is calculated by bilinear interpolation of
motion vectors of current and neighbor blocks (according to pixel position).
It means that the pixels pointed by the vector in the reference frame
will be moved (flow) along the vectors to reach their places in the current
frame.
This flow motion compensation method does not produce any blocking artefactes,
and is good for denoising, but sometimes can create very strange deformed
pictures.
True motion estimation is strongly recommended for this function.
Motion compensation may be full or partial (at intermediate time).
Important limitation: vectors with components above 127 will be reset to zero
length. (PF 20190212: this sentence may not be valid since 2.5.11.22?)
super
Multilevel super clip prepared by MSuper function. Mandatory.
vectors
Clip with motion vectors data produced by MAnalyse function. Mandatory.
time
Percent of motion compensation. Defines time moment between reference and current frame. A value of 100 means full compensation.
mode
0 | Fetch pixels to every place of destination. It is main producing mode. |
1 | Shift pixels from every place of source (reference). |
It is debug (learning) mode with some empty spaces (with null intensity). It can be used for occlusion mask creation.
fields
If set to true and pel = 2, 4, then we add appropriate vertical shifts (by halfpixel) of fields for fieldbased video. Try using it for deinterlacing (not for denoising).
tclip
If set, the time parameter is ignored. Then the time for the motion composation is applied pixel-wise. Each component of each pixel of tclip gives the time to be applied to the corresponding source clip pixel. The time scale is 256, meaning that 0 doesn't compensate anything, and 255 is an almost full compensation.
MMask ( clip source, clip vectors, float ml (100), float gamma (1.0), int kind (0), int Ysc (0), int thSCD1, int thSCD2, bool isse, bool planar )
Creates mask clip from source clip with motion vectors data. Mask is defined by blocks data, but is interpolated to fit full frame size. The mask is created both on the luma and on chroma planes. Mask values may be from 0 (min) to 255 (max).
kind
Defines kind of mask:
0 | Motion Creates motion mask from the motion vectors length. It builds a better mask than MotionMask function of MaskTools plugin because motion vectors are a lot more reliable than the algorithm of MotionMask. Mask value 0 means no motion at all (the length of the motion vector is null). The longer vector length, the larger mask value (saturated to 255), the scale is defined by ml. |
1 | SAD Allows to build a mask of the SAD (sum of absolute differences) values instead of the vectors' length. It can be useful to find problem areas with bad motion estimation. Internal factor blksize*blksizeV/4 is used for normalization of scale ml. |
2 | Occlusion Allows to build a occlusion mask (bad blocks due to rupture, tensile). Currently, some normalized sum of positive blocks motion differences is used. It can be scaled with ml. |
3 | Horizontal Allows to build a mask of horizontal component of motion vector in pel units plus 128. Scaled factors are not used. |
4 | Vertical Allows to build a mask of vertical component of motion vector in pel units plus 128. Scaled factors are not used. |
5 | Colormap Motion colormap as x, y components of motion vector shown in U, V color planes (in pel units plus 128, scaled factors are not used). |
ml
Defines the scale of motion mask. When the vector's length (or other kind value) is superior or equal to ml, the output value is saturated to 255. The lesser value results to lesser output.
gamma
Defines the exponent of relation output to input. 1.0 implies a linear relation, whereas 2.0 gives a quadratic relation.
Ysc
This is the value taken by the mask on scene change.
MSCDetection ( clip source, clip vectors, int Ysc (255 or max. value of the current bit depth), int thSCD1, int thSCD2, bool isse )
Creates scene detection mask clip from motion vectors data. The mask is created both on the luma and on chroma planes. Output without scene change is 0.
Ysc
This is the value taken by the mask on scene change. *The default value is the maximum value of the given bit depth, e.g. 1023 for 10 bits, 65535 for 16 bits When specified it will be clamped to a valid 0 and 2^bitdepth-1 range. This parameter was mistakenly named as Yth in all plugins <=2.7.24
MShow ( clip super, clip vectors, int scale (1), int sil (0), int tol (20000), bool showsad (false), int number (-1), int thSCD1, int thSCD2, bool isse, bool planar )
Shows the motion vectors on padded source by super clip opening (since v2.0.11).
scale
Allows to enlarge the motion vectors, in order for example to gain in accuracy (when pel > 1 and scale = 1, you can't see a variation of less than one pixel).
sil
Allows to see a different level of analysis (when searching for motion vectors, a hierarchical analysis is done, and it may be interesting to see what happens at higher levels).
tol
This is a tolerance threshold. If the distortion induced by the motion vector is over tol the vector isn't shown.
showsad
Allows to show the mean (scaled to block 8x8) SAD after compensating the picture and quantity (thSCD2) of bad (thSCD1) blocks. False shows all vectors.
number
Allows to mark given block (with this number) as white. −1 means the feature is disabled.
MDepan ( clip, clip vectors, clip mask (undefined), bool zoom (true), bool rot (true), float pixaspect (1.0), float error (15.0), bool info (false), string log (undefined), float wrong (10), float zerow (0.05), int range (0), int thSCD1, int thSCD2, bool isse, bool planar )
Get the motion vectors, estimate global motion and put data to output frame
in special format for DePan
plugin (by Fizick).
Inter-frame global motion (pan, zoom, rotation) is estimated by iterative procedure, with good blocks only.
Blocks are rejected if they fill at least one of the following conditions: 1) near frame borders or by mask; 2) with big SAD (by thSCD1 parameter); 3) with motion different from neighbors or global.
For global motion estimation of interlaced source, you must separate fields (for both MAnalyse and MDepan).
mask
This clip, if defined, is used to set weight of blocks vectors equal to correspondent mask frame pixels values (use deep black to reject block). If the mask clip is not defined, then 4 blocks at every border are rejected (old pre v2.4.3 algorithm.)
zoom, rot
Switch zoom and rotation estimation.
pixaspect
Pixel aspect ratio (1.091 for standard PAL 4:3, 0.909 for standard NTSC 4:3).error
is maximum mean motion difference. The frame estimated global motion is switched to null for big motion error or at scene change (by thSCD1, thSCD2 parameters).
info
Allows to type global motion info for debug.
log
Allows to set log file name in DeShaker
and Depan
format.
wrong
Defines limit to disable blocks very different from neighbors.
zerow
Defines weight of zero motion vectors (to decrease its influence). (works from 2.7.27)
range
Number of previous (and also next) frames (fields) near requested frame to estimate their motion.
MFlowInter ( clip source, clip super, clip mvbw, clip mvfw, float time (50.0), float mL (100.0), bool blend (true), int thSCD1, int thSCD2, bool isse, bool planar, clip tclip (undefined) )
Motion interpolation function.
It is not the same (but similar) as MVInterpolate
function of
older MVTools version.
It uses backward mvbw and forward mvfw motion vectors
to create picture at some intermediate time moment between current and next
(by delta) frame.
It uses pixel-based (by MFlow
method) motion compensation from
both frames.
Internal forward and backward occlusion masks (MMask
kind = 2 method) and time weighted factors are used to produce
the output image with minimal artefacts.
True motion estimation is strongly recommended for this function.
super
Multilevel super clip prepared by MSuper function. Mandatory
mvbw, mvfw
Clips with backward and forward motion vectors data produced by
the MAnalyse
function.
Mandatory.
time
Interpolation time position between frames, in percent. Default value of 50.0 is half-way.
mL
Mask scale parameter.
Lower values are corresponded to more strong occlusion mask (as in
MMask
function, use it to tune and debug).
blend
Blend frames at scene change like ConvertFps
if true, or
repeat last frame like ChangeFps
if false.
tclip
If set, the time parameter is ignored. Then the time for the motion interpolation is applied pixel-wise. Each component of each pixel of tclip gives the time to be applied to the corresponding source clip pixel. The time scale is 256, meaning that 0 corresponds to the current frame, and 255 is an almost the next frame (128 is exactly half-way). A single occlusion mask is calculated with the luma-time only, therefore it is recommended to keep the chroma-time synchronized with the luma.
MFlowFps ( clip source, clip super, clip mvbw, clip mvfw, int num (25), int den (1), int mask (2), float ml (100.0), bool blend (true), int thSCD1, int thSCD2, bool isse, bool planar )
Will change the framerate (fps) of the clip (and number of frames).
The function can be use for framerate conversion, slow-motion effect, etc.
It uses backward mvbw and forward mvfw motion vectors
to create interpolated pictures at some intermediate time moments between
frames.
The function uses pixel-based motion compensation (as MFlow
,
MFlowInter
).
Internal forward and backward occlusion masks (MMask
kind = 2 method) and time weighted factors are used to produce
the output image with minimal artefacts.
True motion estimation is strongly recommended for this function.
super
Multilevel super clip prepared by MSuper
function.
Mandatory
mvbw, mvfw
Clips with backward and forward motion vectors data produced by
the MAnalyse
function.
Mandatory.
num, den
Output clip fps numerator and denominator. Resultant fps = num / den. In particular for doubled NTSC fps=2*29.97 use num = 60000 and den = 1001, and for doubled NTSC FILM fps=2*23.976 use num = 48000 and den = 1001. When num or den is equal to 0, then doubled fps of input clip is assumed for output (since v1.8.1).
mask
Processing mask mode:
0 | Simple backward and forward occlusion masks (used in versions up to 1.4.x, fastest) |
1 | Similar masks with additional switching to static zero vectors at occlusion areas (similar to v1.5.x) |
2 | For using extra vectors from adjacent frames for decreasing objects halo at occlusion areas (v1.8, slowest). |
ml
Mask scale parameter.
The greater values are corresponded to more weak occlusion mask (as in
MMask
function, use it to tune and debug).
blend
Blend frames at scene change like ConvertFps
if true, or
repeat last frame like ChangeFps
if false.
MBlockFps ( clip, clip super, clip mvbw, clip mvfw, int num (25), int den (1), int mode (0), float ml (100.0), bool blend (true), int thSCD1, int thSCD2, bool isse, bool planar )
The function uses block-based partial motion compensation to change the
framerate (fps) of the clip (and number of frames).
It uses backward mvbw and forward mvfw motion vectors
to create interpolated pictures at some intermediate time moments between
frames.
Some internal forward and backward masks
and time weighted factors are used to produce the output image.
(Algorithm is based on MVInter
function of old MVTools v1.9.12).
It is usually faster than MFlowFps
but may produce blocking and
other artefacts.
True motion estimation is strongly recommended for this function.
Some pixels at right and bottom which are not entirely covered by blocks will
be produced by frames blending.
super
Multilevel super clip prepared by MSuper
function.
Mandatory
mvbw, mvfw
Clips with backward and forward motion vectors data produced by
the MAnalyse
function.
Mandatory.
num, den
Output clip fps numerator and denominator. Resultant fps = num / den. In particular for doubled NTSC fps=2*29.97 use num = 60000 and den = 1001, and for doubled NTSC FILM fps=2*23.976 use num = 48000 and den = 1001. When num or den is equal to 0, then doubled fps of input clip is assumed for output.
mode
Processing mode:
0 | Average of fetched forward and backward partial motion compensation (fastest). |
1 | Static median. |
2 | Dynamic median. |
3 | Time weigthed combination of fetched forward blocks masked by shifted backward and fetched backward masked by shifted forward. |
4 | Mode 3 mixed with simple static time average by occlusion mask of shifted blocks. |
5 | Occlusion mask (for debug). |
6 | like 3 but using MakeSADMaskTime instead of MakeVectorOcclusionMaskTime |
7 | like 4 but using MakeSADMaskTime instead of MakeVectorOcclusionMaskTime |
8 | like 5 but using MakeSADMaskTime instead of MakeVectorOcclusionMaskTime |
ml
Mask scale parameter.
Modes 3-5 are using it in MakeVectorOcclusionMaskTime, modes 6-8 in MakeSADMaskTime.
The greater values are corresponded to more weak occlusion mask (as in
MMask
function, use it to tune and debug).
blend
Blend frames at scene change like ConvertFps
if true, or
repeat last frame like ChangeFps
if false.
MFlowBlur ( clip, clip super, clip mvbw, clip mvfw, float blur (50.0), int prec (1), int thSCD1, int thSCD2, bool isse, bool planar )
Experimental simple motion blur function.
It may be used for FILM-effect (to simulate finite shutter time).
It uses backward mvbw and forward mvfw motion vectors
to create and overlay many copies of partially compensated pixels at
intermediate time moments in some blurring interval around current frame.
It uses pixel-based motion compensation (as MFlow
).
True motion estimation is strongly recommended for this function.
super
Multilevel super clip prepared by MSuper
function.
Mandatory
mvbw, mvfw
Clips with backward and forward motion vectors data produced by
the MAnalyse
function.
Mandatory.
blur
Blur time interval between frames, open shutter time in percent.
prec
Blur precision in pixel units. Maximal step between compensated blurred pixels. 1 is the most precise.
MDeGrain1 ( clip, clip super, clip mvbw, clip mvfw, int thSAD (400), int thSADC (thSAD), int plane (4), float limit (255.0), float limitC (limit), int thSCD1, int thSCD2, bool isse, bool planar, bool lsb (false), bool out16 (false) ) |
MDeGrain2 ( clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2, int thSAD (400), int thSADC (thSAD), int plane (4), float limit (255.0), float limitC (limit), int thSCD1, int thSCD2, bool isse, bool planar, bool lsb (false), bool out16 (false) ) |
MDeGrain3...MDeGrain6 ( clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2, clip mvbw3, clip mvfw3, [clip mvbw4,] [clip mvfw4,] [clip mvbw5,] [clip mvfw5,] [clip mvbw6,] [clip mvfw6,] int thSAD (400), int thSADC (thSAD), int plane (4), float limit (255.0), float limitC (limit), int thSCD1, int thSCD2, bool isse, bool planar, bool lsb (false), bool out16 (false) ) |
MDeGrainN ( clip, clip super, clip mvmulti, int tr, int thSAD (400), int thSADC (thSAD), int plane (4), float limit (255.0), float limitC (limit), int thSCD1, int thSCD2, bool isse, bool planar, bool lsb (false), int thSAD2 (thSAD), int thSADC2 (thSADC), bool mt (true), bool out16 (false) ) |
Makes a temporal denoising with motion compensation. Blocks of previous and next frames are motion compensated and then averaged with current frame with weigthing factors depended on block differences from current (SAD). Functions support overlapped blocks mode.
Overlaped blocks processing is implemented as window block summation
(like FFT3DFilter
, overlap value up to
blksize / 2) for blocking artefactes reduction.
MDeGrain1
has temporal radius of 1 and uses vectors of previous
mvfw and next mvbw frames.
MDeGrain2
has temporal radius of 2 and uses vectors of two previous
mvfw2, mvfw and two next mvbw, mvbw2 frames.
MDeGrain3
.. MDeGrain6
has temporal radius of 3..6 and
uses vectors of previous mvfw6, ... mvfw3, mvfw2, mvfw and
next mvbw, mvbw2, mvbw3 ... mvbw6 frames.
It is slower, but produces a little better results (stronger denoising).
MDeGrainN
has a temporal radius given by the tr
parameter, and uses a special motion vector clip.
super
Multilevel super clip prepared by MSuper
function.
Mandatory.
Its format has to match to the source clip's format.
Since v2.7.25 source and super clip's bit depth can be different that of motion vectors!
It is possible to Degrain a 16 or 32 bit clip (and Super) with motion vectors created from a 8 bit clip.
Versions over 2.7.39 are giving full freedom: even subsampling can be different from the motion vector base clip's data.
mvbw, mvfw, mvbw2, mvfw2, mvbw3, mvfw3, mvmulti
Clips with backward and forward motion vectors data produced by
the MAnalyse
function.
mvmulti is a multi-vector clip generated in
multi = true mode.
Mandatory.
thSAD
Defines the soft threshold of block sum absolute differences. Block with SAD above threshold thSAD have a zero weight for averaging (denoising). Block with low SAD has highest weight. Rest of weight is taken from pixels of source clip. The provided thSAD value is scaled to a 8x8 blocksize. Low values can result in staggered denoising, large values can result in ghosting and artifacts.
thSADC
Threshold for chroma planes. If not defined, the thSAD value is used for chroma. If defined then thSADCis used for chroma and thSAD is used for luma.
plane
parameter set processed color plane:
0 | Luma |
1 | Chroma U |
2 | Chroma V |
3 | Both chromas |
4 | All |
limit
Maximal change of pixel luma. This is a post-processing like the
DeGrainMedian
plugin and LimitChange
function
from the SSETools plugin, to prevent some artifacts).
Value is 0 to 255. 255 does nothing. Other values are scaled proportionally for the given bit depth.
From 2.7.42 version the type of parameter is float instead of integer. This allows more granurality
at 10+ bits.
Calculation:
real_limit = limit * (2^(bit_depth - 8)) for 8-16 bits (=limit for 8 bit videos)
and
real_limit = limit / 255.0 for 32 bit float formats.
limitC
Maximal change of pixel chroma.
lsb
Note: since 2.7.26 "out16" is available for native 16bit output. The option generates 16-bit data from 8 bit inputs when set to true. The picture made of the most siginificant bytes (MSB) is stacked on the top of the least significant byte (LSB) block. Hence a twice taller resulting picture. You can extract the MSB or the LSB with a simple Crop() call. This mode helps recovering the full bitdepth of temporally dithered data.
tr
Temporal radius, > 0.
Must match the mvmulti content, i.e. the delta
parameter in MAnalyse
.
thSAD2, thSADC2
Parameter is for MDegrainN Define the SAD soft threshold for the furthest frames. The actual SAD threshold for each reference frame is a smooth interpolation between the original thSAD (close to the current frame) and thSAD2. Setting thSAD2 lower than thSAD allows large temporal radii and good efficiency for low SAD blocks while reducing the risk of bluring.
mt
Enables internal multi-threading (through avstp.dll).
out16
Since 2.7.26. Generates 16-bit data from 8 bit inputs when set to true. It is like lsb=true but the output format is native 16bits. A bit faster than lsb=true. Cannot be mixed with lsb=true.
MRecalculate ( clip super, clip vectors, int thSAD (200), int smooth (1), int blksize, int blksizeV, int search, int searchparam, int lambda, bool chroma, bool truemotion, int pnew, int overlap, int overlapV, string outfile, int dct, int divide, int sadx264, bool isse, int tr int scaleCSAD (0) )
Refines and recalculates motion data of previously estimated (by
MAnalyse
) motion vectors with different
super clip or new parameters set (e.g. lesser block size), after
divide, etc.
The two-stage method may be also useful for more stable (robust) motion
estimation.
The refining is at finest hierarchical level only.
Interpolated vectors of old blocks are used as predictors for new vectors,
with recalculation of SAD.
Only bad quality new vectors with SAD above threshold thSAD will be
re-estimated by search.
thSAD value is scaled to 8x8 block size.
Good vectors are not changed, but their SAD will be re-calculated and
updated.
You must set the tr variable if you process "multi" motion vector clips.
Parameters not described below have the same meaning as in
MAnalyse
, but you can use other values.
Their default settings are same as in MAnalyse
.
smooth
This is method for dividing coarse blocks into smaller ones.
0 | Use motion of nearest block. |
1 | Bilinear interpolation of 4 neighbors. |
tr
This is the temporal radius for motion vector clips generated by
MAnalyse
with multi = true.
Default 0 (normal vector clip).
MScaleVect ( clip vectors, float scale (bits == 0 ? 2 : 1), float scaleV (scale), int mode (0), bool flip (scale < 0 && scale == scaleV) bool adjustSubPel (false), int bits (0) )
Rescales motion vectors / blocksize. Main purpose is to allows vectors to be used on a differently sized clip or on a clip having different bit depth (2.7.24-) than they were analyzed from.
Example steps:
MAnalyze
on a half-sized clip at block size 16MFlowFPS
, MDegrain
,…
on the full sized frame.
Saves doing the MAnalyze
on the full size frame, which may be
faster and saves memory (good for multi-threading).
Note that you need a super clip for each frame size.
The padding (hpad, vpad) on each super clip must be manually scaled to match
the vector scaling (can be easier to set hpad = 0 and
vpad = 0 everywhere).
See the example below.
Similar functionality was available in MVTools through the function
MVIncrease
, but it was removed.
The function returns a new motion vector clip.
vectors
Motion vectors returned from MAnalyse
or
MRecalculate
, in multi mode or not.
Mandatory.
scale, scaleV
The amount to scale the vectors, scale is the horizontal scaling, scaleV is the vertical scaling. Exact meaning depends on mode. Default value is 2.0, except when bits is given (in this case 1.0)
mode
0 | Increase scale of vectors and blocksize. Only scale values of 1, 2, 4 or 8 are allowed. Mode 0 allows you to MAnalyze at a smaller size, then process (MDeGrain , MFlowFPS , whatever) at full size. |
1 | Decrease scale of vectors and blocksize. Only scale values of 1, 2, 4 or 8 are allowed. Mode 1 allows you to MAnalyze at full size, but have some subsequent processes run at a smaller size. |
2 | Only scale vectors, leave blocksize unchanged. Any floating point scale value is allowed (including negative). Mode 2 is for esoteric uses, for example approximating backward vectors from forward ones, or for extrapolation. |
flip
Whether to flag forward vectors as backward vectors, and vice versa. Only applies to mode = 2. Default is true if scale is negative and equal to scaleV. I.e. if you reverse the vectors it will default to flip their direction.
adjustSubPel
Set to true in mode = 0, 1 to perform scaling by adjusting subpel rather than scaling vectors. scale must be equal to scaleV. Experimental.
bits
Change the bit depth that the motion vector clip is reporting. Possible values: 0 (default), 8, 10, 12, 14, 16. Value of 0 does not change bit depth. During the conversion SAD values for each block are scaled according to the bit-depth difference. The scaling factor is 2^(bits - source_bit_depth) with rounding when scaling down. E.g. analyze your clip in 8 bits (faster), then use vectors for a 16 bit super clip by setting bits=16
This parameter can be combined with x and y scaling. Warning: when this parameter exists and is nonzero then the default value of scale is 1.0 instead of 2.0.
clip = YourSource( "Your\Video" ) # Half size clip clipScaled = clip.BicubicResize( clip.Width()/2, clip.Height()/2 ) # Half size padding (may be easier to always set hpad and vpad to 0) superScaled = clipScaled.MSuper( pel=2, hpad=16/2,vpad=16/2 ) # Analyze half-size clip - faster, uses less memory bVecScaled = superScaled.MAnalyse( blksize=8, isb=true ) fVecScaled = superScaled.MAnalyse( blksize=8, isb=false ) # Scale vectors increasing block size to 16 for use on full size clip bVec = bVecScaled.MScaleVect( 2 ) fVec = fVecScaled.MScaleVect( 2 ) # Full size clip, full size padding super = clip.MSuper( pel=2, hpad=16,vpad=16 ) # Use scaled vectors to operate on full size clip clip.MFlowFPS( super, bVec, fVec, den=0 )
MStoreVect ( clip vectors, ..., string vccs ("") )
Stores (multiple) motion vectors in a encodable clip.
Allows you to encode vectors to a file (must use a lossless format, suggest
Lagarith for RGBA).
Convenient for splitting up very slow scripts (e.g. calculate vectors and save
in pass 1, load vectors and process in stage 2).
Can also use to process the same footage in multiple ways.
Use MRestoreVect
to get the motion vectors back out of the
clip.
You can store as many sets of vectors as you wish in a single clip, as long as the clips have the same length. It's possible to store a multi-vector clip too. The clip can be in any of the supported colorspaces; its width and height will vary depending on the contained clips, but the height will always be divisible by 2.
The function returns a clip that contains the provided motion vectors.
vectors
MVTools vectors clip, you may pass as many clips as you wish.
vccs
Colorspace of the output clip. Only "RGB32", "RGB24" and "YUY2" are currently supported. Default (empty string) is RGB32.
clip = YourSource( "Your\Video" ) super = clip.MSuper() bVec1 = super.MAnalyse( isb=true ) fVec1 = super.MAnalyse( isb=false ) vectors = MStoreVect( bVec1, fVec1 ) # Losslessly encode the 'vectors' clip to a file (e.g. Lagarith)
MRestoreVect ( clip store, int index (0) )
Fetches a single motion vector clip from a special clip prepared earlier
by MStoreVect
(see above).
Call multiple times if there are several clips stored.
The function returns a single motion vectors clip.
store
A clip created by MStoreVect
.
index
The zero-based index of the vectors to restore, used when multiple vector clips were stored. I.e. index 0 recovers the first vectors stored in the clip, index 1 the second, etc.
clip = YourSource( "Your\Video" ) # Created using MStoreVectors above, losslessly encoded vectors = AviSource( "MotionVectors.avi" ) # See example above for MStoreVectors, gets the first of the two stored vector clips bVec1 = vectors.MRestoreVect( 0 ) fVec1 = vectors.MRestoreVect( 1 ) clip.MFlowFPS( super, bVec1, fVec1, den=0 )
To show the motion vectors ( forward ) :
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc Last=MSuper() # Assigns implicit last with Super clip vectors = Last.MAnalyse(isb = false) # Implicit Last = super, 1st arg Last.MShow(vectors) # Implicit Last = super, 1st arg
To show the backward one :
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc Last=MSuper() # Assigns implicit last with Super clip vectors = Last.MAnalyse(isb = true) # Implicit Last = super, 1st arg Last.MShow(vectors) # Implicit Last = super, 1st arg
To use MMask :
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc vectors = MSuper().MAnalyse(isb = false) MMask(vectors)
To use MDepan with Depan plugin for interlaced source (DepanStabilize function example):
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc AssumeTFF().SeparateFields() # set correct fields order vectors = MSuper().MAnalyse(isb = false) globalmotion = MDepan(vectors, pixaspect=1.094, thSCD1=400) DepanStabilize(data=globalmotion, cutoff=2.0, mirror=15, pixaspect=1.094) Weave()
To blur problem (blocky) areas of compensated frame with occlusion mask:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc super = MSuper() vectors = MAnalyse(super, isb = false) compensation = MCompensate(super,vectors) # or use MFlow function here # prepare blurred frame with some strong blur or deblock function: blurred = compensation.DeBlock(quant=51) # Use DeBlock function here badmask = MMask(vectors, kind = 2, ml=50) overlay(compensation,blurred,mask=badmask) # or use faster MaskedMerge function of MaskTools
To recreate bad frames by interpolation with MFlowInter:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc super = MSuper() backward_vectors = MAnalyse(super, isb = true, delta=2) forward_vectors = MAnalyse(super, isb = false, delta=2) inter = MFlowInter(super, backward_vectors, forward_vectors, time=50, ml=70) # Assume bad frames are 50 and 60 trim(0,49) ++ inter.trim(49,-1) \ ++ trim(51,59) ++ inter.trim(59,-1) ++ trim(61,0)
To change fps with MFlowFps:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc # assume progressive PAL 25 fps source super = MSuper(pel=2) backward_vec = MAnalyse(super, isb = true) forward_vec = MAnalyse(super, isb = false) MFlowFps(super, backward_vec, forward_vec, num=50, den=1, ml=100) # get 50 fps
To double fps with MFlowFps for fastest (almost) real-time playing:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc # assume progressive PAL 25 fps or NTSC Film 23.976 source super = MSuper(pel=1,hpad=0,vpad=0) backward_vec = MAnalyse(super, blksize=32, isb = true, chroma=false, searchparam=1,search=0) forward_vec = MAnalyse(super, blksize=32, isb = false, chroma=false, searchparam=1,search=0) MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), \ den=FramerateDenominator(last), mask=0)
To double fps with MFlowFps for 'best' results (but slower processing):
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc # assume progressive PAL 25 fps or NTSC Film 23.976 source super = MSuper(pel=2) backward_vec = MAnalyse(super, overlap=4, isb = true, search=3) # Use block overlap, halfpixel accuracy and Exhaustive search forward_vec = MAnalyse(super, overlap=4, isb = false, search=3) MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), \ den=FramerateDenominator(last))
To generate nice motion blur with MFlowBlur:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc super = MSuper() backward_vectors = MAnalyse(super, isb = true) forward_vectors = MAnalyse(super, isb = false) MFlowBlur(super, backward_vectors, forward_vectors, blur=15)
To denoise with some external denoiser filter (which uses 3 frames: prev, cur, next):
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc super = MSuper() backward_vectors = MAnalyse(super, isb = true) forward_vectors = MAnalyse(super, isb = false) forward_compensation = MFlow(super, forward_vectors, thSCD1=500) # or use MCompensate backward_compensation = MFlow(super, backward_vectors, thSCD1=500) # create interleaved 3 frames sequences interleave(forward_compensation, last, backward_compensation) DeGrainMedian() # place your preferred temporal (spatial-temporal) denoiser here selectevery(3,1) # return filtered central (not-compensated) frames only
To use prefiltered clip for more reliable motion estimation, but compensate motion of not-prefiltered clip (denoising example)
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc # Use some denoiser (blur) or deflicker for prefiltering prefiltered = blur(1.0) super = MSuper(levels=1) # one level is enough for MCompensate superfilt = MSuper(prefiltered) # all levels for MAnalyse backward_vectors = MAnalyse(superfilt, isb = true) forward_vectors = MAnalyse(superfilt, isb = false) # use not-prefiltered (super) clip for motion compensation forward_compensation = MCompensate(super, forward_vectors) backward_compensation = MCompensate(super, backward_vectors) # create interleaved 3 frames sequences interleave(forward_compensation, last, backward_compensation) DeGrainMedian() # place your preferred temporal (spatial-temporal) denoiser here selectevery(3,1) # return filtered central (not-compensated) frames only
To denoise by MDegrain2 with overlapped blocks (blksize=8) and subpixel precision:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc super = MSuper(pel=2, sharp=1) backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4) backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4) forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4) forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4) MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)
To denoise by MDegrainN with a large radius:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc tr = 6 # Temporal radius super = MSuper () multi_vec = MAnalyse (super, multi=true, delta=tr) MDegrainN (super, multi_vec, tr, thSAD=400, thSAD2=150)
To denoise interlaced source by MDegrain1 with overlapped blocks (blksize=8) and subpixel precision:
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc fields=AssumeTFF().SeparateFields() # or AssumeBFF super = MSuper(fields) backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=2) forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=2) MDegrain1(fields, super, backward_vec2,forward_vec2,thSAD=400) Weave()
To denoise interlaced source with function MDegrain2i2:
function MDegrain2i2(clip source, int "overlap", int "dct") { overlap=default(overlap,0) # overlap value (0 to 4 for blksize=8) dct=default(dct,0) # use dct=1 for clip with light flicker fields=source.SeparateFields() # separate by fields super = fields.MSuper() backward_vec2 = super.MAnalyse(isb = true, delta = 2, overlap=overlap, dct=dct) forward_vec2 = super.MAnalyse(isb = false, delta = 2, overlap=overlap, dct=dct) backward_vec4 = super.MAnalyse(isb = true, delta = 4, overlap=overlap, dct=dct) forward_vec4 = super.MAnalyse(isb = false, delta = 4, overlap=overlap, dct=dct) fields.MDegrain2(super, backward_vec2,forward_vec2,backward_vec4,forward_vec4,thSAD=400) Weave() } AVISource("video.avi") mdegrain2i2(4,0)
How to use external subpixel interpolation clip:
# Load Eedi2 plugin (by tritical) with edge-directed interpolation function LoadPlugin("Eedi2.dll") AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc # create upsampled clip of source ups = EEDI2(field=1).LanczosResize(2*width(last), 2*height(last), src_left=0.25) super = MSuper(pel=2, pelclip=ups) bv = MAnalyse(super, isb = true, overlap=4) MCompensate(super, bv)
How to use with MT filter and special multithreaded AviSynth:
# Load MT plugin by TSP LoadPlugin("MT.dll") avisource("some.avi") MT(""" super = MSuper(pel=2, sharp=1) backward_vec2 = super.MAnalyse(isb = true, delta = 2, overlap=4) backward_vec1 = super.MAnalyse(isb = true, delta = 1, overlap=4) forward_vec1 = super.MAnalyse(isb = false, delta = 1, overlap=4) forward_vec2 = super.MAnalyse(isb = false, delta = 2, overlap=4) MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400) """,2) # two threads
Note: SetMTMode(2) mode of multithreaded AviSynth is also supported since MVTools v.1.8.4.1 (beta testing). MVtools version 2 should works more stable. Same example with SetMTMode:
SetMTMode(5) FFmpegSource("some.avi") # avisource doesn't work with SetMTMode on my machines - TSchniede SetMTMode(2) super = MSuper(pel=2) backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4) backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4) forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4) forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4) MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)
How to use prefiltered clip and recalculate motion data with original source (MFlowFPS example)
AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc prefiltered = DeGrainMedian() # some smoothing super = MSuper(hpad=16, vpad=16, levels=1) # one level is enough for MRecalculate superfilt = MSuper(prefiltered, hpad=16, vpad=16) # all levels for MAnalyse backward = MAnalyse(superfilt, isb = true, blksize=16) forward = MAnalyse(superfilt, isb = false, blksize=16) # recalculate for original source clip and other block size forward_re = MRecalculate(super, forward, blksize=8, thSAD=100) backward_re = MRecalculate(super, backward, blksize=8, thSAD=100) MFlowFps(super, backward_re, forward_re, num=50, den=1)
How to use planar option for faster processing of YUY2 (MDegrain3 example):
LoadPlugin("SSEToolsS.dll") # for conversion functions AVISource("c:\test.avi") # or MPEG2Source, DirectShowSource, some previous filter, etc Interleaved2Planar() # convert clip to planar super = MSuper(planar=true) bv1 = MAnalyse(super, isb = true, delta = 1, overlap=4) fv1 = MAnalyse(super, isb = false, delta = 1, overlap=4) bv2 = MAnalyse(super, isb = true, delta = 2, overlap=4) fv2 = MAnalyse(super, isb = false, delta = 2, overlap=4) bv3 = MAnalyse(super, isb = true, delta = 3, overlap=4) fv3 = MAnalyse(super, isb = false, delta = 3, overlap=4) MDegrain3(super,bv1,fv1,bv2,fv2,bv3,fv3,thSAD=400,planar=true) Planar2Interleaved() # convert back to normal interleave YUY2
This plugin is distributed under terms of the GNU GPL license, without any
warranty.
See gpl.txt
.
Some parts of the code are under the WTFPL, too.
Documentation is distributed under CreativeCommons BY-SA 3.0 license.
MVTools uses portions of code from the following projects:
SimpleResize.cpp
) is from SimpleResize
Avisynth plugin by Tom Barry.fdct_mmx.asm
) is from XVID MPEG-4 VIDEO CODEC.fftwlite.h
) is from FFTW library (as DLL call).pixel-32.asm, pixel.asm
) and alternative SADx264 (sad-a.asm, x86inc.asm, x86inc-32.asm, cpu-32.asm
) are from x264 project (Loren Merritt, Laurent Aimar, Alex Izvorski et al).2.7.45 (20210608)
2.7.44 (20201214)
2.7.43 (20200602)
2.7.42 (20200522)
2.7.41/b (20200430)
2.7.41 (20190502)
2.7.40 (20190212)
2.7.39 (20190102)
2.7.38 (20181209)
2.7.37 (20181128)
2.7.36 (20181120)
2.7.35 (20181113)
2.7.34 (20181108)
2.7.33 (20181021)
2.7.32 (20181018)
2.7.31 (20180409)
2.7.30 (20180405)
2.7.29 (20180403)
2.7.28 (20180323)
2.7.27 (20180318)
2.7.26 (20180314)
2.7.25 (20180227)
2.7.24 (20171205)
2.7.23 (20171012)
2.7.22 (20170830)
2.7.21.22 (20170629)
2.7.20.22 (20170526)
2.7.19.22 (20170525)
2.7.18.22 (20170512)
2.7.17.22 (20170426)
2.7.16.22 (20170423)
2.7.15.22 (20170316)
2.7.14.22 (20170206)
2.7.13.22 (20170201)
2.7.12.22 (20170120)
2.7.11.22 (20170116)
2.7.10.22 (20161228)
2.7.9.22 (20161220)
2.7.8.22 (20161218)
2.7.7.22 (20161214) - optimizing a bit
2.7.6.22 (20161204) - fixes and speedup
2.7.5.22 (20161119)
2.7.1.22 (20161020)
2.7.0.22d (2016.08.16 by pinterf)
2.7.0.22c (2016.08.04 by pinterf)
2.7.0.22 (2016.04.29 by pinterf)
2.7.0.1 (2016.03.31 by pinterf)
2.6.0.5 (2012.07.17 by Firesledge)
2.6.0.4 (2012.06.14 by Firesledge)
2.6.0.3 (2012.05.13 by Firesledge)
2.6.0.2 (2012.05.01 by Firesledge)
2.6.0.1 (2012.03.12 by Firesledge)
2.6.0.0 (2012.03.11 by Firesledge)
2.5.14.2 (2012.01.10 by Firesledge)
2.5.14.1 (2011.12.13 by Firesledge)
2.5.14.0 (2011.11.28 by Firesledge and Vit)
2.5.13.1 (2011.11.09 by Firesledge)
2.5.13.0 beta (2011.09.11 by Firesledge)
2.5.12.1 beta (2011.09.10 by Firesledge)
2.5.12.0 beta (2011.09.10 by Firesledge)
2.5.11.2 beta mod16b (2011.05.11 by Firesledge)
2.5.11.2 beta mod16a (2011.04.10 by Firesledge)
2.5.11.2 beta (2011.03.20 by Fizick)
2.5.11.1 beta (2010.12.22 by Fizick)
2.5.11 beta mod16a (2010.12.18 by Firesledge)
2.5.11 beta (2010.10.17 by Fizick)
2.5.10.1 beta mod16a (2010.06.27 by Firesledge)
2.5.10.1 beta (2010.06.25 by Fizick)
2.5.10 beta mod16b (2010.06.20 by Firesledge)
2.5.10 beta mod16a (2010.04.04 by Firesledge)
2.5.10 beta (2009.11.08 by Fizick)
2.5.9 (2009.11.04 by Fizick)
2.5.8.1 (2009.10.26 by Fizick)
2.5.8 (2009.10.18 by Fizick)
2.5.7 (2009.10.09 by Fizick)
2.5.6 (2009.10.08 by Fizick)
2.5.5 (2009.09.28 by Fizick)
2.5.4 (2009.09.27 by Fizick)
2.5.3 (2009.09.08 by Fizick)
2.5.2 (2009.08.11 by Fizick)
2.5.1 (2009.08.07 by Fizick)
2.5.0 (2009.08.01 by Fizick)
2.4.7 (2009.07.28 by Fizick)
2.4.6 (2009.07.26 by Fizick)
2.4.5 (2009.07.11 by Fizick)
2.4.4 (2009.07.08 by Fizick)
2.4.2_mod2 (2009.06.30 by Pavel Skakov aka SEt)
2.4.2_mod (2009.06.22 by Pavel Skakov aka SEt)
2.4.3 beta (2009.04.26 by Fizick)
2.4.2 (2009.04.07 by Fizick)
2.4.1 beta (2009.01.24 by Fizick)
2.4.0 beta (2009.01.09 by Fizick)
2.3.1 (2008.12.14 by Fizick)
2.3.0 (2008.12.06 by Fizick)
2.2.2 (2008.11.30 by Fizick)
2.2.1 (2008.11.27 by Fizick)
2.1.2 (2008.11.23 by Fizick)
2.1.1 (2008.11.18 by Fizick)
2.1.0 (2008.11.08 by Fizick)
2.0.11.2 (2008.11.06 by Fizick)
2.0.11.1 (2008.11.05 by Fizick)
2.0.9.2 (2008.11.03 by Fizick)
2.0.9.1 (2008.10.20 by Fizick)
2.0.9.0 alpha (2008.10.13 by Fizick)
2.0.7.0 alpha (2008.10.02 by Fizick)
2.0.0.3 alpha (2008.09.28 by Fizick)
1.11.4.4 (2008.10.15 by Fizick)
1.11.4.3 (2008.10.08 by Fizick)
1.11.4.2 (2008.09.26 by Fizick)
1.11.0.1 beta (2008.09.08 by Fizick)
1.10.2.1 (2008.08.28 by Fizick)
1.10.2.0 beta (2008.08.27 by Fizick)
1.10.1.0 not public (2008.08.22 by Fizick)
1.10.0.0 not public (2008.08.18 by Fizick)
1.9.6.x-1.9.7.x series branch (2008.08.01-2008.08.26 by josey_wells)
1.9.5.7 public beta (2008.07.03 by Fizick)
1.9.5.6 (2008.07.02 by TSchniede)
1.9.5.5 (2008.06.28 by TSchniede)
1.9.5.4 (2008.06.27 by TSchniede)
1.9.5.3 (2008.06.26 by TSchniede)
1.9.5.2 (2008.06.24 by TSchniede)
1.9.5.1 public beta (2008.06.21 by Fizick)
1.9.5 (2008.06.21 by TSchniede), based on v.1.9.3
1.9.4.1 beta (2008.06.12 by Fizick, released 21.06.2008)
1.9.4 not public beta (2008.06.08 by Fizick)
1.9.3.1 (2008.06.05 by Fizick)
1.9.3 (2008.04.20 by Fizick)
1.9.2 (2008.01.29, all bugs were found by josey_wells)
1.9.1 beta (2007.12.15 by Fizick)
1.9.0 (2007.12.04 by Fizick)
1.8.6 (2007.12.02 by Fizick)
1.8.5.1 (2007.11.12 by we:)
1.8.4.3 (2007.10.05 by Tsp)
1.8.5 (2007.11.05 by Fizick)
1.8.4.2 (2007.10.25 by Tsp)
1.8.4.1 (2007.10.23 by Tsp)
1.8.4 (2007.08.22 by Fizick)
1.8.3 (2007.08.17-20 by Fizick)
1.8.2 beta (2007.07.30 by Fizick)
1.8.1 beta (2007.06.28 by Fizick)
1.8.0 beta (2007.06.22 by Fizick)
1.7.0 beta (2007.06.05 by Fizick)
1.6.4 (2007.05.30 by Fizick)
1.6.3 (2007.05.06 by Fizick)
1.6.2 (2006.11.11 by Fizick)
1.6.1 beta (2006.10.25 by Fizick)
1.5.8 beta (2006.10.14 by Fizick)
1.5.3 beta (2006.10.01 by Fizick)
1.5.1 beta (2006.09.05 by Fizick)
1.5.0 beta (2006.08.23 by Fizick)
1.4.13 (2006.09.28 by Fizick)
1.4.12 (2006.09.25 by Fizick)
1.4.11 (2006.09.06 by Fizick)
1.4.10 (2006.08.18 by Fizick)
1.4.9 (2006.08.14 by Fizick)
1.4.8 (2006.07.31 by Fizick)
1.4.7 (2006.07.25 by Fizick)
1.4.6 (2006.07.24 by Fizick)
1.4.5 (2006.07.22 by Fizick)
1.4.4 (2006.07.19 by Fizick)
1.4.3 (2006.07.17 by Fizick)
1.4.2 (2006.07.16 by Fizick)
1.4.1 (2006.06.23 by Fizick)
1.4.0 (2006.06.19 by Fizick)
1.3.1 (2006.06.11 by Fizick)
1.3.0 (2006.06.05 by Fizick)
1.2.6 beta (2006.05.21 by Fizick)
1.2.5 (2006.05.08 by Fizick)
1.2.4 (2006.04.07 by Fizick)
1.2.3 (2006.03.31 by Fizick)
1.2.2 beta (2006.03.01 by Fizick)
1.2.1 beta (2006.02.20 by Fizick)
1.2 beta (2006.02.17 by Fizick)
1.1.1 (2006.02.16 by Fizick)
1.1 (non-public build 2006.01.09 by Fizick)
1.0.3 (Released 2005.12.30 by Fizick)
1.0.2 (Released 2005.12.28 by Fizick)
1.0.1 (Released 2005.12.24 by Fizick)
1.0 (Released 2005.11.29 by Fizick)
0.9.13.3 (Released 2005.11.27 by Fizick)
0.9.13.2 (Released 2005.11.22 by Fizick)
0.9.13.1 (Released 2005.11.21 by Fizick)
0.9.13 (Released 2005.11.20 by Fizick)
0.9.12.4 (Released 2005.11.15 by Fizick)
0.9.12.3 (Released 2005.11.14 by Fizick)
0.9.12.2 (Released 2005.11.13 by Fizick)
0.9.12.1 (Released 2005.11.12 by Fizick)
0.9.12 (Released 2005.11.09 by Fizick)
0.9.11.1 (Released 2005.11.06 by Fizick)
0.9.11 (Released 2005.11.04 by Fizick)
0.9.10.1 (Released 2005.11.01 by Fizick)
0.9.10 (Released 2005.10.31 by Fizick)
0.9.9.1 (Released 2005.01.20 by Manao)
0.9.9
0.9.8.5
MVCompensate
changed : a new parameter, idx, which works as idx in MVAnalyse
,
and which allows speed up when compensating the same frames several times.
0.9.8.4
0.9.8.3
Corrector
function, as requested by scharfi.0.9.8.2
MVDepan
(added by Fizick) for Depan plugin.0.9.8.1
0.9.8
0.9.7
MVAnalyse
. New filter : MVChangeCompensate
.
0.9.6.2
MVMask
parameters.0.9.6.1
0.9.5.3
0.9.5.2
0.9.5
0.9.4
0.9.3
0.9.2.1
0.9.2
0.9.1 - 2004.05.12
0.1-0.6 Released 2004.01.24 - 2004.04.01 by Manao
This MVTools2 branch is available from https://github.com/pinterf/mvtools/tree/mvtools-pfmod
The base MVTools2 branch can be found in the Dither package: http://ldesoras.free.fr/prod.html
with x64 version at http://avisynth.nl/index.php/External_filters#64-bit_filters
Original MVTools2 branch can be downloaded at http://avisynth.org.ru/
Older version 1.X documentation and download link are at http://avisynth.org.ru/mvtools/mvtools.html
Older MVTools v.0.9.9.1 can be downloaded from Manao's site