MVTools
m (minor corrections) |
m (Update version) |
||
(31 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{FilterCat5|External_filters|Plugins|Plugins_x64|Other_filters|Support_filters}} |
+ | [[Category:Deep_color_tools]] | ||
{{Filter | {{Filter | ||
− | |Manao, Fizick, Tsp, TSchniede, SEt | + | |Manao, Fizick, Tsp, TSchniede, SEt, cretindesalpes, pinterf |
− | |v2. | + | |v2.7.46 |
− | |[ | + | |'''[https://github.com/pinterf/mvtools/releases mvtools-2.7.46-with-depans.7z]''' |
− | |Support filters | + | (8-16(32) bits, 420,422,444 support, x86/x64) |
+ | |[[:Category:Support_filters|Support filters]], [[:Category:Deep_color_tools|Deep color tools]] | ||
| | | | ||
− | * | + | * [https://sourceforge.net/projects/avisynth2/ AviSynth 2.6.0] |
+ | * AviSynth+ for x64 and native 10+ bits | ||
* YV12 | * YV12 | ||
* YUY2 | * YUY2 | ||
− | |[ | + | * YV16, YV24 (2.7.1-) |
− | |7=[ | + | * YUV 4:2:0, 4:2:2, 4:4:4 10-16 bits (32 bits in selected filters) |
− | + | |[https://www.gnu.org/licenses/gpl-2.0.txt GPLv2] | |
+ | |7=[https://forum.doom9.org/showthread.php?t=84770 Doom9], [https://forum.doom9.org/showthread.php?t=131033 continued] | ||
+ | ------ | ||
+ | [https://forum.doom9.org/showthread.php?p=1386559#post1386559 Doom9 v2.6 mod], [https://forum.doom9.org/showthread.php?t=173356 v2.7mod]}} | ||
+ | |||
== About MVTools == | == About MVTools == | ||
− | MVTools plugin for AviSynth 2. | + | MVTools plugin for AviSynth 2.6 is a 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. | 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. | ||
Line 23: | Line 30: | ||
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 artifacts 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). | 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 artifacts 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 to tune its parameters. There are many discussions about motion compensation using at doom9 Avisynth forum. In particular see [ | + | 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 to tune its parameters. There are many discussions about motion compensation using at doom9 Avisynth forum. In particular see [https://forum.doom9.org/showthread.php?t=76041 old MVTools thread], [https://forum.doom9.org/showthread.php?t=102071 true motion thread], [https://forum.doom9.org/showthread.php?t=84770 new MVTools thread] and some other. Try to read the 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). |
− | Notes: | + | Notes 1: Try to use a smart deinterlacer for interlaced video (SeparateFields may works too with or without SelectEven/SelectOdd). Some complex scripts (MVBOB, MCBOB, TempGaussMC) use MVTools for motion compensated deinterlacing. |
Alternatively you can try to use Motion plugin by mg262. | Alternatively you can try to use Motion plugin by mg262. | ||
− | < | + | |
− | < | + | Notes 2: Stacked 16 bit output for MDegrain1-6 and MDegrainN are also supported in general. |
+ | Native 10-16 bit colorspaces (and 32 bit float in MDegrain) are available when using MVTools with AviSynth+ r2294-. | ||
+ | |||
+ | |||
+ | '''<span style="color:red">Latest documentation:</span> https://htmlpreview.github.io/?https://github.com/pinterf/mvtools/blob/mvtools-pfmod/Documentation/mvtools2.html''' | ||
+ | |||
== Common parameters == | == Common parameters == | ||
− | Filters that use motion vectors have common parameters. Those are the scene-change detection thresholds, and the isse | + | 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. |
− | + | ||
− | + | ||
− | *{{Template:FuncDef2| | + | *{{Template:FuncDef2|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 8x8 blocks with every pixel different by 5. It this case SAD will be 8x8x5 = 320 (block will not detected as changed for thSCD1=400). If you use 4x4 blocks, SAD will be 320/4. If you use 16x16 blocks, SAD will be 320*4. Really this parameter is scaled internally in MVTools, and you must always use reduced to block size 8x8 value. Default is 400 (since v.1.4.1). |
− | *{{Template:FuncDef2| | + | *{{Template:FuncDef2|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 %). |
+ | |||
+ | *{{Template:FuncDef2|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). | ||
+ | |||
+ | *{{Template:FuncDef2|planar}} (bool, false): Legacy flag to use a hack planar color format for YUY2 clips, both for input and output of functions. It uses a hack to store frames with planar data (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 a normal interleaved YUY2 source clip to planar with Interleaved2planar from SSETools and convert back with Planar2interleaved. This special planar YUY2 format is also supported by Removegrain, MaskTools2 and some others. This trick is not needed in Avisynth 2.6 with native support of planar YV16 format. This parameter is ignored for YV12 clips. Note: super clip is always planar. | ||
+ | |||
+ | *{{Template:FuncDef2|mt}} (bool, true): When true, enables internal multi-threading via AVSTP. Only available in some functions, like [[MVTools2/MSuper]] and [[MVTools2/MSuper]].<br>'''Might''' be better to disable when using AVS+ 3.6 and leting the frameserver do its thing ([http://publishwith.me/ep/pad/view/ro.rDkwcdWn4k9/latest MTmodes.avsi], if loaded, sets the number of AVSTP threads to 1, which should give the same result as mt=false) | ||
− | |||
− | |||
− | |||
== Filters == | == Filters == | ||
{{PluginFilterTable}} | {{PluginFilterTable}} | ||
Line 46: | Line 59: | ||
{{PluginFilterRow|MVTools2|MSuper| | {{PluginFilterRow|MVTools2|MSuper| | ||
Get source clip and prepare special "super" clip with multilevel (hierarchical scaled) frames data. | Get source clip and prepare special "super" clip with multilevel (hierarchical scaled) frames data. | ||
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-32 bits 4:2:0, 4:2:2, 4:4:4, Planar RGB |
}} | }} | ||
{{PluginFilterRow|MVTools2|MAnalyse| | {{PluginFilterRow|MVTools2|MAnalyse| | ||
− | Get prepared multilevel super clip, estimate motion by block-matching method and produce special output clip with motion vectors data. | + | Get prepared multilevel super clip, estimate motion by block-matching method and produce special output clip with motion vectors data (used by other functions). |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
|- | |- | ||
{{PluginFilterRow|MVTools2|MCompensate| | {{PluginFilterRow|MVTools2|MCompensate| | ||
Do a full motion compensation of the frame. | Do a full motion compensation of the frame. | ||
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-32 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
{{PluginFilterRow|MVTools2|MMask| | {{PluginFilterRow|MVTools2|MMask| | ||
− | Creates | + | Creates mask clip from source clip with motion vectors data. |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
{{PluginFilterRow|MVTools2|MSCDetection| | {{PluginFilterRow|MVTools2|MSCDetection| | ||
Creates scene detection mask clip from motion vectors data. | Creates scene detection mask clip from motion vectors data. | ||
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
{{PluginFilterRow|MVTools2|MShow| | {{PluginFilterRow|MVTools2|MShow| | ||
Shows the motion vectors on padded source by super clip opening. | Shows the motion vectors on padded source by super clip opening. | ||
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
|- | |- | ||
{{PluginFilterRow|MVTools2|MDepan| | {{PluginFilterRow|MVTools2|MDepan| | ||
Get the motion vectors, estimate global motion and put data to output frame in special format for [[DePan]] plugin. | Get the motion vectors, estimate global motion and put data to output frame in special format for [[DePan]] plugin. | ||
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
|- | |- | ||
{{PluginFilterRow|MVTools2|MFlow| | {{PluginFilterRow|MVTools2|MFlow| | ||
− | Do a motion compensation of the frame not by blocks (like MCompensate), but by pixels. | + | Do a motion compensation of the frame not by blocks (like MCompensate), but by pixels. |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
{{PluginFilterRow|MVTools2|MFlowInter| | {{PluginFilterRow|MVTools2|MFlowInter| | ||
− | Motion interpolation function. | + | Motion interpolation function. It is not the same (but similar) as MVInterpolate function of older MVTools version. |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
{{PluginFilterRow|MVTools2|MFlowFps| | {{PluginFilterRow|MVTools2|MFlowFps| | ||
Will change the frame rate (fps) of the clip. The function can be used for frame rate conversion, slow-motion effect, etc. | Will change the frame rate (fps) of the clip. The function can be used for frame rate conversion, slow-motion effect, etc. | ||
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
{{PluginFilterRow|MVTools2|MBlockFps| | {{PluginFilterRow|MVTools2|MBlockFps| | ||
− | The function uses block-based partial motion compensation to change the framerate (fps) of the clip. | + | The function uses block-based partial motion compensation to change the framerate (fps) of the clip (and number of frames). |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
|- | |- | ||
{{PluginFilterRow|MVTools2|MFlowBlur| | {{PluginFilterRow|MVTools2|MFlowBlur| | ||
− | Experimental simple motion blur function. It may be used for FILM-effect (to simulate finite shutter time) | + | Experimental simple motion blur function. It may be used for FILM-effect (to simulate finite shutter time). |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
}} | }} | ||
− | {{PluginFilterRow|MVTools2| | + | {{PluginFilterRow|MVTools2|MDegrain''X''| |
− | Temporal denoising with motion compensation. | + | Temporal denoising with motion compensation. MDeGrain''X'' has a temporal radius of ''X'', up to 6.<br> |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-32 bits 4:2:0, 4:2:2, 4:4:4, planar RGB |
}} | }} | ||
− | {{PluginFilterRow|MVTools2| | + | {{PluginFilterRow|MVTools2|MDegrainN| |
− | Temporal denoising with motion compensation. | + | Temporal denoising with motion compensation. MDeGrainN has a temporal radius given by the tr parameter, and uses a special motion vector clip.<br> |
− | + | | [[YV12]], [[YUY2]],<br>any 8-32 bits 4:2:0, 4:2:2, 4:4:4, planar RGB | |
− | + | ||
− | + | ||
− | + | ||
− | | [[YV12]], [[YUY2]] | + | |
}} | }} | ||
{{PluginFilterRow|MVTools2|MRecalculate| | {{PluginFilterRow|MVTools2|MRecalculate| | ||
− | Refines and recalculates motion data of previously estimated motion vectors. | + | 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. |
− | | [[YV12]], [[YUY2]] | + | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
+ | }} | ||
+ | {{PluginFilterRow|MVTools2|MScaleVect| | ||
+ | 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 than they were analyzed from. | ||
+ | | ? | ||
+ | }} | ||
+ | {{PluginFilterRow|MVTools2|MStoreVect| | ||
+ | Stores (multiple) motion vectors in a encodable clip. Allows you to encode vectors to a file (must use a lossless format). Convenient for splitting up very slow scripts. Can also use to process the same footage in multiple ways. Use MRestoreVect to get the motion vectors back out of the clip. | ||
+ | | ? | ||
+ | }} | ||
+ | {{PluginFilterRow|MVTools2|MRestoreVect| | ||
+ | Fetches a single motion vector clip from a special clip prepared earlier by MStoreVect. Call multiple times if there are several clips stored. The function returns a single motion vectors clip. | ||
+ | | ? | ||
+ | }} | ||
+ | {{PluginFilterRow|MVTools2|MShow| | ||
+ | Shows the motion vectors on padded source by super clip opening. | ||
+ | | [[YV12]], [[YUY2]],<br>any 8-16 bits 4:2:0, 4:2:2, 4:4:4 | ||
}} | }} | ||
|} | |} | ||
− | + | ||
+ | Note1: native 10-16 bits and 4:2:0 and 8-16 bits 4:2:2, 4:4:4 color spaces are supported in 2.7.x branch | ||
+ | Note2: native 10+ bits only work with Avisynth+ | ||
+ | Note3: MDegrain supports 32 bit float input clips (Super and Input) but motion vectors should be calculated from 8-16 bits | ||
+ | |||
== Changelog == | == Changelog == | ||
− | + | {| class="wikitable" style="border: 1px solid darkgray" | |
+ | !Version | ||
+ | !Date | ||
+ | !Author | ||
+ | !Changes | ||
+ | |- | ||
+ | |2.7.31- 46 | ||
+ | |20180409-20240503 | ||
+ | |pinterf | ||
+ | |see documentation<br> | ||
+ | |- | ||
+ | |2.7.30 | ||
+ | |20180405 | ||
+ | |pinterf | ||
+ | |Fix: crash in MFlowInter (and possibly other MFlow...). v2.7.29 revealed this additional bug (which was not even 100% reproducible), this fix is basically the 2nd part of the solution.<br> | ||
+ | |- | ||
+ | |2.7.29 | ||
+ | |20180403 | ||
+ | |pinterf | ||
+ | |Fix: MFlowInter (and possibly other MFlow...) crash with specific combination of analyze parameters (e.g. blkSize=16,overlapv=4,divide=1). Bug existed since at least 2.5.11.22<br> | ||
+ | |- | ||
+ | |2.7.28 | ||
+ | |20180323 | ||
+ | |pinterf | ||
+ | |Fix: in MDegrain1-6/N allow Y8 input for out16 parameter<br> | ||
+ | |- | ||
+ | |2.7.27 | ||
+ | |20180318 | ||
+ | |pinterf | ||
+ | |Fix: MDepan: use zerow parameter. The parameter had no effect probably since it had been introduced.<br> | ||
+ | MDepan: report MT mode for Avisynth+. MT_MULTI_INSTANCE, except for logfile writing output mode when it reports MT_SERIALIZED. (other filters already have proper registration, MDepan was missed)<br> | ||
+ | |- | ||
+ | |2.7.26 | ||
+ | |20180314 | ||
+ | |pinterf | ||
+ | |New: MDegrain1-6 and N: new parameter bool "out16" = false. If set, 8 bit input results in native 16bit output (like lsb=true hack but this is native, faster).<br> | ||
+ | Faster: special 10 bit SAD functions instead of the generic 10-16bit one.<br> | ||
+ | |- | ||
+ | |2.7.25 | ||
+ | |20180227 | ||
+ | |pinterf | ||
+ | |Fix: x64: not-cleared mmx state in MSuper assembly code would cause crash later, e.g. in x264 encoding, depending on following filters.<br> | ||
+ | Fix: MSCDetection SC value parameter name to Ysc from Yth (must be an ancient typo), docs are OK, but the fix is mentioned in docs<br> | ||
+ | MSuper: import 8 bit sse2 interpolators from mvtools-vs. Extend them for 10-16bits (faster super clip). Some filters are still todo.<br> | ||
+ | MSuper: support 32bit float clips, which can be used later by MDegrains (but not for MAnalyse)<br> | ||
+ | MDegrains: allow degraining clip with different bit depth from vectors. Clip and Super must be the same bit depth<br> | ||
+ | MDegrains: consistently use limit and limitC, 255 do nothing, otherwise scale 0-254 value to the current bit-depth range<br> | ||
+ | Overlaps: more correct internal rounding for 8 bits<br> | ||
+ | Overlaps: round for 16bits<br> | ||
+ | Overlaps: 32bit float (but still use the original 11 bit window constants)<br> | ||
+ | Project: change from yasm to nasm.<br> | ||
+ | |- | ||
+ | |2.7.24 | ||
+ | |20171205 | ||
+ | |pinterf | ||
+ | |Fix: MFlowBlur: possible access violation crash when nPel>1<br> | ||
+ | New: MScaleVect parameter 'bits'. e.g. Analyze 8 bit clips, use their vectors for 16 bits<br> | ||
+ | Move project to VS2017<br> | ||
+ | |- | ||
+ | |2.7.23 | ||
+ | |20171012 | ||
+ | |pinterf | ||
+ | |Fix: MScaleVect wrong rounding of scaled motion vectors with negative components. e.g. proper scaling (-1;-2) to (-2;-4) instead of (-1,-3)<br> | ||
+ | |- | ||
+ | |2.7.22 | ||
+ | |20170830 | ||
+ | |pinterf | ||
+ | |Misc: Stop using version suffix .22<br> | ||
+ | Fix: [DCT 8x8@8bit] garbage on x64: internal assembly code did not save xmm6/xmm7<br> | ||
+ | Fix: [DCT 8x8@8bit] safe multithreading for integer DCT (8x8 block size, 8 bit video): assembly had a single working buffer.<br> | ||
+ | Fix: [MDegrain] did not release input motion vector clips in destructor, possible hang at script closing. Bug since 2.7.1.22 (introducing MDegrain4/5)<br> | ||
+ | Mod: fftw conversion constant of sqrt(2)/2 is more accurate (was:0.707), 16 bit formats may benefit (by feisty2)<br> | ||
+ | Fix: SSE4 assembly instructions in x64, broke on non-SSE4 processors<br> | ||
+ | |- | ||
+ | |2.7.21.22 | ||
+ | |20170629 | ||
+ | |pinterf | ||
+ | |Mod: [MMask] Faster: request source frame only for kind=5.<br> | ||
+ | |- | ||
+ | |2.7.20.22 | ||
+ | |2017.05.26 | ||
+ | |pinterf | ||
+ | |Fix: [MMask] greyscale input resulted in AV when filter exiting<br> | ||
+ | |- | ||
+ | |2.7.19.22 | ||
+ | |2017.05.25 | ||
+ | |pinterf | ||
+ | |New: [MMask] Support any planar input video formats e.g. greyscale, Planar RGB. Input clip can even be of different bit depth or format from vector's original format. For kind==5 where U and V is filled, the greyscale option is not allowed<br> | ||
+ | Mod: [MMask] Faster: request source frame only for kind=5.<br> | ||
+ | Fix: [MxxxxFPS,MMask]: MakeVectorOcclusionMaskTime garbage in bottom blocks<br> | ||
+ | Fix: [MMask] bottom padding garbage for padded frame dimension<br> | ||
+ | Fix: [MMask] proper 10+ bits scene change values (for default: 1023, 4095, 16383, 65535. Was: 65535). Parameter is still in 8-bit range<br> | ||
+ | Fix: [MRecalculate] prevent overflow during thSAD scaling in 16 bits or large block sizes (32, 48...)<br> | ||
+ | Fix: [DepanEstimate] Sometimes giving wrong motion instead of scene change detection. Bug only existed in previous pfmod builds.<br> | ||
+ | Fix: [MAnalyze] Possible overflow in MAnalyze 8 bit, block size 48x48 and above. Overflow-safe predictor recalc for big block sizes.<br> | ||
+ | New: [General] Add block size 12x3 for SAD, allow 6x24<br> | ||
+ | List of available block sizes<br> | ||
+ | - 64x64, 64x48, 64x32, 64x16<br> | ||
+ | - 48x64, 48x48, 48x24, 48x12<br> | ||
+ | - 32x64, 32x32, 32x24, 32x16, 32x8<br> | ||
+ | - 24x48, 24x24, 24x32, 24x12, 24x6<br> | ||
+ | - 16x64, 16x32, 16x16, 16x12, 16x8, 16x4, 16x2<br> | ||
+ | - 12x48, 12x24, 12x16, 12x12, 12x6, 12x3<br> | ||
+ | - 8x32, 8x16, 8x8, 8x4, 8x2, 8x1<br> | ||
+ | - 6x24, 6x12, 6x6, 6x3<br> | ||
+ | - 4x8, 4x4, 4x2<br> | ||
+ | - 3x6, 3x3<br> | ||
+ | - 2x4, 2x2<br> | ||
+ | Mod: [Internal] Reorganized 10-16 bit SAD simd intrinsics, faster 8-12% for BlkSize 12-32<br> | ||
+ | |- | ||
+ | |2.7.18.22 | ||
+ | |2017.05.12 | ||
+ | |pinterf | ||
+ | |Fix: 10-16 bit: DCT buffer possible overflow<br> | ||
+ | Fix: DCT is fast again for non 8x8 blocksizes. Regression since 2.7.5.22.<br> | ||
+ | New: Chroma SAD is now always half of luma SAD, regardless of video format. Without this: YV24's luma:chroma SAD ratio is 4:8 instead of 4:2 (of YV12)<br> | ||
+ | New: MAnalyze, MRecalculate new parameter: "scaleCSAD" integer, default 0.<br> | ||
+ | Fine tune chroma SAD weight relative to luma SAD.<br> | ||
+ | ScaleCSAD values for luma:chroma SAD ratio<br> | ||
+ | * -2: 4:0.5<br> | ||
+ | * -1: 4:1<br> | ||
+ | * 0: 4:2 (default, same as the native ratio for YV12)<br> | ||
+ | * 1: 4:4<br> | ||
+ | * 2: 4:8<br> | ||
+ | New: Block sizes 64, 48, 24, 12, 6.<br> | ||
+ | MAnalyze/MRecalculate new block sizes (SATD support mod4 sizes)<br> | ||
+ | Note: some smaller block sizes can only be available in 4:4:4 formats, due to block size division (chroma subsampling)<br> | ||
+ | New: All block sizes are supported in MDegrain1-6, MDegrainN, and MScaleVect<br> | ||
+ | New: Changed to 2017 version of asm files for 8 bit SAD/SATD functions from x265 project. Added not implemented asm code for 12, 24, 48 sizes<br> | ||
+ | For some block sizes AVX2 and SSE4 is supported (AVX2 if reported under AviSynth+) e.g. BlkSize 32 is faster now.<br> | ||
+ | New: MMask SAD Mask to give identical weights for other-than-YV12 formats, e.g. for YV24<br> | ||
+ | |- | ||
+ | |2.7.17.22 | ||
+ | |2017.04.26 | ||
+ | |pinterf | ||
+ | |Fix: Regression in 2.7.16.22: MDegrain right pixel artifacts on non-modulo 16 widths<br> | ||
+ | Misc: MMask, mode SADMask output is normalized further by video subsampling (YV16/YV24 has larger SAD value due to bigger chroma part that classic YV12)<br> | ||
+ | |- | ||
+ | |2.7.16.22 | ||
+ | |2017.04.23 | ||
+ | |pinterf | ||
+ | |Fix: MMask 10-16 bits<br> | ||
+ | Fix: MRecalculate 14-16 bits passed nSCD1=999999 internally which caused overflow (scene change problems later)<br> | ||
+ | Fix is done by clamping SCD1 to 8*8*(255-0) (maximum value of sum of SADs on a 8x8 block)<br> | ||
+ | Misc: MDegrainX 8 bits: internal 16 bit buffer to 8 bits: SSE2<br> | ||
+ | Fix: MFlow access violation in internal mv resizer when resizing factor was big (MCaWarpSharp3 4x supersampling case) (bug possibly introduced in upstream 2.5.11.22)<br> | ||
+ | |- | ||
+ | |2.7.15.22 | ||
+ | |2017.03.16 | ||
+ | |pinterf | ||
+ | |Fix: 16 bit SAD for non-AVX code path<br> | ||
+ | Misc: MDegrain1-6: add error on lsb_flag=true for non-8 bit sources<br> | ||
+ | |- | ||
+ | |2.7.14.22 | ||
+ | |2017.02.06 | ||
+ | |pinterf | ||
+ | |Fix: MAnalyze divide=2 showed "vector clip is too small" (inherited from 2.6.0.5, sanity check was done but length was not filled for divideextra data)<br> | ||
+ | Fix: MFlow access violation in internal mv resizer when resizing factor was big (MCaWarpSharp3 4x supersampling case) (bug possibly introduced in upstream 2.5.11.22)<br> | ||
+ | |- | ||
+ | |2.7.13.22 | ||
+ | |2017.02.01 | ||
+ | |pinterf | ||
+ | |Fix: MDegrain1-6,N 10-16 bit thSCD scaling<br> | ||
+ | Fix: MVShow: tolerance scaling for 10-16 bits<br> | ||
+ | |- | ||
+ | |2.7.12.22 | ||
+ | |2017.01.20 | ||
+ | |pinterf | ||
+ | |New: Faster SATD (dct=5..10) 8 bit: updated x264 function selectors, SSE2/4/AVX/AVX2; +10% speed for a whole typical MDegrain3 process on i7-3770<br> | ||
+ | New: Much Faster SATD (dct=5..10) 10-16 bit: SSE2/SSE4 instead of C +50% speed for a whole typical MDegrain3 process (which is approx half speed of 8 bit)<br> | ||
+ | |- | ||
+ | |2.7.11.22 | ||
+ | |2017.01.16 | ||
+ | |pinterf | ||
+ | |New: MDegrain6<br> | ||
+ | Mod: MDegrain1-6 SSE4 for 10-16 bit (was: C. 3-5% gain, wasn't bottleneck)<br> | ||
+ | |- | ||
+ | |2.7.10.22 | ||
+ | |2016.12.28 | ||
+ | |pinterf | ||
+ | |Fix: for YV12 the debug info text chroma part was positioned at wrong place<br> | ||
+ | |- | ||
+ | |2.7.9.22 | ||
+ | |2016.12.20 | ||
+ | |pinterf | ||
+ | |Apply 2.5.11.9-svp analysis speedup, mainly when chroma is involved<br> | ||
+ | |- | ||
+ | |2.7.8.22 | ||
+ | |2016.12.18 | ||
+ | |pinterf | ||
+ | |Fix: YUY2 input access violation (regression after 2.7.0.22d) - Fixed also in Depan.dll<br> | ||
+ | Fix: MDegrain: free up YUY2 planes only if not planar input (bug inherited from 2.5.11.22 MDegrain3) resulting in freeze at script exit<br> | ||
+ | |- | ||
+ | |2.7.7.22 | ||
+ | |2016.12.14 | ||
+ | |pinterf | ||
+ | |Optimizing 8 bits<br> | ||
+ | speed: change some 8 bit SAD functions for the better<br> | ||
+ | speed: separating bottleneck 8 bit/16 bit code paths in order not to use slower int64 calculations for 8 bit, where there are no integer overflow problems<br> | ||
+ | speed: more __forceinlines for helping the compiler<br> | ||
+ | info: general speed gain of 5-15% compared to 2.7.6.22, much reduced speed gap compared to the "classic" YV12 8 bit mvtools2 versions<br> | ||
+ | |- | ||
+ | |2.7.6.22 | ||
+ | |2016.12.04 | ||
+ | |pinterf | ||
+ | |fix: sumLumaChange underflow (used for dct=2,6,9) (regression during 16 bit support)<br> | ||
+ | fix: MeanLumaChange scale for 10-16 bits (used for dct=2,6,9)<br> | ||
+ | fix: Mask fix: 8 bit mask resizer bug in SIMD intrinsics (regression on inline asm -> SIMD transition)<br> | ||
+ | Fix: dctmode=1,2: pixel distance was not corrected for 16 bit pixel sizes<br> | ||
+ | speed: Let's help VS2015 with some __forceinline directives to recognize the truth.<br> | ||
+ | speed: Misc optimizations throughout the code (bit shifts instead of div or mul)<br> | ||
+ | speed: FFTW DCT: C code replaced with SIMD SSE2/SSE4 (FloatToBytes, BytesToFloat)<br> | ||
+ | speed: 16 bit SAD: a few optimizations in SSE2, AVX-coded SSE2 and AVX2 codepath<br> | ||
+ | VS2015 compiler: /MT -> /MD (from static to dynamic dlls - now it reallys need VS2015 redistributables)<br> | ||
+ | |- | ||
+ | |2.7.5.22 | ||
+ | |2016.11.19 | ||
+ | |pinterf | ||
+ | |Milestone release: | ||
+ | General support of 10-16 bit formats with Avisynth Plus (r2294 or newer recommended) with new MDegrain4 and MDegrain5 filters.<br> | ||
+ | Fix for MSCDetection: scene change filler pixel default value was always 0 (2.7.1.22 regression)<br> | ||
+ | MCompensate: possible bugfix bottom padding UV<br> | ||
+ | Fix SAD for 10-16 bit depths for horizontal block sizes >= 16<br> | ||
+ | Fix nSCD2 (Scene change threshold block count %) (2.7.1.22 regression)<br> | ||
+ | MBlockFPS: overlap fixes (right columns and bottom lines)<br> | ||
+ | MBlockFPS: overlap fix: missing copy buffer to output<br> | ||
+ | |- | ||
+ | |2.7.1.22 | ||
+ | |2016.10.20 | ||
+ | |pinterf | ||
+ | |YV16 and YV24 avaliable<br> | ||
+ | dct modes >= 5 now use SATD again (so far it was in dead code, contrary to 2.5.13.1 remarks)<br> | ||
+ | New: MDegrain4, MDegrain5<br> | ||
+ | Experimental native 10-16 bit support (MSuper, MAnalyze, MDegrain1-5, MDegrainN) including 16 bit SATD (slow C) and SSE2 optimized regular SAD for 8+ (for 10+ bits you need at least Avisynth+ r2290)<br> | ||
+ | Inline assembly rewritten to intrinsics -> 64 bit build is possible in VS2015 (External assembly untouched)<br> | ||
+ | |- | ||
+ | |2.7.0.22 | ||
+ | |2016.04.29 | ||
+ | |pinterf | ||
+ | |Integrate Fizick's upstream changes of 2.5.11.22<br> | ||
+ | |- | ||
+ | |2.7.0.1 | ||
+ | |2016.03.31 | ||
+ | |pinterf | ||
+ | |MVTools-pfmod<br> | ||
+ | 2.6.0.5 x64 capable version ported under AviSynth 2.6 API<br> | ||
+ | Fixed access violation in MDepan<br> | ||
+ | Fixed access violation in x64 asm code<br> | ||
+ | Built with Visual Studio 2015 Community Edition, v140_xp toolset<br> | ||
+ | Compiler: Intel C++ 16 (because of inline 64 bit asm code)<br> | ||
+ | See [https://forum.doom9.org/showthread.php?t=173356 discussion] and [https://github.com/pinterf/mvtools/tree/mvtools-pfmod GitHub page] for more information.<br/> | ||
+ | |- | ||
+ | |2.6.0.5 | ||
+ | |2012.07.17 | ||
+ | |Firesledge | ||
+ | |MCompensate, MDegrainN: fixed a bug causing occasionally horizontal magenta stripes in multithreading mode. | ||
+ | |- | ||
+ | |2.6.0.4 | ||
+ | |2012.06.14 | ||
+ | |Firesledge | ||
+ | |MCompensate: fixed artifacts related to overlap with tr > 3 in multithreading mode. | ||
+ | |- | ||
+ | |2.6.0.3 | ||
+ | |2012.05.13 | ||
+ | |Firesledge | ||
+ | |MDegrainN: fixed artifacts related to overlap with tr > 3 in multithreading mode. | ||
+ | |- | ||
+ | |2.6.0.2 | ||
+ | |2012.05.01 | ||
+ | |Firesledge | ||
+ | |MAnalyse: fixed a threading issue when using FFTW. | ||
+ | |- | ||
+ | |2.6.0.1 | ||
+ | |2012.03.12 | ||
+ | |Firesledge | ||
+ | | | ||
+ | MAnalyse: fixed potential crash in multithreading mode.<br/> | ||
+ | MDegrainN: fixed systematic crash in multithreading mode.<br/> | ||
+ | All MDegrain functions: fixed potential crash when thSAD is set to 0. | ||
+ | |- | ||
+ | |2.6.0.0 | ||
+ | |2012.03.11 | ||
+ | |Firesledge | ||
+ | | | ||
+ | MDegrainN: internally uses MDegrain1/2/3 when tr ≤ 3, for optimal speed.<br/> | ||
+ | MCompensate: added multi-compensation mode for easy use with temporal filters.<br/> | ||
+ | MAnalyse, MSuper, MCompensate, MDegrainN: added multithreading (but partially, not for all code paths) using AVSTP.<br/> | ||
+ | MAnalyse: fixed a corruption of the global motion vector.<br/> | ||
+ | Improved page setting for this documentation. | ||
+ | |- | ||
+ | |2.5.14.2 | ||
+ | |2012.01.10 | ||
+ | |Firesledge | ||
+ | |Fixed MScaleVect with multi-vector clips. | ||
+ | |- | ||
+ | |2.5.14.1 | ||
+ | |2011.12.13 | ||
+ | |Firesledge | ||
+ | |Fixed crashes in the MDegrain functions when using both planar=true and lsb=true. | ||
+ | |- | ||
+ | |2.5.14.0 | ||
+ | |2011.11.28 | ||
+ | |Firesledge and Vit | ||
+ | |Added MStoreVect, MRestoreVect and MScaleVect from the Vit's [https://forum.doom9.org/showthread.php?t=84770&page=76#post1538821 MVExtras plugin]. | ||
+ | |- | ||
+ | |2.5.13.1 | ||
+ | |2011.11.09 | ||
+ | |Firesledge | ||
+ | | | ||
+ | MAnalyse, MRecalculate: added an SATD approximation for blksize > 16 and dct ≥ 5. Previously, the SATD calculation was silently bypassed and always returned a null SAD value.<br/> | ||
+ | Functions now check that the pel setting is the same in the superclip and the motion vectors, instead of crashing if not. | ||
+ | |- | ||
+ | |2.5.13.0 beta | ||
+ | |2011.09.11 | ||
+ | |Firesledge | ||
+ | | | ||
+ | MRecalculate: Can now process multi-vector clips.<br/> | ||
+ | All functions: Added the -Vit-'s fix that could improve the multithreading stability. | ||
+ | |- | ||
+ | |2.5.12.1 beta | ||
+ | |2011.09.10 | ||
+ | |Firesledge | ||
+ | |MAnalyse: Fixed the ghosting bug introduced in the previous version. | ||
+ | |- | ||
+ | |2.5.12.0 beta | ||
+ | |2011.09.10 | ||
+ | |Firesledge | ||
+ | | | ||
+ | MDegrainN added.<br/> | ||
+ | MAnalyse: Added the "multi" mode for MDegrainN.<br/> | ||
+ | MAnalyse: Documented the negative delta values and fixed some functions accordingly.<br/> | ||
+ | MFlowInter: Fixed the YUY2 planar mode. | ||
+ | |- | ||
+ | |2.5.11.2 beta mod16b | ||
+ | |2011.05.11 | ||
+ | |Firesledge | ||
+ | |Fixed a regression in MDegrain1/2/3, related to the mod16 versions. thSADC is now taken into account correctly (instead of using thSAD). | ||
+ | |- | ||
+ | |2.5.11.2 beta mod16a | ||
+ | |2011.04.10 | ||
+ | |Firesledge | ||
+ | |Merged 2.5.11.2 and 2.5.11 mod16a versions. | ||
+ | |} | ||
+ | [http://www.avisynth.nl/users/fizick/mvtools/mvtools2.html#revisions Changelog up to v2.5.11.22] | ||
<br> | <br> | ||
+ | <br> | ||
+ | == Archived Downloads == | ||
+ | {| class="wikitable" border="1"; width="500px" | ||
+ | |- | ||
+ | !!width="100px"| Version | ||
+ | !!width="150px"| Download | ||
+ | !!width="150px"| Mirror | ||
+ | |- | ||
+ | !v2.6.0.5 (x64) | ||
+ | |[http://www.dropbox.com/s/swk97z4q834vugk/mvtools_2.6.0.5_x64.zip?dl=1 mvtools_2.6.0.5_x64.zip] | ||
+ | |[https://web.archive.org/web/20200608154645if_/https://files.videohelp.com/u/223002/mvtools_2.6.0.5_x64.zip mvtools_2.6.0.5_x64.zip] | ||
+ | |- | ||
+ | !v2.6.0.5 | ||
+ | |[http://ldesoras.free.fr/src/avs/mvtools-2.6.0.5.zip mvtools-2.6.0.5.zip] | ||
+ | |[https://web.archive.org/web/20160604063048if_/http://ldesoras.free.fr/src/avs/mvtools-2.6.0.5.zip mvtools-2.6.0.5.zip] | ||
+ | |- | ||
+ | !v2.5.11.22 | ||
+ | |[http://www.avisynth.nl/users/fizick/mvtools/mvtools-v2.5.11.22.zip mvtools-v2.5.11.22.zip] | ||
+ | |[https://web.archive.org/web/20170716135124if_/http://www.avisynth.nl/users/fizick/mvtools/mvtools-v2.5.11.22.zip mvtools-v2.5.11.22.zip] | ||
+ | |} | ||
+ | * Note: MVTools v2.6.0.5 (x64) was compiled with Intel Parallel Studio XE 2015 Composer Edition for C++. | ||
<br> | <br> | ||
==External Links == | ==External Links == | ||
− | *[ | + | *[https://forum.doom9.org/showthread.php?t=84770 Doom9 Forum] - MVTools discussion. |
+ | *[http://www.nmm-hd.org/newbbs/viewtopic.php?f=7&t=1918 NMM-HD Forum] - MVTools documentation in Chinese. | ||
+ | <br> |
Latest revision as of 13:20, 3 May 2024
Abstract | |
---|---|
Author | Manao, Fizick, Tsp, TSchniede, SEt, cretindesalpes, pinterf |
Version | v2.7.46 |
Download | mvtools-2.7.46-with-depans.7z
(8-16(32) bits, 420,422,444 support, x86/x64) |
Category | Support filters, Deep color tools |
Requirements |
|
License | GPLv2 |
Discussion | Doom9, continued
|
Contents |
[edit] About MVTools
MVTools plugin for AviSynth 2.6 is a 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 artifacts 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 to 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 and some other. Try to read the 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).
Notes 1: Try to use a smart deinterlacer for interlaced video (SeparateFields may works too with or without SelectEven/SelectOdd). Some complex scripts (MVBOB, MCBOB, TempGaussMC) use MVTools for motion compensated deinterlacing. Alternatively you can try to use Motion plugin by mg262.
Notes 2: Stacked 16 bit output for MDegrain1-6 and MDegrainN are also supported in general. Native 10-16 bit colorspaces (and 32 bit float in MDegrain) are available when using MVTools with AviSynth+ r2294-.
Latest documentation: https://htmlpreview.github.io/?https://github.com/pinterf/mvtools/blob/mvtools-pfmod/Documentation/mvtools2.html
[edit] Common parameters
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 8x8 blocks with every pixel different by 5. It this case SAD will be 8x8x5 = 320 (block will not detected as changed for thSCD1=400). If you use 4x4 blocks, SAD will be 320/4. If you use 16x16 blocks, SAD will be 320*4. Really this parameter is scaled internally in MVTools, and you must always use reduced to block size 8x8 value. 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): Legacy flag to use a hack planar color format for YUY2 clips, both for input and output of functions. It uses a hack to store frames with planar data (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 a normal interleaved YUY2 source clip to planar with Interleaved2planar from SSETools and convert back with Planar2interleaved. This special planar YUY2 format is also supported by Removegrain, MaskTools2 and some others. This trick is not needed in Avisynth 2.6 with native support of planar YV16 format. This parameter is ignored for YV12 clips. Note: super clip is always planar.
mt
(bool, true): When true, enables internal multi-threading via AVSTP. Only available in some functions, like MVTools2/MSuper and MVTools2/MSuper.
Might be better to disable when using AVS+ 3.6 and leting the frameserver do its thing (MTmodes.avsi, if loaded, sets the number of AVSTP threads to 1, which should give the same result as mt=false)
[edit] Filters
Filter | Description | Color format |
---|---|---|
MSuper |
Get source clip and prepare special "super" clip with multilevel (hierarchical scaled) frames data. |
YV12, YUY2, any 8-32 bits 4:2:0, 4:2:2, 4:4:4, Planar RGB |
MAnalyse |
Get prepared multilevel super clip, estimate motion by block-matching method and produce special output clip with motion vectors data (used by other functions). |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MCompensate |
Do a full motion compensation of the frame. |
YV12, YUY2, any 8-32 bits 4:2:0, 4:2:2, 4:4:4 |
MMask |
Creates mask clip from source clip with motion vectors data. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MSCDetection |
Creates scene detection mask clip from motion vectors data. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MShow |
Shows the motion vectors on padded source by super clip opening. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MDepan |
Get the motion vectors, estimate global motion and put data to output frame in special format for DePan plugin. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MFlow |
Do a motion compensation of the frame not by blocks (like MCompensate), but by pixels. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MFlowInter |
Motion interpolation function. It is not the same (but similar) as MVInterpolate function of older MVTools version. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MFlowFps |
Will change the frame rate (fps) of the clip. The function can be used for frame rate conversion, slow-motion effect, etc. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MBlockFps |
The function uses block-based partial motion compensation to change the framerate (fps) of the clip (and number of frames). |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MFlowBlur |
Experimental simple motion blur function. It may be used for FILM-effect (to simulate finite shutter time). |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MDegrainX |
Temporal denoising with motion compensation. MDeGrainX has a temporal radius of X, up to 6. |
YV12, YUY2, any 8-32 bits 4:2:0, 4:2:2, 4:4:4, planar RGB |
MDegrainN |
Temporal denoising with motion compensation. MDeGrainN has a temporal radius given by the tr parameter, and uses a special motion vector clip. |
YV12, YUY2, any 8-32 bits 4:2:0, 4:2:2, 4:4:4, planar RGB |
MRecalculate |
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. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
MScaleVect |
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 than they were analyzed from. |
? |
MStoreVect |
Stores (multiple) motion vectors in a encodable clip. Allows you to encode vectors to a file (must use a lossless format). Convenient for splitting up very slow scripts. Can also use to process the same footage in multiple ways. Use MRestoreVect to get the motion vectors back out of the clip. |
? |
MRestoreVect |
Fetches a single motion vector clip from a special clip prepared earlier by MStoreVect. Call multiple times if there are several clips stored. The function returns a single motion vectors clip. |
? |
MShow |
Shows the motion vectors on padded source by super clip opening. |
YV12, YUY2, any 8-16 bits 4:2:0, 4:2:2, 4:4:4 |
Note1: native 10-16 bits and 4:2:0 and 8-16 bits 4:2:2, 4:4:4 color spaces are supported in 2.7.x branch Note2: native 10+ bits only work with Avisynth+ Note3: MDegrain supports 32 bit float input clips (Super and Input) but motion vectors should be calculated from 8-16 bits
[edit] Changelog
Version | Date | Author | Changes |
---|---|---|---|
2.7.31- 46 | 20180409-20240503 | pinterf | see documentation |
2.7.30 | 20180405 | pinterf | Fix: crash in MFlowInter (and possibly other MFlow...). v2.7.29 revealed this additional bug (which was not even 100% reproducible), this fix is basically the 2nd part of the solution. |
2.7.29 | 20180403 | pinterf | Fix: MFlowInter (and possibly other MFlow...) crash with specific combination of analyze parameters (e.g. blkSize=16,overlapv=4,divide=1). Bug existed since at least 2.5.11.22 |
2.7.28 | 20180323 | pinterf | Fix: in MDegrain1-6/N allow Y8 input for out16 parameter |
2.7.27 | 20180318 | pinterf | Fix: MDepan: use zerow parameter. The parameter had no effect probably since it had been introduced. MDepan: report MT mode for Avisynth+. MT_MULTI_INSTANCE, except for logfile writing output mode when it reports MT_SERIALIZED. (other filters already have proper registration, MDepan was missed) |
2.7.26 | 20180314 | pinterf | New: MDegrain1-6 and N: new parameter bool "out16" = false. If set, 8 bit input results in native 16bit output (like lsb=true hack but this is native, faster). Faster: special 10 bit SAD functions instead of the generic 10-16bit one. |
2.7.25 | 20180227 | pinterf | Fix: x64: not-cleared mmx state in MSuper assembly code would cause crash later, e.g. in x264 encoding, depending on following filters. Fix: MSCDetection SC value parameter name to Ysc from Yth (must be an ancient typo), docs are OK, but the fix is mentioned in docs |
2.7.24 | 20171205 | pinterf | Fix: MFlowBlur: possible access violation crash when nPel>1 New: MScaleVect parameter 'bits'. e.g. Analyze 8 bit clips, use their vectors for 16 bits |
2.7.23 | 20171012 | pinterf | Fix: MScaleVect wrong rounding of scaled motion vectors with negative components. e.g. proper scaling (-1;-2) to (-2;-4) instead of (-1,-3) |
2.7.22 | 20170830 | pinterf | Misc: Stop using version suffix .22 Fix: [DCT 8x8@8bit] garbage on x64: internal assembly code did not save xmm6/xmm7 |
2.7.21.22 | 20170629 | pinterf | Mod: [MMask] Faster: request source frame only for kind=5. |
2.7.20.22 | 2017.05.26 | pinterf | Fix: [MMask] greyscale input resulted in AV when filter exiting |
2.7.19.22 | 2017.05.25 | pinterf | New: [MMask] Support any planar input video formats e.g. greyscale, Planar RGB. Input clip can even be of different bit depth or format from vector's original format. For kind==5 where U and V is filled, the greyscale option is not allowed Mod: [MMask] Faster: request source frame only for kind=5. |
2.7.18.22 | 2017.05.12 | pinterf | Fix: 10-16 bit: DCT buffer possible overflow Fix: DCT is fast again for non 8x8 blocksizes. Regression since 2.7.5.22.
New: Block sizes 64, 48, 24, 12, 6. |
2.7.17.22 | 2017.04.26 | pinterf | Fix: Regression in 2.7.16.22: MDegrain right pixel artifacts on non-modulo 16 widths Misc: MMask, mode SADMask output is normalized further by video subsampling (YV16/YV24 has larger SAD value due to bigger chroma part that classic YV12) |
2.7.16.22 | 2017.04.23 | pinterf | Fix: MMask 10-16 bits Fix: MRecalculate 14-16 bits passed nSCD1=999999 internally which caused overflow (scene change problems later) |
2.7.15.22 | 2017.03.16 | pinterf | Fix: 16 bit SAD for non-AVX code path Misc: MDegrain1-6: add error on lsb_flag=true for non-8 bit sources |
2.7.14.22 | 2017.02.06 | pinterf | Fix: MAnalyze divide=2 showed "vector clip is too small" (inherited from 2.6.0.5, sanity check was done but length was not filled for divideextra data) Fix: MFlow access violation in internal mv resizer when resizing factor was big (MCaWarpSharp3 4x supersampling case) (bug possibly introduced in upstream 2.5.11.22) |
2.7.13.22 | 2017.02.01 | pinterf | Fix: MDegrain1-6,N 10-16 bit thSCD scaling Fix: MVShow: tolerance scaling for 10-16 bits |
2.7.12.22 | 2017.01.20 | pinterf | New: Faster SATD (dct=5..10) 8 bit: updated x264 function selectors, SSE2/4/AVX/AVX2; +10% speed for a whole typical MDegrain3 process on i7-3770 New: Much Faster SATD (dct=5..10) 10-16 bit: SSE2/SSE4 instead of C +50% speed for a whole typical MDegrain3 process (which is approx half speed of 8 bit) |
2.7.11.22 | 2017.01.16 | pinterf | New: MDegrain6 Mod: MDegrain1-6 SSE4 for 10-16 bit (was: C. 3-5% gain, wasn't bottleneck) |
2.7.10.22 | 2016.12.28 | pinterf | Fix: for YV12 the debug info text chroma part was positioned at wrong place |
2.7.9.22 | 2016.12.20 | pinterf | Apply 2.5.11.9-svp analysis speedup, mainly when chroma is involved |
2.7.8.22 | 2016.12.18 | pinterf | Fix: YUY2 input access violation (regression after 2.7.0.22d) - Fixed also in Depan.dll Fix: MDegrain: free up YUY2 planes only if not planar input (bug inherited from 2.5.11.22 MDegrain3) resulting in freeze at script exit |
2.7.7.22 | 2016.12.14 | pinterf | Optimizing 8 bits speed: change some 8 bit SAD functions for the better |
2.7.6.22 | 2016.12.04 | pinterf | fix: sumLumaChange underflow (used for dct=2,6,9) (regression during 16 bit support) fix: MeanLumaChange scale for 10-16 bits (used for dct=2,6,9) |
2.7.5.22 | 2016.11.19 | pinterf | Milestone release:
General support of 10-16 bit formats with Avisynth Plus (r2294 or newer recommended) with new MDegrain4 and MDegrain5 filters. |
2.7.1.22 | 2016.10.20 | pinterf | YV16 and YV24 avaliable dct modes >= 5 now use SATD again (so far it was in dead code, contrary to 2.5.13.1 remarks) |
2.7.0.22 | 2016.04.29 | pinterf | Integrate Fizick's upstream changes of 2.5.11.22 |
2.7.0.1 | 2016.03.31 | pinterf | MVTools-pfmod 2.6.0.5 x64 capable version ported under AviSynth 2.6 API |
2.6.0.5 | 2012.07.17 | Firesledge | MCompensate, MDegrainN: fixed a bug causing occasionally horizontal magenta stripes in multithreading mode. |
2.6.0.4 | 2012.06.14 | Firesledge | MCompensate: fixed artifacts related to overlap with tr > 3 in multithreading mode. |
2.6.0.3 | 2012.05.13 | Firesledge | MDegrainN: fixed artifacts related to overlap with tr > 3 in multithreading mode. |
2.6.0.2 | 2012.05.01 | Firesledge | MAnalyse: fixed a threading issue when using FFTW. |
2.6.0.1 | 2012.03.12 | Firesledge |
MAnalyse: fixed potential crash in multithreading mode. |
2.6.0.0 | 2012.03.11 | Firesledge |
MDegrainN: internally uses MDegrain1/2/3 when tr ≤ 3, for optimal speed. |
2.5.14.2 | 2012.01.10 | Firesledge | Fixed MScaleVect with multi-vector clips. |
2.5.14.1 | 2011.12.13 | Firesledge | Fixed crashes in the MDegrain functions when using both planar=true and lsb=true. |
2.5.14.0 | 2011.11.28 | Firesledge and Vit | Added MStoreVect, MRestoreVect and MScaleVect from the Vit's MVExtras plugin. |
2.5.13.1 | 2011.11.09 | Firesledge |
MAnalyse, MRecalculate: added an SATD approximation for blksize > 16 and dct ≥ 5. Previously, the SATD calculation was silently bypassed and always returned a null SAD value. |
2.5.13.0 beta | 2011.09.11 | Firesledge |
MRecalculate: Can now process multi-vector clips. |
2.5.12.1 beta | 2011.09.10 | Firesledge | MAnalyse: Fixed the ghosting bug introduced in the previous version. |
2.5.12.0 beta | 2011.09.10 | Firesledge |
MDegrainN added. |
2.5.11.2 beta mod16b | 2011.05.11 | Firesledge | Fixed a regression in MDegrain1/2/3, related to the mod16 versions. thSADC is now taken into account correctly (instead of using thSAD). |
2.5.11.2 beta mod16a | 2011.04.10 | Firesledge | Merged 2.5.11.2 and 2.5.11 mod16a versions. |
[edit] Archived Downloads
Version | Download | Mirror |
---|---|---|
v2.6.0.5 (x64) | mvtools_2.6.0.5_x64.zip | mvtools_2.6.0.5_x64.zip |
v2.6.0.5 | mvtools-2.6.0.5.zip | mvtools-2.6.0.5.zip |
v2.5.11.22 | mvtools-v2.5.11.22.zip | mvtools-v2.5.11.22.zip |
- Note: MVTools v2.6.0.5 (x64) was compiled with Intel Parallel Studio XE 2015 Composer Edition for C++.
[edit] External Links
- Doom9 Forum - MVTools discussion.
- NMM-HD Forum - MVTools documentation in Chinese.