Created
December 28, 2011 04:15
-
-
Save SAPikachu/1526215 to your computer and use it in GitHub Desktop.
MCTDMod 3 - add support for 16bit debanding output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################################################################################################################################### | |
### ### | |
### Motion-Compensated Temporal Denoise: MCTD() ### | |
### ### | |
### v1.4.20 by "LaTo INV.", mod 2 by 06_taro ### | |
### ### | |
### 29 November 2011 ### | |
### ### | |
################################################################################################################################### | |
### | |
### | |
### | |
### /!\ Needed filters: MVTools (v2.5.11.3/v2.5.13.1), MaskTools (v2.0a48), | |
### ------------------- LSFmod (v1.9), FFT3Dgpu (v0.8.2) or FFT3Dfilter (v2.1.1), | |
### TTempsmooth (v0.9.4), RemoveGrain + Repair (v1.0PR), | |
### Deblock (v1.2), Deblock_QED (16.Oct.2010), DctFilter (v0.0.1.4), | |
### EEDI2 (v0.9.2), SangNom (v1.0beta), | |
### GradFun2DBmod (v1.5), GradFun2db (v1.0), AddGrainC (v1.6.1). | |
### | |
### | |
### | |
### USAGE: MCTD(i, radius, sigma, twopass, useTTmpSm, limit, limit2, post, chroma, interlaced, | |
### sharp, adapt, strength, SHmode, SHmethod, Slimit, Sovershoot, Tlimit, Tovershoot, shF, | |
### protect, cutoff, threshold, maxdiff, | |
### AA, useEEDI2, reduc, maxd, AAthr, method, aaF, | |
### deblock, useQED, quant1, quant2, | |
### edgeclean, ECrad, ECthr, ECmode, | |
### stabilize, maxr, TTstr, | |
### enhance, GFthr, AGstr, bias, temp, dbF, | |
### bwbh, owoh, blksize, overlap, | |
### GPU, fixband, bt, ncpu, precision, | |
### thSAD, thSAD2, thSCD1, thSCD2, | |
### truemotion, MVglobal, pel, pelsearch, search, searchparam, MVsharp, DCT, | |
### p, settings, | |
### show, screenW, screenH, | |
### p1nr, p2nr, ppnr) | |
### | |
### | |
### | |
### PARAMETERS: | |
### ----------- | |
### | |
### +---------+ | |
### | DENOISE | | |
### +---------+-------------------------------------------------------------------------------------------+ | |
### | radius : Temporal radius [1...6] | | |
### | sigma : FFT3D sigma for the pre-filtering clip [0=no pre-filtering,1...] | | |
### | twopass : Do the denoising job in 2 stages (stronger but very slow) | | |
### | useTTmpSm : Use MDegrain (faster) or MCompensate+TTempsmooth (stronger) | | |
### | limit : Limit the effect of the first denoising [-1=auto,0=off,1...255] | | |
### | limit2 : Limit the effect of the second denoising (if twopass=true) [-1=auto,0=off,1...255] | | |
### | post : Sigma value for post-denoising with FFT3D (before all the PP stage) [0=off,...] | | |
### | chroma : Process or not the chroma plane | | |
### | interlaced : Input video interlaced or not | | |
### | p1nr : Use your own denoising filter instead of internal MDegrain/TTempsmooth in the 1st pass | | |
### | p2nr : Use your own denoising filter instead of internal MDegrain/TTempsmooth in the 2nd pass | | |
### | ppnr : Use your own denoising filter instead of internal FFT3D in post-denoising | | |
### | (Set your filter in string, e.g., p1nr="FluxSmoothST(7, 7)") | | |
### +-----------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +-------+ | |
### | SHARP | | |
### +-------+-----------------------------------------------------------------------------------------------------------------------------+ | |
### | sharp : Enable Post-Sharpening (Spatial-Sharpening + Motion-compensated temporal limiting) | | |
### | adapt : Adaptative sharpening --> sharp only static & detailed areas, prevents grain sharpening & save much bitrate (+-10/15%) | | |
### | strength : Sharpening strength ( see LSFmod: strength ) | | |
### | SHmode : Sharpening mode ( see LSFmod: Smode ) | | |
### | SHmethod : Sharpening method ( see LSFmod: Smethod ) | | |
### | Slimit : Spatial limiting ( see LSFmod: Lmode ) | | |
### | Sovershoot : Spatial overshoot ( see LSFmod: overshoot ) | | |
### | Tlimit : Temporal limiting (Motion compensated, clamp output to Tovershoot) | | |
### | Tovershoot : Temporal overshoot, = Maximum sharpening excess allowed (If Tovershoot=0, don't sharp more than the original clip.) | | |
### | /!\ If you set Tovershoot>0, be sure that Slimit!=0 (to not over-enhance edges... Slimit=2 is a good compromise) | | |
### | shF : Use your own sharpening filter instead of internal LSFmod (Set your filter in string, e.g., shF="Sharpen(0.3)") | | |
### +-------------------------------------------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +---------------------------------+ | |
### | STAR & BRIGHT POINTS PROTECTION | | |
### +---------------------------------+---------------------------------------------------------------------------------------+ | |
### | protect : Enable star & bright points protection | | |
### | cutoff : Luma cutoff (process only brighter areas than this value) [0=all,1...255] | | |
### | threshold : Luma threshold (minimal change needed to be filtered, the higher = the lesser areas are filtered) [0...127] | | |
### | maxdiff : Maximum change allowed between source and result (the lesser, the brighter) [0=source,1...255] | | |
### +-------------------------------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +--------------+ | |
### | ANTIALIASING | | |
### +--------------+----------------------------------------------------------------------------------------------------------------------+ | |
### | AA : Enable antialiasing (only on edges) | | |
### | useEEDI2 : If true use EEDI2 filtering, else use SANGNOM filtering | | |
### | reduc : MC-soothe reduc parameter, reduc==-1 turn off "MC-antialiasing" [-1=off,0.0...1.0] | | |
### | maxd : If EEDI2 is used it's his maxd setting, if SANGNOM is used it's his AA setting (see docs of these filters) | | |
### | AAthr : Threshold for mask (the higher, the less "small edges" are processed) [0...255] | | |
### | method : Sharpness for downsize [0=bilinear,1=spline36,2=lanczos4] | | |
### | aaF : Use your own anti-aliasing filter instead of internal SANGNOM/EEDI2 (Set your filter in string, e.g., aaF="Sangnom(48)") | | |
### +-------------------------------------------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +---------+ | |
### | DEBLOCK | | |
### +---------+-----------------------------------------------------------------------------------+ | |
### | deblock : Enable deblocking before the denoising | | |
### | useQED : If true, use Deblock_QED, else use Deblock (faster & stronger) | | |
### | quant1 : Deblock_QED "quant1" parameter (Deblock "quant" parameter is "(quant1+quant2)/2") | | |
### | quant2 : Deblock_QED "quant2" parameter (Deblock "quant" parameter is "(quant1+quant2)/2") | | |
### +---------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +------------------------------+ | |
### | EDGECLEAN: DERING, DEHALO... | | |
### +------------------------------+-----------------------------------------------------------------------------------------------------+ | |
### | edgeclean : Enable safe edgeclean process after the denoising (only on edges which are in non-detailed areas, so less detail loss) | | |
### | ECrad : Radius for mask (the higher, the greater distance from the edge is filtered) | | |
### | ECthr : Threshold for mask (the higher, the less "small edges" are process) [0...255] | | |
### | ECmode : Script/Filter used for cleaning edges (ex: "dfttest().dehalo_alpha()", don't forget quotes "") | | |
### +------------------------------------------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +-----------+ | |
### | STABILIZE | | |
### +-----------+------------------------------------------------------------------------------------------------+ | |
### | stabilize : Enable TTempSmooth post processing to stabilize flat areas (background will be less "nervous") | | |
### | maxr : Temporal radius (the higher, the more stable image) | | |
### | TTstr : Strength (see TTempSmooth docs) | | |
### +------------------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +---------+ | |
### | ENHANCE | | |
### +---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ | |
### | enhance : Enable GradFun2DBmod post processing to enhance flat areas (may avoid banding & blocking when encoding too) | | |
### | GFthr : Gradfun2db threshold [1.0=off,...] | | |
### | AGstr : AddGrain strength [0.0=off,...] | | |
### | bias : Brightness bias for adaptative grain mask (the higher, the less grain in dark areas & the more grain in bright areas) [-1=off,0=input,1...254,255=invert] | | |
### | temp : Temporal stabilization for grain (the higher, the more calm) [0=nervous,...,100=static] | | |
### | dbF : Use your own debanding filter instead of internal GradFun2dbmod (Set your filter in string, e.g., dbF="f3kdb(31, 32, 0, 0)") | | |
### +---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |
### | |
### | |
### +---------------------+ | |
### | BLOCKSIZE / OVERLAP | | |
### +---------------------+----------------+ | |
### | bwbh : FFT3D blocksize | | |
### | owoh : FFT3D overlap | | |
### | - for speed: bwbh/4 | | |
### | - for quality: bwbh/2 | | |
### | blksize : MVTools blocksize | | |
### | overlap : MVTools overlap | | |
### | - for speed: blksize/4 | | |
### | - for quality: blksize/2 | | |
### +--------------------------------------+ | |
### | |
### | |
### +-------+ | |
### | FFT3D | | |
### +-------+---------------------------------------+ | |
### | GPU : Use FFT3Dgpu instead of FFT3Dfilter | | |
### | fixband : Prevent banding issue with FFT3D | | |
### +---------------------------------------+-------+ | |
### | bt : FFT3D block temporal size | | |
### | ncpu : FFT3Dfilter ncpu | | |
### | precision : FFT3Dgpu precision | | |
### +---------------------------------------+ | |
### | |
### | |
### +---------+ | |
### | MVTOOLS | | |
### +---------+----------------------------------------------------+ | |
### | thSAD : MVTools thSAD for the first pass | | |
### | thSAD2 : MVTools thSAD for the second pass (if twopass=true) | | |
### | thSCD1 : MVTools thSCD1 | | |
### | thSCD2 : MVTools thSCD2 | | |
### +-----------------------------------+--------------------------+ | |
### | truemotion : MVTools truemotion | | |
### | MVglobal : MVTools global | | |
### | pel : MVTools pel | | |
### | pelsearch : MVTools pelsearch | | |
### | search : MVTools search | | |
### | searchparam : MVTools searchparam | | |
### | MVsharp : MVTools sharp | | |
### | DCT : MVTools DCT | | |
### +-----------------------------------+ | |
### | |
### | |
### +--------+ | |
### | GLOBAL | | |
### +--------+-----------------------------------------------------+ | |
### | p : Set an external prefilter clip | | |
### | settings : Global MCTD settings [default="low"] | | |
### | - "very low" | | |
### | - "low" | | |
### | - "medium" | | |
### | - "high" | | |
### | - "very high" | | |
### +--------------------------------------------------------------+ | |
### | |
### | |
### +-------+ | |
### | DEBUG | | |
### +-------+------------------------------------------------+ | |
### | show : Show debug clip & informations | | |
### | screenW : Screen horizontal resolution (for show clip) | | |
### | screenH : Screen vertical resolution (for show clip) | | |
### +--------------------------------------------------------+ | |
### | |
### | |
### | |
### DEFAULTS: | |
### --------- | |
### | |
### +-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ | |
### | SETTINGS | VERY LOW | LOW | MEDIUM | HIGH | VERY HIGH | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | radius | 1 | 2 | 3 | 2 | 3 | | |
### | sigma | 2 | 4 | 8 | 12 | 16 | | |
### | twopass | false | false | false | true | true | | |
### | useTTmpSm | false | false | false | false | false | | |
### | limit | -1 | -1 | -1 | -1 | 0 | | |
### | limit2 | -1 | -1 | -1 | 0 | 0 | | |
### | post | 0 | 0 | 0 | 0 | 0 | | |
### | chroma | false | false | true | true | true | | |
### | interlaced | false | false | false | false | false | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | sharp | true | true | true | true | true | | |
### | adapt | true | true | true | true | true | | |
### | strength | 100 | 100 | 150 | 200 | 200 | | |
### | SHmode | 3 | 3 | 3 | 3 | 3 | | |
### | SHmethod | 3 | 3 | 3 | 3 | 3 | | |
### | Slimit | 0 | 0 | 0 | 0 | 0 | | |
### | Sovershoot | 0 | 0 | 0 | 0 | 0 | | |
### | Tlimit | true | true | true | true | true | | |
### | Tovershoot | 2 | 2 | 1 | 0 | 0 | | |
### | shF | "internal" | "internal" | "internal" | "internal" | "internal" | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | protect | false | false | false | false | false | | |
### | cutoff | 64 | 64 | 64 | 64 | 64 | | |
### | threshold | 16 | 16 | 16 | 16 | 16 | | |
### | maxdiff | 4 | 4 | 4 | 4 | 4 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | AA | false | false | false | false | false | | |
### | useEEDI2 | true | true | false | false | false | | |
### | reduc | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | | |
### | maxd | 24 | 24 | 48 | 48 | 48 | | |
### | AAthr | 64 | 32 | 32 | 16 | 16 | | |
### | method | 2 | 1 | 1 | 0 | 0 | | |
### | aaF | "internal" | "internal" | "internal" | "internal" | "internal" | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | deblock | false | false | false | false | false | | |
### | useQED | true | true | true | false | false | | |
### | quant1 | 10 | 20 | 30 | 30 | 40 | | |
### | quant2 | 20 | 40 | 60 | 60 | 80 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | edgeclean | false | false | false | false | false | | |
### | ECrad | 1 | 2 | 3 | 4 | 5 | | |
### | ECthr | 32 | 32 | 32 | 16 | 16 | | |
### | ECmode | "Removegrain(2,0)" | "Removegrain(2,0)" | "Removegrain(2,2)" | "Removegrain(4,4)" | "Removegrain(4,4)" | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | stabilize | false | false | false | true | true | | |
### | maxr | 1 | 1 | 2 | 2 | 2 | | |
### | TTstr | 1 | 1 | 1 | 2 | 2 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | enhance | true | true | false | false | false | | |
### | GFthr | 1.1 | 1.2 | 1.4 | 1.6 | 1.8 | | |
### | AGstr | 0.6 | 0.8 | 1.2 | 1.8 | 2.4 | | |
### | bias | 64 | 64 | 64 | 64 | 64 | | |
### | temp | 50 | 50 | 50 | 50 | 50 | | |
### | dbF | "internal" | "internal" | "internal" | "internal" | "internal" | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | bwbh | HD?16:8 | HD?16:8 | HD?16:8 | HD?16:8 | HD?16:8 | | |
### | owoh | HD? 8:4 | HD? 8:4 | HD? 8:4 | HD? 8:4 | HD? 8:4 | | |
### | blksize | HD?16:8 | HD?16:8 | HD?16:8 | HD?16:8 | HD?16:8 | | |
### | overlap | HD? 8:4 | HD? 8:4 | HD? 8:4 | HD? 8:4 | HD? 8:4 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | GPU | false | false | false | false | false | | |
### | fixband | true | true | true | true | true | | |
### | bt | 1 | 3 | 3 | 3 | 4 | | |
### | ncpu | 1 | 1 | 1 | 1 | 1 | | |
### | precision | 2 | 2 | 2 | 2 | 2 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | thSAD | 200 | 300 | 400 | 500 | 600 | | |
### | thSAD2 | 200 | 300 | 400 | 500 | 600 | | |
### | thSCD1 | 200 | 300 | 400 | 500 | 600 | | |
### | thSCD2 | 90 | 100 | 100 | 130 | 130 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | truemotion | false | false | false | false | false | | |
### | MVglobal | true | true | true | true | true | | |
### | pel | 1 | 2 | 2 | 2 | 2 | | |
### | pelsearch | 1 | 2 | 2 | 2 | 2 | | |
### | search | 2 | 2 | 2 | 2 | 2 | | |
### | searchparam | 2 | 2 | 2 | 2 | 2 | | |
### | MVsharp | 2 | 2 | 2 | 1 | 0 | | |
### | DCT | 0 | 0 | 0 | 0 | 0 | | |
### |-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------| | |
### | show | false | false | false | false | false | | |
### | screenW | 1280 | 1280 | 1280 | 1280 | 1280 | | |
### | screenH | 1024 | 1024 | 1024 | 1024 | 1024 | | |
### +-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ | |
### | |
### | |
### | |
### MCTD's Post Processor : | |
### ------------------------------------ | |
### | |
### USAGE: MCTD_PP( denoised, source, | |
### sharp, adapt, strength, SHmode, SHmethod, Slimit, Sovershoot, Tlimit, Tovershoot, shF, | |
### protect, cutoff, threshold, maxdiff, | |
### AA, useEEDI2, reduc, maxd, AAthr, method, aaF, | |
### deblock, useQED, quant1, quant2, | |
### edgeclean, ECrad, ECthr, ECmode, | |
### stabilize, maxr, TTstr, | |
### enhance, GFthr, AGstr, bias, temp, dbF, | |
### chroma, settings ) | |
### | |
### This is the post-processor used internally in MCTD. | |
### It can be called externally if you want some specific functionality without denoising. | |
### | |
### Parameters & defaults are the same as MCTD. | |
### By default, all filters are OFF! | |
### | |
### "Sharp" & "Protect" options need 2 inputs: | |
### EX: source=last | |
### denoised=source.FFT3Dfilter() | |
### MCTD_PP(denoised,source,...) | |
### The others only need "denoised". | |
### | |
### | |
### | |
### CHANGELOG: | |
### ---------- | |
### | |
### v1.4.20 mod2: remove deblock mod16 warnings, pad and crop internally | |
### | |
### v1.4.20 mod : add "p1nr", "p2nr", "ppnr", "shF", "aaF", "dbF" to allow custom filters | |
### | |
### v1.4.20 : tweaked some settings | |
### updated QED_Deblock version | |
### | |
### v1.4.18 : fixed anti-aliasing PP (was broken since v1.4.07) | |
### updated MVTools-MaskTools-AddgrainC version | |
### | |
### v1.4.16 : added switch to avoid loading of unused filters | |
### fixed a bug in anti-aliasing part | |
### | |
### v1.4.08 : fixed MOD16 warning when deblock=true | |
### | |
### v1.4.07 : improved masking in PP-stage | |
### cleaned code (cosmetic) | |
### | |
### v1.4.00 : fixed bug with maxdiff=0 | |
### fixed speed issue in MCTemporalDenoisePP (+20%) | |
### added "deblock" to MCTemporalDenoisePP | |
### changed "flat" to "enhance" | |
### cleaned and optimized all the code | |
### changed some settings | |
### updated documentation | |
### | |
### v1.3.09 : added MOD4 restriction | |
### updated MVTools version | |
### | |
### v1.3.00 : added a post-denoising stage (see "post") | |
### fixed a bug with fixFFT3D and defined p clip | |
### changed "very high" to be less insane | |
### renamed fixFFT3D to fixband | |
### cleaned some stuff | |
### adapted to LSFmod v1.8 | |
### | |
### v1.2.02 : changed default gpu=true to gpu=false (set gpu=true if you want speed!!!) | |
### adapted to LSFmod v1.7 | |
### | |
### v1.2.00 : adapted for LSFmod v1.6 & GradFun2DBmod v1.3 | |
### changed sharp int->bool (deleted sharp=1) | |
### | |
### v1.1.27 : fixed a bug in MCTemporalDenoisePP with chroma=false | |
### adapted for LSFmod v1.5 | |
### | |
### v1.1.26 : changed "flat" post-processing to use GradFun2DBmod | |
### changed int->float for AGstr | |
### fixed a small bug in AA | |
### | |
### v1.1.24 : fixed a chroma bug with PP | |
### | |
### v1.1.23 : adapted script for MvTools v2.3.0 (deleted MT & idx parameters) | |
### changed MCTemporalDenoisePP's defaults (now the same as MCTemporalDenoise) | |
### deleted safe parameter (slow & useless) | |
### changed some minor things | |
### | |
### v1.0.03 : fixed a bug in MCTemporalDenoisePP | |
### | |
### v1.0.02 : changed defaults according to new LSFmod v1.2 | |
### | |
### v1.0.01 : fixed a speed issue in MCTemporalDenoisePP (introduced in beta5) | |
### changed documentation about MCTemporalDenoisePP | |
### | |
### v1.0.00 : first stable version | |
### changed sharp=2, need LSFmod v1.0 ! | |
### fixed a bug introduced in beta5 | |
### | |
### 1.0beta5: added new sharpening routine & deleted LSF (SHmode,Slimit,Sovershoot,Tlimit,Tovershoot) | |
### changed some code (cosmetic) | |
### | |
### 1.0beta4: changed some descriptions & blksize default (submitted by Didée) | |
### added auto blksize setting (16:HD & 8:SD, if you want speed use 16) | |
### | |
### 1.0beta3: all post-processing filters are now usable as a standalone function (MCTemporalDenoisePP) | |
### added MC-antialiasing (see reduc parameter) | |
### | |
### 1.0beta2: fixed MOD16 restriction (effective only if deblock=true) | |
### small speedup/fix with limit>0 and/or protect=true&maxdiff>0 | |
### added warning about GPU & MT in the documentation | |
### | |
### 1.0beta1: changed name Udegrain --> MCTemporalDenoise (to be more specific and avoid confusion with chroma) | |
### added the choice to use MDegrain (since the chroma bug in MDegrain is fixed, +50% speed) | |
### added twopass option to do the denoising job in two stage (very effective but slow) | |
### added MT parameter for MVTools (be careful +- unstable) | |
### added fixFFT3D parameter to prevent banding/posterize with limit=-1 | |
### added stabilize options (stabilize,maxr,TTstr) | |
### added deblock options (deblock,useQED,quant1,quant2) | |
### added new presets "light"(=low)/"heavy"(=medium) --> 5 presets (very high is 'a bit' extrem) | |
### added check/warning for some settings | |
### added thSAD2 & limit2 parameters for twopass=true | |
### added overrange parameter for controling sharpness (useful for sharpening more than the source) | |
### changed +- much code to implement twopass/MDegrain/MT, should be bug free (I hope) | |
### changed sharp->MVsharp & post->sharp | |
### changed "light Smode4" --> LimitedSharpenFaster for sharp=2 (strength,Smode,overshoot) | |
### reduced max radius to 6 | |
### optimized chroma in PP stage (+20% with all PP on) | |
### fixed a bug with external p clip | |
### fixed a bug in Star&Bright Point Protection with maxdiff>0 | |
### added YV12&MOD16 restriction | |
### changed some settings due to new presets | |
### restriction when using MT=true: bt=1 in FFT3Dgpu & plane=4 in MDegrainMulti (will be removed when fixed) | |
### | |
### v0.9.05a: changed version number: vX.XX branch -> v0.X.XX branch | |
### added AA options (AA,useEEDI2,maxd,AAthr,method) | |
### changed dering --> edgeclean: you can now use your own script | |
### fixed bug with show=true | |
### fixed bug with chroma in PP stage | |
### fixed omission with chroma=false in MAnalyse | |
### changed some settings | |
### added changelog in .avsi | |
### | |
### v0.9.01a: added adapt & SS for sharpening | |
### added dering option (dering, DRGrad, DRGthr, RGmode) | |
### added flat areas processing (flat, AGstr, GFthr, bias) | |
### added modX(=blocksize) checking | |
### changed some default settings | |
### updated documentation in .avsi | |
### | |
### v0.8.08c: fixed bug with chroma=false & interlaced=true | |
### | |
### v0.8.08b: added mocomp contra-sharpening (basic contra-sharpening always usable) | |
### | |
### v0.7.29a: added star & bright points protection | |
### changed some default options | |
### added more options for FFT3D | |
### added YV12 checking | |
### | |
### v0.7.25a: changed to chroma=false for light settings | |
### added temporal limiter for sharpening | |
### | |
### v0.7.24a: replaced blankclip by nop | |
### | |
### v0.7.23a: first public release | |
### | |
#################################################################################################################################### | |
# Based on dither_merge16_8 in Dither package (http://forum.doom9.org/showthread.php?p=1386559#post1386559) | |
Function MCPP_merge16_8 (clip src1, clip src2, clip mask, bool "luma", int "y", int "u", int "v") | |
{ | |
vers = VersionNumber () | |
luma = Default (luma, false) | |
y = Default (y, 3) | |
u = Default (u, 1) | |
v = Default (v, 1) | |
Assert(y == 1 || y == 3, "MCPP_merge16_8: y can only be 1 or 3") | |
Assert(u == 1 || u == 3, "MCPP_merge16_8: u can only be 1 or 3") | |
Assert(v == 1 || v == 3, "MCPP_merge16_8: v can only be 1 or 3") | |
w = mask.Width () | |
h = mask.Height () | |
Assert (src1.Width () == w) | |
Assert (src2.Width () == w) | |
Assert (src1.Height () == h * 2) | |
Assert (src2.Height () == h * 2) | |
mask = (luma && (vers < 2.6 || ! src1.Dither_isy8 ())) | |
\ ? mask.MergeChroma (mask.YToUV (mask).BilinearResize (w, h)) | |
\ : mask | |
msb1 = src1.Dither_get_msb () | |
lsb1 = src1.Dither_get_lsb () | |
msb2 = src2.Dither_get_msb () | |
lsb2 = src2.Dither_get_lsb () | |
p1a = Dither_lutxy8 (msb1, mask, expr="256 y - x * ", y=y, u=u, v=v) | |
p1b = Dither_lutxy8 (lsb1, mask, expr="256 y - x * 256 /", y=y, u=u, v=v) | |
p2a = Dither_lutxy8 (msb2, mask, expr=" y x * ", y=y, u=u, v=v) | |
p2b = Dither_lutxy8 (lsb2, mask, expr=" y x * 256 /", y=y, u=u, v=v) | |
p1 = Dither_add16 (p1a, p1b, wrap=True) | |
p2 = Dither_add16 (p2a, p2b, wrap=True) | |
Dither_add16 (p1, p2, wrap=True) | |
} | |
# Based on Dither_convert_8_to_16 | |
Function MCPP_convert_8_to_16 (clip src) | |
{ | |
StackVertical (src, BlankClip (src, pixel_type="YV12", color_yuv=0)) | |
} | |
# copied from Dither package | |
Function MCPP_crop16 (clip src, int "left", int "top", | |
\ int "width", int "height", bool "align") | |
{ | |
left = Default (left, 0) | |
top = Default (top, 0) | |
width = Default (width, 0) | |
height = Default (height, 0) | |
src | |
w = Width () | |
h = Height () / 2 | |
width = (width <= 0) ? w - left + width : width | |
height = (height <= 0) ? h - top + height : height | |
Assert (width > 0) | |
Assert (height > 0) | |
msb = Crop (left, top, width, height, align) | |
lsb = Crop (left, top + h, width, height, align) | |
(top == 0 && height == h) | |
\ ? src.Crop (left, 0, width, 0) | |
\ : StackVertical (msb, lsb) | |
} | |
Function MCPP_final_mt_merge (clip src1, clip src2, clip mask, bool "luma", int "y", int "u", int "v") | |
{ | |
src1 = (src1.height * 2 == src2.height ) ? src1.MCPP_convert_8_to_16() : src1 | |
src2 = (src1.height == src2.height * 2) ? src2.MCPP_convert_8_to_16() : src2 | |
return Eval( ((mask.height * 2 == src1.height) ? "MCPP_merge16_8" : "mt_merge") + "(src1, src2, mask, luma, y, u, v)") | |
} | |
Function MCPP_final_MergeChroma (clip src1, clip src2) | |
{ | |
src1 = (src1.height * 2 == src2.height ) ? src1.MCPP_convert_8_to_16() : src1 | |
src2 = (src1.height == src2.height * 2) ? src2.MCPP_convert_8_to_16() : src2 | |
return src1.MergeChroma(src2) | |
} | |
function MCTD( clip i, int "radius", int "sigma", bool "twopass", bool "useTTmpSm", int "limit", int "limit2", int "post", bool "chroma", bool "interlaced", | |
\ bool "sharp", bool "adapt", int "strength", int "SHmode", int "SHmethod", int "Slimit", int "Sovershoot", bool "Tlimit", int "Tovershoot", string "shF", | |
\ bool "protect", int "cutoff", int "threshold", int "maxdiff", | |
\ bool "AA", bool "useEEDI2", float "reduc", int "maxd", int "AAthr", int "method", string "aaF", | |
\ bool "deblock", bool "useQED", int "quant1", int "quant2", | |
\ bool "edgeclean", int "ECrad", int "ECthr", string "ECmode", | |
\ bool "stabilize", int "maxr", int "TTstr", | |
\ bool "enhance", float "GFthr", float "AGstr", int "bias", int "temp", string "dbF", | |
\ int "bwbh", int "owoh", int "blksize", int "overlap", | |
\ bool "GPU", bool "fixband", int "bt", int "ncpu", int "precision", | |
\ int "thSAD", int "thSAD2", int "thSCD1", int "thSCD2", | |
\ bool "truemotion", bool "MVglobal", int "pel", int "pelsearch", int "search", int "searchparam", int "MVsharp", int "DCT", | |
\ clip "p", string "settings", | |
\ bool "show", int "screenW", int "screenH", | |
\ string "p1nr", string "p2nr", string "ppnr" ) | |
{ | |
### VERSION | |
version = "v1.4.20 mod2" | |
Assert(isYV12(i) == True ? true : false, chr(10) + "This is not an YV12 clip ! Please convert color space to YV12 before using MCTD()" + chr(10)) | |
### SETTINGS | |
settings = Default(settings, "low") | |
settings_num = -1 | |
settings_num = (settings == "very low") ? 0 : settings_num | |
settings_num = (settings == "low") ? 1 : settings_num | |
settings_num = (settings == "medium") ? 2 : settings_num | |
settings_num = (settings == "high") ? 3 : settings_num | |
settings_num = (settings == "very high") ? 4 : settings_num | |
Assert(settings_num >=0 ? true : false, chr(10) + "These settings do not exist !" + chr(10)) | |
function MCTD_Defaults(clip clp, int "settings_num", string "setting") | |
{ | |
HD = (clp.width > 1024 || clp.height > 576) ? true : false | |
### DEFAULTS # VERY LOW # LOW # MEDIUM # HIGH # VERY HIGH # | |
radius = Select(settings_num, 1 , 2 , 3 , 2 , 3 ) | |
sigma = Select(settings_num, 2 , 4 , 8 , 12 , 16 ) | |
twopass = Select(settings_num, false , false , false , true , true ) | |
useTTmpSm = Select(settings_num, false , false , false , false , false ) | |
limit = Select(settings_num, -1 , -1 , -1 , -1 , 0 ) | |
limit2 = Select(settings_num, -1 , -1 , -1 , 0 , 0 ) | |
post = Select(settings_num, 0 , 0 , 0 , 0 , 0 ) | |
chroma = Select(settings_num, false , false , true , true , true ) | |
interlaced = Select(settings_num, false , false , false , false , false ) | |
sharp = Select(settings_num, true , true , true , true , true ) | |
adapt = Select(settings_num, true , true , true , true , true ) | |
strength = Select(settings_num, 100 , 100 , 150 , 200 , 200 ) | |
SHmode = Select(settings_num, 3 , 3 , 3 , 3 , 3 ) | |
SHmethod = Select(settings_num, 3 , 3 , 3 , 3 , 3 ) | |
Slimit = Select(settings_num, 0 , 0 , 0 , 0 , 0 ) | |
Sovershoot = Select(settings_num, 0 , 0 , 0 , 0 , 0 ) | |
Tlimit = Select(settings_num, true , true , true , true , true ) | |
Tovershoot = Select(settings_num, 2 , 2 , 1 , 0 , 0 ) | |
shF = Select(settings_num, "internal" , "internal" , "internal" , "internal" , "internal" ) | |
protect = Select(settings_num, false , false , false , false , false ) | |
cutoff = Select(settings_num, 64 , 64 , 64 , 64 , 64 ) | |
threshold = Select(settings_num, 16 , 16 , 16 , 16 , 16 ) | |
maxdiff = Select(settings_num, 4 , 4 , 4 , 4 , 4 ) | |
AA = Select(settings_num, false , false , false , false , false ) | |
useEEDI2 = Select(settings_num, true , true , false , false , false ) | |
reduc = Select(settings_num, 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ) | |
maxd = Select(settings_num, 24 , 24 , 48 , 48 , 48 ) | |
AAthr = Select(settings_num, 64 , 32 , 32 , 16 , 16 ) | |
method = Select(settings_num, 2 , 1 , 1 , 0 , 0 ) | |
aaF = Select(settings_num, "internal" , "internal" , "internal" , "internal" , "internal" ) | |
deblock = Select(settings_num, false , false , false , false , false ) | |
useQED = Select(settings_num, true , true , true , false , false ) | |
quant1 = Select(settings_num, 10 , 20 , 30 , 30 , 40 ) | |
quant2 = Select(settings_num, 20 , 40 , 60 , 60 , 80 ) | |
edgeclean = Select(settings_num, false , false , false , false , false ) | |
ECrad = Select(settings_num, 1 , 2 , 3 , 4 , 5 ) | |
ECthr = Select(settings_num, 64 , 32 , 32 , 16 , 16 ) | |
ECmode = Select(settings_num, "Removegrain(2,0)" , "Removegrain(2,0)" , "Removegrain(2,2)" , "Removegrain(4,4)" , "Removegrain(4,4)" ) | |
stabilize = Select(settings_num, false , false , false , true , true ) | |
maxr = Select(settings_num, 1 , 1 , 2 , 2 , 2 ) | |
TTstr = Select(settings_num, 1 , 1 , 1 , 2 , 2 ) | |
enhance = Select(settings_num, true , true , false , false , false ) | |
GFthr = Select(settings_num, 1.1 , 1.2 , 1.4 , 1.6 , 1.8 ) | |
AGstr = Select(settings_num, 0.6 , 0.8 , 1.2 , 1.8 , 2.4 ) | |
bias = Select(settings_num, 64 , 64 , 64 , 64 , 64 ) | |
temp = Select(settings_num, 50 , 50 , 50 , 50 , 50 ) | |
dbF = Select(settings_num, "internal" , "internal" , "internal" , "internal" , "internal" ) | |
bwbh = Select(settings_num, HD?16:8 , HD?16:8 , HD?16:8 , HD?16:8 , HD?16:8 ) | |
owoh = Select(settings_num, HD? 8:4 , HD? 8:4 , HD? 8:4 , HD? 8:4 , HD? 8:4 ) | |
blksize = Select(settings_num, HD?16:8 , HD?16:8 , HD?16:8 , HD?16:8 , HD?16:8 ) | |
overlap = Select(settings_num, HD? 8:4 , HD? 8:4 , HD? 8:4 , HD? 8:4 , HD? 8:4 ) | |
GPU = Select(settings_num, false , false , false , false , false ) | |
fixband = Select(settings_num, true , true , true , true , true ) | |
bt = Select(settings_num, 1 , 3 , 3 , 3 , 4 ) | |
ncpu = Select(settings_num, 1 , 1 , 1 , 1 , 1 ) | |
precision = Select(settings_num, 2 , 2 , 2 , 2 , 2 ) | |
thSAD = Select(settings_num, 200 , 300 , 400 , 500 , 600 ) | |
thSAD2 = Select(settings_num, 200 , 300 , 400 , 500 , 600 ) | |
thSCD1 = Select(settings_num, 200 , 300 , 400 , 500 , 600 ) | |
thSCD2 = Select(settings_num, 90 , 100 , 100 , 130 , 130 ) | |
truemotion = Select(settings_num, false , false , false , false , false ) | |
MVglobal = Select(settings_num, true , true , true , true , true ) | |
pel = Select(settings_num, 1 , 2 , 2 , 2 , 2 ) | |
pelsearch = Select(settings_num, 1 , 2 , 2 , 2 , 2 ) | |
search = Select(settings_num, 2 , 2 , 2 , 2 , 2 ) | |
searchparam = Select(settings_num, 2 , 2 , 2 , 2 , 2 ) | |
MVsharp = Select(settings_num, 2 , 2 , 2 , 1 , 0 ) | |
DCT = Select(settings_num, 0 , 0 , 0 , 0 , 0 ) | |
show = Select(settings_num, false , false , false , false , false ) | |
screenW = Select(settings_num, 1280 , 1280 , 1280 , 1280 , 1280 ) | |
screenH = Select(settings_num, 1024 , 1024 , 1024 , 1024 , 1024 ) | |
return Eval(setting) | |
} | |
radius = default(radius, MCTD_Defaults( i, settings_num, "radius" ) ) | |
sigma = default(sigma, MCTD_Defaults( i, settings_num, "sigma" ) ) | |
twopass = default(twopass, MCTD_Defaults( i, settings_num, "twopass" ) ) | |
useTTmpSm = default(useTTmpSm, MCTD_Defaults( i, settings_num, "useTTmpSm" ) ) | |
limit = default(limit, MCTD_Defaults( i, settings_num, "limit" ) ) | |
limit2 = default(limit2, MCTD_Defaults( i, settings_num, "limit2" ) ) | |
post = default(post, MCTD_Defaults( i, settings_num, "post" ) ) | |
chroma = default(chroma, MCTD_Defaults( i, settings_num, "chroma" ) ) | |
interlaced = default(interlaced, MCTD_Defaults( i, settings_num, "interlaced" ) ) | |
sharp = default(sharp, MCTD_Defaults( i, settings_num, "sharp" ) ) | |
adapt = default(adapt, MCTD_Defaults( i, settings_num, "adapt" ) ) | |
strength = default(strength, MCTD_Defaults( i, settings_num, "strength" ) ) | |
SHmode = default(SHmode, MCTD_Defaults( i, settings_num, "SHmode" ) ) | |
SHmethod = default(SHmethod, MCTD_Defaults( i, settings_num, "SHmethod" ) ) | |
Slimit = default(Slimit, MCTD_Defaults( i, settings_num, "Slimit" ) ) | |
Sovershoot = default(Sovershoot, MCTD_Defaults( i, settings_num, "Sovershoot" ) ) | |
Tlimit = default(Tlimit, MCTD_Defaults( i, settings_num, "Tlimit" ) ) | |
Tovershoot = default(Tovershoot, MCTD_Defaults( i, settings_num, "Tovershoot" ) ) | |
shF = default(shF, MCTD_Defaults( i, settings_num, "shF" ) ) | |
protect = default(protect, MCTD_Defaults( i, settings_num, "protect" ) ) | |
cutoff = default(cutoff, MCTD_Defaults( i, settings_num, "cutoff" ) ) | |
threshold = default(threshold, MCTD_Defaults( i, settings_num, "threshold" ) ) | |
maxdiff = default(maxdiff, MCTD_Defaults( i, settings_num, "maxdiff" ) ) | |
AA = default(AA, MCTD_Defaults( i, settings_num, "AA" ) ) | |
useEEDI2 = default(useEEDI2, MCTD_Defaults( i, settings_num, "useEEDI2" ) ) | |
reduc = default(reduc, MCTD_Defaults( i, settings_num, "reduc" ) ) | |
maxd = default(maxd, MCTD_Defaults( i, settings_num, "maxd" ) ) | |
AAthr = default(AAthr, MCTD_Defaults( i, settings_num, "AAthr" ) ) | |
method = default(method, MCTD_Defaults( i, settings_num, "method" ) ) | |
aaF = default(aaF, MCTD_Defaults( i, settings_num, "aaF" ) ) | |
deblock = default(deblock, MCTD_Defaults( i, settings_num, "deblock" ) ) | |
useQED = default(useQED, MCTD_Defaults( i, settings_num, "useQED" ) ) | |
quant1 = default(quant1, MCTD_Defaults( i, settings_num, "quant1" ) ) | |
quant2 = default(quant2, MCTD_Defaults( i, settings_num, "quant2" ) ) | |
edgeclean = default(edgeclean, MCTD_Defaults( i, settings_num, "edgeclean" ) ) | |
ECrad = default(ECrad, MCTD_Defaults( i, settings_num, "ECrad" ) ) | |
ECthr = default(ECthr, MCTD_Defaults( i, settings_num, "ECthr" ) ) | |
ECmode = default(ECmode, MCTD_Defaults( i, settings_num, "ECmode" ) ) | |
stabilize = default(stabilize, MCTD_Defaults( i, settings_num, "stabilize" ) ) | |
maxr = default(maxr, MCTD_Defaults( i, settings_num, "maxr" ) ) | |
TTstr = default(TTstr, MCTD_Defaults( i, settings_num, "TTstr" ) ) | |
enhance = default(enhance, MCTD_Defaults( i, settings_num, "enhance" ) ) | |
GFthr = default(GFthr, MCTD_Defaults( i, settings_num, "GFthr" ) ) | |
AGstr = default(AGstr, MCTD_Defaults( i, settings_num, "AGstr" ) ) | |
bias = default(bias, MCTD_Defaults( i, settings_num, "bias" ) ) | |
temp = default(temp, MCTD_Defaults( i, settings_num, "temp" ) ) | |
dbF = default(dbF, MCTD_Defaults( i, settings_num, "dbF" ) ) | |
bwbh = default(bwbh, MCTD_Defaults( i, settings_num, "bwbh" ) ) | |
owoh = default(owoh, MCTD_Defaults( i, settings_num, "owoh" ) ) | |
blksize = default(blksize, MCTD_Defaults( i, settings_num, "blksize" ) ) | |
overlap = default(overlap, MCTD_Defaults( i, settings_num, "overlap" ) ) | |
GPU = default(GPU, MCTD_Defaults( i, settings_num, "GPU" ) ) | |
fixband = default(fixband, MCTD_Defaults( i, settings_num, "fixband" ) ) | |
bt = default(bt, MCTD_Defaults( i, settings_num, "bt" ) ) | |
ncpu = default(ncpu, MCTD_Defaults( i, settings_num, "ncpu" ) ) | |
precision = default(precision, MCTD_Defaults( i, settings_num, "precision" ) ) | |
thSAD = default(thSAD, MCTD_Defaults( i, settings_num, "thSAD" ) ) | |
thSAD2 = default(thSAD2, MCTD_Defaults( i, settings_num, "thSAD2" ) ) | |
thSCD1 = default(thSCD1, MCTD_Defaults( i, settings_num, "thSCD1" ) ) | |
thSCD2 = default(thSCD2, MCTD_Defaults( i, settings_num, "thSCD2" ) ) | |
truemotion = default(truemotion, MCTD_Defaults( i, settings_num, "truemotion" ) ) | |
MVglobal = default(MVglobal, MCTD_Defaults( i, settings_num, "MVglobal" ) ) | |
pel = default(pel, MCTD_Defaults( i, settings_num, "pel" ) ) | |
pelsearch = default(pelsearch, MCTD_Defaults( i, settings_num, "pelsearch" ) ) | |
search = default(search, MCTD_Defaults( i, settings_num, "search" ) ) | |
searchparam = default(searchparam, MCTD_Defaults( i, settings_num, "searchparam" ) ) | |
MVsharp = default(MVsharp, MCTD_Defaults( i, settings_num, "MVsharp" ) ) | |
DCT = default(DCT, MCTD_Defaults( i, settings_num, "DCT" ) ) | |
show = default(show, MCTD_Defaults( i, settings_num, "show" ) ) | |
screenW = default(screenW, MCTD_Defaults( i, settings_num, "screenW" ) ) | |
screenH = default(screenH, MCTD_Defaults( i, settings_num, "screenH" ) ) | |
show_p = defined(p) ? "external" : "internal" | |
### WARNING | |
Assert((radius>=1&&radius<=6) ? true : false, chr(10) + "'radius' have not a correct value! [0-6]" + chr(10)) | |
Assert((limit>=-1&&limit<=255) ? true : false, chr(10) + "'limit' have not a correct value! [-1,0,...255]" + chr(10)) | |
Assert((limit2>=-1&&limit2<=255) ? true : false, chr(10) + "'limit' have not a correct value! [-1,0,...255]" + chr(10)) | |
Assert((Tovershoot>=0) ? true : false, chr(10) + "'Tovershoot' have not a correct value! [>=0]" + chr(10)) | |
Assert((cutoff>=0&&cutoff<=255) ? true : false, chr(10) + "'cutoff' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((threshold>=0&&threshold<=127) ? true : false, chr(10) + "'threshold' have not a correct value! [0,...,127]" + chr(10)) | |
Assert((maxdiff>=0&&maxdiff<=255) ? true : false, chr(10) + "'maxdiff' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((reduc>=-1&&reduc<=1.0) ? true : false, chr(10) + "'reduc' have not a correct value! [-1,0.0,...,1.0]" + chr(10)) | |
Assert((AAthr>=0&&AAthr<=255) ? true : false, chr(10) + "'AAthr' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((method>=0&&method<=2) ? true : false, chr(10) + "'method' have not a correct value! [0,1,2]" + chr(10)) | |
Assert((ECrad>=1) ? true : false, chr(10) + "'ECrad' have not a correct value! [>=1]" + chr(10)) | |
Assert((ECthr>=0&&ECthr<=255) ? true : false, chr(10) + "'ECthr' have not a correct value! [0,...,255]" + chr(10)) | |
### INPUT | |
i = (interlaced==true) ? i.separatefields() : i | |
mod = (bwbh>=blksize) ? bwbh : blksize | |
xi = i.width() | |
xf = ceil(xi/float(mod))*mod - xi + mod | |
xn = int(xi+xf) | |
yi = i.height() | |
yf = ceil(yi/float(mod))*mod - yi + mod | |
yn = int(yi+yf) | |
idb = i | |
i = i.pointresize(xn,yn,-xf/2,-yf/2,xn,yn) | |
m4 = ((int(xi/4.0)*4==xi)&&(int(yi/4.0)*4==yi)) ? true : false | |
Assert( m4 ? true : false, chr(10) + "This is not a MOD4 clip! Please use crop() or addborders() before using MCTD()" + chr(10)) | |
### PREFILTERING | |
p = defined(p) ? p.pointresize(xn,yn,-xf/2,-yf/2,xn,yn) | |
\ : (sigma==0) ? i | |
\ : (GPU==false&&fixband==false) ? i.FFT3Dfilter(sigma=sigma*0.8,sigma2=sigma*0.6,sigma3=sigma*0.4,sigma4=sigma*0.2,bw=bwbh,bh=bwbh,ow=owoh,oh=owoh,plane=chroma?4:0,bt=bt,ncpu=ncpu) | |
\ : (GPU==true &&fixband==false) ? i.FFT3Dgpu(sigma=sigma*0.8,sigma2=sigma*0.6,sigma3=sigma*0.4,sigma4=sigma*0.2,bw=bwbh,bh=bwbh,ow=owoh,oh=owoh,plane=chroma?4:0,bt=bt,precision=precision) | |
\ : (GPU==false&&fixband==true ) ? i.FFT3Dfilter(sigma=sigma*0.8,sigma2=sigma*0.6,sigma3=sigma*0.4,sigma4=sigma*0.2,bw=bwbh,bh=bwbh,ow=owoh,oh=owoh,plane=chroma?4:0,bt=bt,ncpu=ncpu).gradfun2db(thr=1.0+sigma*0.05) | |
\ : i.FFT3Dgpu(sigma=sigma*0.8,sigma2=sigma*0.6,sigma3=sigma*0.4,sigma4=sigma*0.2,bw=bwbh,bh=bwbh,ow=owoh,oh=owoh,plane=chroma?4:0,bt=bt,precision=precision).gradfun2db(thr=1.0+sigma*0.05) | |
### DEBLOCKING | |
padX = xi%8 == 0 ? 0 : (8 - xi%8) | |
padY = yi%8 == 0 ? 0 : (8 - yi%8) | |
d = (deblock==false) ? i | |
\ : (useQED==true) ? idb.deblock_QED(quant1=quant1,quant2=quant2,uv=chroma?3:2).pointresize(xn,yn,-xf/2,-yf/2,xn,yn) | |
\ : ( padX==0 && padY==0 ) ? idb.deblock(quant=int(quant1*0.5+quant2*0.5)).pointresize(xn,yn,-xf/2,-yf/2,xn,yn) | |
\ : idb.pointresize(xi+padX, yi+padY, 0, 0, xi+padX, xi+padY).deblock(quant=int(quant1*0.5+quant2*0.5)).pointresize(xn,yn,-xf/2,-yf/2,xn-padX,yn-padX) | |
### PREPARING | |
nullclip = Blankclip() | |
pMVS = p.MSuper(hpad=0,vpad=0,pel=pel,sharp=MVsharp,chroma=chroma) | |
f1v = (radius<1) ? nullclip | |
\ : pMVS.MAnalyse(isb=false, delta=1, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
f2v = (radius<2) ? nullclip | |
\ : pMVS.MAnalyse(isb=false, delta=2, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
f3v = (radius<3) ? nullclip | |
\ : pMVS.MAnalyse(isb=false, delta=3, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
f4v = (radius<4) ? nullclip | |
\ : pMVS.MAnalyse(isb=false, delta=4, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
f5v = (radius<5) ? nullclip | |
\ : pMVS.MAnalyse(isb=false, delta=5, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
f6v = (radius<6) ? nullclip | |
\ : pMVS.MAnalyse(isb=false, delta=6, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
b1v = (radius<1) ? nullclip | |
\ : pMVS.MAnalyse(isb=true, delta=1, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
b2v = (radius<2) ? nullclip | |
\ : pMVS.MAnalyse(isb=true, delta=2, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
b3v = (radius<3) ? nullclip | |
\ : pMVS.MAnalyse(isb=true, delta=3, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
b4v = (radius<4) ? nullclip | |
\ : pMVS.MAnalyse(isb=true, delta=4, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
b5v = (radius<5) ? nullclip | |
\ : pMVS.MAnalyse(isb=true, delta=5, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
b6v = (radius<6) ? nullclip | |
\ : pMVS.MAnalyse(isb=true, delta=6, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=chroma) | |
function MCTD_CTM(clip "i", clip "iMVS", clip "SAD_f1m", clip "SAD_b1m", clip "f1c", clip "b1c", | |
\ clip "f1v", clip "f2v", clip "f3v", clip "f4v", clip "f5v", clip "f6v", clip "b1v", clip "b2v", clip "b3v", clip "b4v", clip "b5v", clip "b6v", | |
\ int "radius", bool "chroma", int "thSAD", int "thSCD1", int "thSCD2", string "cnr") | |
{ | |
nullclip = BlankClip() | |
SAD_f2m = (radius>=2) ? i.MMask(f2v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_f3m = (radius>=3) ? i.MMask(f3v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_f4m = (radius>=4) ? i.MMask(f4v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_f5m = (radius>=5) ? i.MMask(f5v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_f6m = (radius>=6) ? i.MMask(f6v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_b2m = (radius>=2) ? i.MMask(b2v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_b3m = (radius>=3) ? i.MMask(b3v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_b4m = (radius>=4) ? i.MMask(b4v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_b5m = (radius>=5) ? i.MMask(b5v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
SAD_b6m = (radius>=6) ? i.MMask(b6v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) : nullclip | |
b = BlankClip(i,color_yuv=$008080) | |
SAD_m = (radius==6) ? interleave(SAD_f6m, SAD_f5m, SAD_f4m, SAD_f3m, SAD_f2m, SAD_f1m, b, SAD_b1m, SAD_b2m, SAD_b3m, SAD_b4m, SAD_b5m, SAD_b6m) | |
\ : (radius==5) ? interleave( SAD_f5m, SAD_f4m, SAD_f3m, SAD_f2m, SAD_f1m, b, SAD_b1m, SAD_b2m, SAD_b3m, SAD_b4m, SAD_b5m ) | |
\ : (radius==4) ? interleave( SAD_f4m, SAD_f3m, SAD_f2m, SAD_f1m, b, SAD_b1m, SAD_b2m, SAD_b3m, SAD_b4m ) | |
\ : (radius==3) ? interleave( SAD_f3m, SAD_f2m, SAD_f1m, b, SAD_b1m, SAD_b2m, SAD_b3m ) | |
\ : (radius==2) ? interleave( SAD_f2m, SAD_f1m, b, SAD_b1m, SAD_b2m ) | |
\ : (radius==1) ? interleave( SAD_f1m, b, SAD_b1m ) | |
\ : nullclip | |
b2c = (radius>=2) ? i.MCompensate(iMVS, b2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
b3c = (radius>=3) ? i.MCompensate(iMVS, b3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
b4c = (radius>=4) ? i.MCompensate(iMVS, b4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
b5c = (radius>=5) ? i.MCompensate(iMVS, b5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
b6c = (radius>=6) ? i.MCompensate(iMVS, b6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
f2c = (radius>=2) ? i.MCompensate(iMVS, f2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
f3c = (radius>=3) ? i.MCompensate(iMVS, f3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
f4c = (radius>=4) ? i.MCompensate(iMVS, f4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
f5c = (radius>=5) ? i.MCompensate(iMVS, f5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
f6c = (radius>=6) ? i.MCompensate(iMVS, f6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) : nullclip | |
c = (radius==6) ? interleave(f6c, f5c, f4c, f3c, f2c, f1c, i, b1c, b2c, b3c, b4c, b5c, b6c) | |
\ : (radius==5) ? interleave( f5c, f4c, f3c, f2c, f1c, i, b1c, b2c, b3c, b4c, b5c ) | |
\ : (radius==4) ? interleave( f4c, f3c, f2c, f1c, i, b1c, b2c, b3c, b4c ) | |
\ : (radius==3) ? interleave( f3c, f2c, f1c, i, b1c, b2c, b3c ) | |
\ : (radius==2) ? interleave( f2c, f1c, i, b1c, b2c ) | |
\ : (radius==1) ? interleave( f1c, i, b1c ) | |
\ : nullclip | |
sm = Defined(cnr) ? Eval("c."+cnr) | |
\ : c.TTempSmooth(radius,255,255,1,1,strength=radius+1,pfclip=SAD_m,fp=false,scthresh=99.9) | |
sm = sm.SelectEvery(1+radius*2,radius) | |
return sm | |
} | |
function MCTD_MVD(clip "i", clip "iMVS", | |
\ clip "f1v", clip "f2v", clip "f3v", clip "f4v", clip "f5v", clip "f6v", clip "b1v", clip "b2v", clip "b3v", clip "b4v", clip "b5v", clip "b6v", | |
\ int "radius", bool "chroma", int "thSAD", int "thSCD1", int "thSCD2") | |
{ | |
nullclip = BlankClip() | |
mv12 = (radius==4) ? i.MDegrain2(iMVS, b1v, f1v, b2v, f2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) : nullclip | |
mv34 = (radius==4) ? i.MDegrain2(iMVS, b3v, f3v, b4v, f4v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) : nullclip | |
mv45 = (radius==5) ? i.MDegrain2(iMVS, b4v, f4v, b5v, f5v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) : nullclip | |
mv123 = (radius>=5) ? i.MDegrain3(iMVS, b1v, f1v, b2v, f2v, b3v, f3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) : nullclip | |
mv456 = (radius==6) ? i.MDegrain3(iMVS, b4v, f4v, b5v, f5v, b6v, f6v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) : nullclip | |
sm = (radius==1) ? i.MDegrain1(iMVS, b1v, f1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) | |
\ : (radius==2) ? i.MDegrain2(iMVS, b1v, f1v, b2v, f2v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) | |
\ : (radius==3) ? i.MDegrain3(iMVS, b1v, f1v, b2v, f2v, b3v, f3v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=chroma?4:0) | |
\ : (radius==4) ? Merge(mv12, mv34, 0.4444) | |
\ : (radius==5) ? Merge(mv123, mv45, 0.4545) | |
\ : Merge(mv123, mv456, 0.4615) | |
return sm | |
} | |
dMVS = d.MSuper(hpad=0,vpad=0,pel=pel,sharp=MVsharp,chroma=chroma) | |
SAD_f1m = d.MMask(f1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) | |
SAD_b1m = d.MMask(b1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) | |
f1c = d.MCompensate(dMVS, f1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
b1c = d.MCompensate(dMVS, b1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
### DENOISING: FIRST PASS | |
sm = ( Defined(p1nr) ) ? MCTD_CTM(i=d, iMVS=dMVS, SAD_f1m=SAD_f1m, SAD_b1m=SAD_b1m, f1c=f1c, b1c=b1c, | |
\ f1v=f1v, f2v=f2v, f3v=f3v, f4v=f4v, f5v=f5v, f6v=f6v, b1v=b1v, b2v=b2v, b3v=b3v, b4v=b4v, b5v=b5v, b6v=b6v, | |
\ radius=radius, chroma=chroma, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, cnr=p1nr) | |
\ : (useTTmpSm==true) ? MCTD_CTM(i=d, iMVS=dMVS, SAD_f1m=SAD_f1m, SAD_b1m=SAD_b1m, f1c=f1c, b1c=b1c, | |
\ f1v=f1v, f2v=f2v, f3v=f3v, f4v=f4v, f5v=f5v, f6v=f6v, b1v=b1v, b2v=b2v, b3v=b3v, b4v=b4v, b5v=b5v, b6v=b6v, | |
\ radius=radius, chroma=chroma, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
\ : MCTD_MVD(i=d, iMVS=dMVS, | |
\ f1v=f1v, f2v=f2v, f3v=f3v, f4v=f4v, f5v=f5v, f6v=f6v, b1v=b1v, b2v=b2v, b3v=b3v, b4v=b4v, b5v=b5v, b6v=b6v, | |
\ radius=radius, chroma=chroma, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
chr41 = chroma?4:1 | |
chr31 = chroma?3:1 | |
chr21 = chroma?2:1 | |
pD = mt_makediff(i,p,U=chr31,V=chr31) | |
smD = mt_makediff(i,sm,U=chr31,V=chr31) | |
DD = (limit==-1) ? mt_lutxy(pD,smD,"x 128 - abs y 128 - abs < x y ?",U=chr31,V=chr31) | |
\ : (limit>0) ? mt_lutxy(sm,i,"x y - abs "+string(limit)+" <= x x y - 0 < y "+string(limit)+" - y "+string(limit)+" + ? ?",U=chr31,V=chr31) | |
\ : sm | |
smL = (limit==-1) ? i.mt_makediff(DD,U=chr31,V=chr31) : DD | |
### DENOISING: SECOND PASS | |
smLMVS = (twopass==true) ? smL.MSuper(hpad=0,vpad=0,pel=pel,sharp=MVsharp,chroma=chroma) : nullclip | |
sm = (twopass==false) ? sm | |
\ : ( Defined(p2nr) ) ? MCTD_CTM(i=d, iMVS=dMVS, SAD_f1m=SAD_f1m, SAD_b1m=SAD_b1m, f1c=f1c, b1c=b1c, | |
\ f1v=f1v, f2v=f2v, f3v=f3v, f4v=f4v, f5v=f5v, f6v=f6v, b1v=b1v, b2v=b2v, b3v=b3v, b4v=b4v, b5v=b5v, b6v=b6v, | |
\ radius=radius, chroma=chroma, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, cnr=p2nr) | |
\ : (useTTmpSm==true) ? MCTD_CTM(i=smL, iMVS=smLMVS, SAD_f1m=SAD_f1m, SAD_b1m=SAD_b1m, f1c=f1c, b1c=b1c, | |
\ f1v=f1v, f2v=f2v, f3v=f3v, f4v=f4v, f5v=f5v, f6v=f6v, b1v=b1v, b2v=b2v, b3v=b3v, b4v=b4v, b5v=b5v, b6v=b6v, | |
\ radius=radius, chroma=chroma, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
\ : MCTD_MVD(i=smL, iMVS=smLMVS, | |
\ f1v=f1v, f2v=f2v, f3v=f3v, f4v=f4v, f5v=f5v, f6v=f6v, b1v=b1v, b2v=b2v, b3v=b3v, b4v=b4v, b5v=b5v, b6v=b6v, | |
\ radius=radius, chroma=chroma, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
smD = mt_makediff(i,sm,U=chr31,V=chr31) | |
DD = (twopass==true&&limit2==-1) ? mt_lutxy(pD,smD,"x 128 - abs y 128 - abs < x y ?",U=chr31,V=chr31) | |
\ : (twopass==true&&limit2>0) ? mt_lutxy(sm,i,"x y - abs "+string(limit2)+" <= x x y - 0 < y "+string(limit2)+" - y "+string(limit2)+" + ? ?",U=chr31,V=chr31) | |
\ : sm | |
smL = (twopass==false) ? smL | |
\ : (limit2==-1) ? i.mt_makediff(DD,U=chr31,V=chr31) | |
\ : DD | |
### POST-DENOISING: FFT3D | |
smP = (post==0) ? smL | |
\ : Defined(ppnr)? Eval("smL."+ppnr) | |
\ : (GPU==false) ? smL.FFT3Dfilter(sigma=post*0.8,sigma2=post*0.6,sigma3=post*0.4,sigma4=post*0.2,bw=bwbh,bh=bwbh,ow=owoh,oh=owoh,plane=chroma?4:0,bt=bt,ncpu=ncpu) | |
\ : smL.FFT3Dgpu(sigma=post*0.8,sigma2=post*0.6,sigma3=post*0.4,sigma4=post*0.2,bw=bwbh,bh=bwbh,ow=owoh,oh=owoh,plane=chroma?4:0,bt=bt,precision=precision) | |
smP = (post==0) ? smP | |
\ : (fixband==false) ? smP | |
\ : mt_makediff(smL,mt_makediff(smL,smP,U=chr31,V=chr31).gradfun2DB(thr=1.0+post*0.5),U=chr31,V=chr31) | |
### POST-PROCESSING | |
function MCTD_PP( clip denoised, clip "source", | |
\ bool "sharp", bool "adapt", int "strength", int "SHmode", int "SHmethod", int "Slimit", int "Sovershoot", bool "Tlimit", int "Tovershoot", string "shF", | |
\ bool "protect", int "cutoff", int "threshold", int "maxdiff", | |
\ bool "AA", bool "useEEDI2", float "reduc", int "maxd", int "AAthr", int "method", string "aaF", | |
\ bool "deblock", bool "useQED", int "quant1", int "quant2", | |
\ bool "edgeclean", int "ECrad", int "ECthr", string "ECmode", | |
\ bool "stabilize", int "maxr", int "TTstr", | |
\ bool "enhance", float "GFthr", float "AGstr", int "bias", int "temp", string "dbF", | |
\ bool "chroma", string "settings", | |
\ clip "f1v", clip "b1v", clip "f1c", clip "b1c", clip "SAD_f1m", clip "SAD_b1m", bool "internal" ) | |
{ | |
### SETTINGS | |
settings = Default(settings, "low") | |
settings_num = -1 | |
settings_num = (settings == "very low") ? 0 : settings_num | |
settings_num = (settings == "low") ? 1 : settings_num | |
settings_num = (settings == "medium") ? 2 : settings_num | |
settings_num = (settings == "high") ? 3 : settings_num | |
settings_num = (settings == "very high") ? 4 : settings_num | |
Assert(settings_num >=0 ? true : false, chr(10) + "These settings do not exist !" + chr(10)) | |
sharp = default(sharp, false ) | |
adapt = default(adapt, MCTD_Defaults( denoised, settings_num, "adapt" ) ) | |
strength = default(strength, MCTD_Defaults( denoised, settings_num, "strength" ) ) | |
SHmode = default(SHmode, MCTD_Defaults( denoised, settings_num, "SHmode" ) ) | |
SHmethod = default(SHmethod, MCTD_Defaults( denoised, settings_num, "SHmethod" ) ) | |
Slimit = default(Slimit, MCTD_Defaults( denoised, settings_num, "Slimit" ) ) | |
Sovershoot = default(Sovershoot, MCTD_Defaults( denoised, settings_num, "Sovershoot" ) ) | |
Tlimit = default(Tlimit, MCTD_Defaults( denoised, settings_num, "Tlimit" ) ) | |
Tovershoot = default(Tovershoot, MCTD_Defaults( denoised, settings_num, "Tovershoot" ) ) | |
shF = default(shF, MCTD_Defaults( denoised, settings_num, "shF" ) ) | |
protect = default(protect, false ) | |
cutoff = default(cutoff, MCTD_Defaults( denoised, settings_num, "cutoff" ) ) | |
threshold = default(threshold, MCTD_Defaults( denoised, settings_num, "threshold" ) ) | |
maxdiff = default(maxdiff, MCTD_Defaults( denoised, settings_num, "maxdiff" ) ) | |
AA = default(AA, false ) | |
useEEDI2 = default(useEEDI2, MCTD_Defaults( denoised, settings_num, "useEEDI2" ) ) | |
reduc = default(reduc, MCTD_Defaults( denoised, settings_num, "reduc" ) ) | |
maxd = default(maxd, MCTD_Defaults( denoised, settings_num, "maxd" ) ) | |
AAthr = default(AAthr, MCTD_Defaults( denoised, settings_num, "AAthr" ) ) | |
method = default(method, MCTD_Defaults( denoised, settings_num, "method" ) ) | |
aaF = default(aaF, MCTD_Defaults( denoised, settings_num, "aaF" ) ) | |
deblock = default(deblock, false ) | |
useQED = default(useQED, MCTD_Defaults( denoised, settings_num, "useQED" ) ) | |
quant1 = default(quant1, MCTD_Defaults( denoised, settings_num, "quant1" ) ) | |
quant2 = default(quant2, MCTD_Defaults( denoised, settings_num, "quant2" ) ) | |
edgeclean = default(edgeclean, false ) | |
ECrad = default(ECrad, MCTD_Defaults( denoised, settings_num, "ECrad" ) ) | |
ECthr = default(ECthr, MCTD_Defaults( denoised, settings_num, "ECthr" ) ) | |
ECmode = default(ECmode, MCTD_Defaults( denoised, settings_num, "ECmode" ) ) | |
stabilize = default(stabilize, false ) | |
maxr = default(maxr, MCTD_Defaults( denoised, settings_num, "maxr" ) ) | |
TTstr = default(TTstr, MCTD_Defaults( denoised, settings_num, "TTstr" ) ) | |
enhance = default(enhance, false ) | |
GFthr = default(GFthr, MCTD_Defaults( denoised, settings_num, "GFthr" ) ) | |
AGstr = default(AGstr, MCTD_Defaults( denoised, settings_num, "AGstr" ) ) | |
bias = default(bias, MCTD_Defaults( denoised, settings_num, "bias" ) ) | |
temp = default(temp, MCTD_Defaults( denoised, settings_num, "temp" ) ) | |
dbF = default(dbF, MCTD_Defaults( denoised, settings_num, "dbF" ) ) | |
chroma = default(chroma, MCTD_Defaults( denoised, settings_num, "chroma" ) ) | |
internal = default(internal, false ) | |
Assert((Tovershoot>=0) ? true : false, chr(10) + "'Tovershoot' have not a correct value! [>=0]" + chr(10)) | |
Assert((cutoff>=0&&cutoff<=255) ? true : false, chr(10) + "'cutoff' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((threshold>=0&&threshold<=127) ? true : false, chr(10) + "'threshold' have not a correct value! [0,...,127]" + chr(10)) | |
Assert((maxdiff>=0&&maxdiff<=255) ? true : false, chr(10) + "'maxdiff' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((reduc>=-1&&reduc<=1.0) ? true : false, chr(10) + "'reduc' have not a correct value! [-1,0.0,...,1.0]" + chr(10)) | |
Assert((AAthr>=0&&AAthr<=255) ? true : false, chr(10) + "'AAthr' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((method>=0&&method<=2) ? true : false, chr(10) + "'method' have not a correct value! [0,1,2]" + chr(10)) | |
Assert((ECrad>=1) ? true : false, chr(10) + "'ECrad' have not a correct value! [>=1]" + chr(10)) | |
Assert((ECthr>=0&&ECthr<=255) ? true : false, chr(10) + "'ECthr' have not a correct value! [0,...,255]" + chr(10)) | |
Assert((sharp==true||protect==true)&&defined(source)==false ? false : true, chr(10) + "Sharp & Protect need 'source' input in MCTD_PP !" + chr(10)) | |
### WARNING | |
Assert(isYV12(denoised) == True ? true : false, chr(10) + "This is not an YV12 clip ! Please convert color space to YV12 before using MCTD_PP()" + chr(10)) | |
w = denoised.width() | |
h = denoised.height() | |
m4 = (internal==true) ? true : ((int(w/4.0)*4==w)&&(int(h/4.0)*4==h)) ? true : false | |
Assert( m4 ? true : false, chr(10) + "This is not a MOD4 clip! Please use crop() or addborders() before using MCTD_PP()" + chr(10)) | |
### EXTERNAL | |
blksize = MCTD_Defaults( denoised, settings_num, "blksize" ) | |
overlap = MCTD_Defaults( denoised, settings_num, "overlap" ) | |
truemotion = MCTD_Defaults( denoised, settings_num, "truemotion" ) | |
MVglobal = MCTD_Defaults( denoised, settings_num, "MVglobal" ) | |
pel = MCTD_Defaults( denoised, settings_num, "pel" ) | |
pelsearch = MCTD_Defaults( denoised, settings_num, "pelsearch" ) | |
search = MCTD_Defaults( denoised, settings_num, "search" ) | |
searchparam = MCTD_Defaults( denoised, settings_num, "searchparam" ) | |
MVsharp = MCTD_Defaults( denoised, settings_num, "MVsharp" ) | |
DCT = MCTD_Defaults( denoised, settings_num, "DCT" ) | |
thSAD = MCTD_Defaults( denoised, settings_num, "thSAD" ) | |
thSCD1 = MCTD_Defaults( denoised, settings_num, "thSCD1" ) | |
thSCD2 = MCTD_Defaults( denoised, settings_num, "thSCD2" ) | |
denoisedMVS = (internal==true) ? denoised : denoised.MSuper(hpad=0,vpad=0,pel=pel,sharp=MVsharp,chroma=false) | |
f1v = (internal==true) ? f1v : MAnalyse(denoisedMVS, isb=false, delta=1, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=false) | |
b1v = (internal==true) ? b1v : MAnalyse(denoisedMVS, isb=true, delta=1, truemotion=truemotion, blksize=blksize, overlap=overlap, pelsearch=pelsearch, search=search, searchparam=searchparam, DCT=DCT, global=MVglobal, chroma=false) | |
f1c = (internal==true) ? f1c | |
\ : defined(source) ? MCompensate(source , denoisedMVS, f1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
\ : MCompensate(denoised, denoisedMVS, f1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
b1c = (internal==true) ? b1c | |
\ : defined(source) ? MCompensate(source , denoisedMVS, b1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
\ : MCompensate(denoised, denoisedMVS, b1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2) | |
SAD_f1m = (internal==true) ? SAD_f1m | |
\ : defined(source) ? MMask(source, f1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) | |
\ : MMask(denoised, f1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) | |
SAD_b1m = (internal==true) ? SAD_b1m | |
\ : defined(source) ? MMask(source, b1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) | |
\ : MMask(denoised, b1v, kind=1, ml=thSAD, gamma=0.999, Ysc=255) | |
### DEBLOCKING | |
padX = w%8 == 0 ? 0 : (8 - w%8) | |
padY = h%8 == 0 ? 0 : (8 - h%8) | |
denoised = (internal==true) ? denoised | |
\ : (deblock==false) ? denoised | |
\ : (useQED==true) ? denoised.deblock_QED(quant1=quant1,quant2=quant2,uv=chroma?3:2) | |
\ : (padX==0 && padY==0) ? denoised.deblock(quant=int(quant1*0.5+quant2*0.5)) | |
\ : denoised.pointresize(w+padX, h+padY, 0, 0, w+padX, h+padY).deblock(quant=int(quant1*0.5+quant2*0.5)).Crop(0, 0, -padX, -padY) | |
### INITIATING | |
nullclip = BlankClip() | |
i = defined(source) ? source : denoised | |
smP = denoised | |
xn = smP.width() | |
yn = smP.height() | |
chr41 = chroma?4:1 | |
chr31 = chroma?3:1 | |
chr21 = chroma?2:1 | |
### PROTECTING | |
rg17 = (protect==true) ? smP.removegrain(17,-1) : NOP() | |
iOB = (protect==true) ? i.mt_lut("x "+string(cutoff)+" >= x 0 ?",U=1,V=1) : NOP() | |
mB = (protect==true) ? mt_makediff(iOB,rg17,U=1,V=1).mt_binarize(128+threshold,upper=false,U=1,V=1).removegrain(5,-1) : NOP() | |
lB = (protect==true) ? mt_lutxy(smP,i,"x y - abs "+string(maxdiff)+" <= x x y - 0 < y "+string(maxdiff)+" - x ? ?",U=1,V=1) : NOP() | |
smB = (protect==true) ? mt_merge(smP,lB,mB,U=chr21,V=chr21) : smP | |
### ANTI-ALIASING | |
cAA = (AA==false) ? nullclip | |
\ : (useEEDI2==true) ? smB.Turnleft().EEDI2(field=1,maxd=maxd).Turnright().EEDI2(field=1,maxd=maxd) | |
\ : smB.Pointresize(xn*2,yn*2).Turnleft().Sangnom(order=1,aa=maxd).Turnright().Sangnom(order=1,aa=maxd) | |
cAA = (AA==false) ? nullclip | |
\ : (method==0) ? cAA.Bilinearresize(xn,yn,0.5,-0.5,xn*2,yn*2) | |
\ : (method==1) ? cAA.Spline36resize(xn,yn,0.5,-0.5,xn*2,yn*2) | |
\ : cAA.Lanczos4resize(xn,yn,0.5,-0.5,xn*2,yn*2) | |
cAA = (aaF!="internal") ? Eval("smB."+aaF) : cAA | |
mA = (AA==true) ? smB.mt_edge("prewitt",0,255,0,0,V=1,U=1).mt_lut("x "+string(AAthr)+" <= 0 x 1.4 ^ ?",U=1,V=1).removegrain(4,-1).mt_inflate(U=1,V=1) : NOP() | |
smA = (AA==true) ? mt_merge(smB,cAA,mA,luma=chroma?true:false,U=chr31,V=chr31) : NOP() | |
aaD1 = (AA==true&&reduc!=-1) ? mt_makediff(smB, smA, U=1, V=1) : NOP() | |
aaD1MVS = (AA==true&&reduc!=-1) ? aaD1.MSuper(hpad=0,vpad=0,pel=pel,sharp=MVsharp,chroma=false) : NOP() | |
aaD2 = (AA==true&&reduc!=-1) ? aaD1.MDegrain1(aaD1MVS, b1v, f1v, thSAD=thSAD, thSCD1=thSCD1, thSCD2=thSCD2, plane=0) : NOP() | |
aaD2 = (AA==true&&reduc!=-1) ? mt_lutxy(aaD1, aaD2, "x 128 - abs y 128 - abs < x y ?", U=1, V=1).mergeluma(aaD2, 1.0-reduc) : NOP() | |
smA = (AA==false) ? smB | |
\ : (reduc==-1) ? smA | |
\ : mt_makediff(smB, aaD2, U=2, V=2) | |
### EDGECLEANING | |
mP = (edgeclean==true) ? mt_edge(smA,"prewitt",0,255,0,0,V=1,U=1) : NOP() | |
mS = (edgeclean==true) ? mP.mt_expand(mode=mt_square(radius=ECrad),U=1,V=1).mt_inflate(U=1,V=1) : NOP() | |
mD = (edgeclean==true) ? mt_lutxy(mS,mP.mt_inflate(U=1,V=1),"x y - "+string(ECthr)+" <= 0 x y - ?",U=1,V=1).mt_inflate(U=1,V=1).removegrain(20,-1) : NOP() | |
smE = (edgeclean==true) ? mt_merge(smA,Eval("smA." + ECmode),mD,luma=chroma?true:false,U=chr31,V=chr31) : smA | |
### MASKING | |
mM = (sharp==true||enhance==true||stabilize==true) ? mt_average(SAD_f1m,SAD_b1m,U=1,V=1).mt_lut(expr="x 1.6 ^",U=1,V=1) : NOP() | |
mE = (sharp==true||enhance==true||stabilize==true) ? mt_edge(smE,"prewitt",0,255,0,0,V=1,U=1).mt_lut(expr="x 1.8 ^",U=1,V=1).removegrain(4,-1).mt_inflate(U=1,V=1) : NOP() | |
mL = (sharp==true||enhance==true||stabilize==true) ? mt_logic(mM.invert(),mE,"min",U=1,V=1).removegrain(20,-1) : NOP() | |
mF = (sharp==true||enhance==true||stabilize==true) ? mt_logic(mM,mE,"max",U=1,V=1).removegrain(20,-1) : NOP() | |
### SHARPENING | |
Sclp = (sharp == true) ? (shF!="internal") ? Eval("smE."+shF) | |
\ : smE.LSFmod(strength=strength,Smode=SHmode,Smethod=SHmethod,Lmode=Slimit,overshoot=Sovershoot,preblur="ON",secure=true,edgemode=0,soft=0,soothe=false,ss_x=1.00,ss_y=1.00) : NOP() | |
Tmax = (sharp == true) ? i.mt_logic(f1c,"max",U=1,V=1).mt_logic(b1c,"max",U=1,V=1) : NOP() | |
Tmin = (sharp == true) ? i.mt_logic(f1c,"min",U=1,V=1).mt_logic(b1c,"min",U=1,V=1) : NOP() | |
shrp = (sharp==false) ? smE | |
\ : (Tlimit==true) ? Sclp.mt_clamp(Tmax, Tmin, Tovershoot, Tovershoot, U=1, V=1) | |
\ : Sclp | |
sL = (sharp==true&&adapt==true) ? mt_merge(smE,shrp,mL,U=chr21,V=chr21) | |
\ : shrp.mergechroma(smE) | |
### STABILIZING & ENHANCING | |
TTc = (stabilize==true) ? sL.TTempSmoothF(maxr=maxr,strength=TTstr) | |
\ : sL | |
GFc = (enhance==true) ? (dbF!="internal") ? Eval("TTc."+dbF) | |
\ : TTc.GradFun2DBmod(thr=GFthr,thrC=chroma?GFthr:1.0,mode=0,str=AGstr,strC=0.0,temp=temp,adapt=bias,mask=false,show=false) | |
\ : TTc | |
FSc = (enhance==true||stabilize==true) ? MCPP_final_mt_merge(GFc,sL,mF,luma=chroma?true:false,U=chr31,V=chr31) | |
\ : GFc | |
PP = (chroma==false) ? FSc.MCPP_final_mergechroma(internal?i:smP) | |
\ : FSc | |
return PP | |
} | |
PP = MCTD_PP( smP, i, | |
\ sharp, adapt, strength, SHmode, SHmethod, Slimit, Sovershoot, Tlimit, Tovershoot, shF, | |
\ protect, cutoff, threshold, maxdiff, | |
\ AA, useEEDI2, reduc, maxd, AAthr, method, aaF, | |
\ deblock, useQED, quant1, quant2, | |
\ edgeclean, ECrad, ECthr, ECmode, | |
\ stabilize, maxr, TTstr, | |
\ enhance, GFthr, AGstr, bias, temp, dbF, | |
\ chroma, settings, | |
\ f1v, b1v, f1c, b1c, SAD_f1m, SAD_b1m, true ) | |
### OUTPUT | |
o = ((smP.height) * 2 == PP.height) ? PP.MCPP_crop16(xf/2,yf/2,-xf/2,-yf/2) : PP.crop(xf/2,yf/2,-xf/2,-yf/2) | |
o = (interlaced==true) ? o.weave() : o | |
p1nr = Defined(p1nr) ? p1nr : "internal" | |
p2nr = Defined(p2nr) ? p2nr : "internal" | |
ppnr = Defined(ppnr) ? ppnr : "internal" | |
### SHOW | |
function MCTD_Show( clip i, clip p, clip o, int "xf", int "yf", string "version", string "settings", string "show_p", | |
\ int "radius", int "sigma", bool "twopass", bool "useTTmpSm", int "limit", int "limit2", int "post", bool "chroma", bool "interlaced", | |
\ bool "sharp", bool "adapt", int "strength", int "SHmode", int "SHmethod", int "Slimit", int "Sovershoot", bool "Tlimit", int "Tovershoot", string "shF", | |
\ bool "protect", int "cutoff", int "threshold", int "maxdiff", | |
\ bool "AA", bool "useEEDI2", float "reduc", int "maxd", int "AAthr", int "method", string "aaF", | |
\ bool "deblock", bool "useQED", int "quant1", int "quant2", | |
\ bool "edgeclean", int "ECrad", int "ECthr", string "ECmode", | |
\ bool "stabilize", int "maxr", int "TTstr", | |
\ bool "enhance", float "GFthr", float "AGstr", int "bias", int "temp", string "dbF", | |
\ int "bwbh", int "owoh", int "blksize", int "overlap", | |
\ bool "GPU", bool "fixband", int "bt", int "ncpu", int "precision", | |
\ int "thSAD", int "thSAD2", int "thSCD1", int "thSCD2", | |
\ bool "truemotion", bool "MVglobal", int "pel", int "pelsearch", int "search", int "searchparam", int "MVsharp", int "DCT", | |
\ int "screenW", int "screenH", | |
\ string "p1nr", string "p2nr", string "ppnr" ) | |
{ | |
i = i.crop(xf/2,yf/2,-xf/2,-yf/2) | |
p = p.crop(xf/2,yf/2,-xf/2,-yf/2) | |
cW = screenW/2 | |
cH = screenH/2 | |
iW = i.width() | |
iH = i.height() | |
iR = round((iW*cH)/(4*iH))*4 | |
iC = (iR-cW)/2 | |
i = i.spline36resize(iR,cH) | |
p = p.spline36resize(iR,cH) | |
o = o.spline36resize(iR,cH) | |
i = (iC>0) ? i.crop(iC,0,-iC,0) : i | |
p = (iC>0) ? p.crop(iC,0,-iC,0) : p | |
o = (iC>0) ? o.crop(iC,0,-iC,0) : o | |
i = (iC<0) ? i.addborders(-iC,0,-iC,0) : i | |
p = (iC<0) ? p.addborders(-iC,0,-iC,0) : p | |
o = (iC<0) ? o.addborders(-iC,0,-iC,0) : o | |
b = i.blankclip() | |
b = b.SubTitle("MCTD " + string(version) ,text_color=$FFFFFF,font="COURIER NEW",size=24,x=40,y=20) | |
b = b.SubTitle("SETTINGS = " + string(settings) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=60) | |
b = b.SubTitle("'p' clip = " + string(show_p) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=70) | |
b = b.SubTitle("radius = " + string(radius) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=90) | |
b = b.SubTitle("sigma = " + string(sigma) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=100) | |
b = b.SubTitle("twopass = " + string(twopass) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=110) | |
b = b.SubTitle("useTTmpSm = " + string(useTTmpSm) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=120) | |
b = b.SubTitle("limit = " + string(limit) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=130) | |
b = b.SubTitle("limit2 = " + string(limit2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=140) | |
b = b.SubTitle("post = " + string(post) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=150) | |
b = b.SubTitle("chroma = " + string(chroma) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=160) | |
b = b.SubTitle("interlaced = " + string(interlaced) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=170) | |
b = b.SubTitle("sharp = " + string(sharp) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=190) | |
b = b.SubTitle("adapt = " + string(adapt) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=200) | |
b = b.SubTitle("strength = " + string(strength) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=210) | |
b = b.SubTitle("SHmode = " + string(SHmode) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=220) | |
b = b.SubTitle("SHmethod = " + string(SHmethod) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=230) | |
b = b.SubTitle("Slimit = " + string(Slimit) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=240) | |
b = b.SubTitle("Sovershoot = " + string(Sovershoot) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=250) | |
b = b.SubTitle("Tlimit = " + string(Tlimit) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=260) | |
b = b.SubTitle("Tovershoot = " + string(Tovershoot) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=270) | |
b = b.SubTitle("shF = " + string(shF) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=280) | |
b = b.SubTitle("protect = " + string(protect) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=300) | |
b = b.SubTitle("cutoff = " + string(cutoff) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=310) | |
b = b.SubTitle("threshold = " + string(threshold) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=320) | |
b = b.SubTitle("maxdiff = " + string(maxdiff) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=330) | |
b = b.SubTitle("AA = " + string(AA) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=350) | |
b = b.SubTitle("useEEDI2 = " + string(useEEDI2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=360) | |
b = b.SubTitle("reduc = " + string(reduc) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=370) | |
b = b.SubTitle("maxd = " + string(maxd) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=380) | |
b = b.SubTitle("AAthr = " + string(AAthr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=390) | |
b = b.SubTitle("method = " + string(method) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=400) | |
b = b.SubTitle("aaF = " + string(aaF) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=410) | |
b = b.SubTitle("deblock = " + string(deblock) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=430) | |
b = b.SubTitle("useQED = " + string(useQED) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=440) | |
b = b.SubTitle("quant1 = " + string(quant1) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=450) | |
b = b.SubTitle("quant2 = " + string(quant2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=460) | |
b = b.SubTitle("p1nr = " + string(p1nr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=480) | |
b = b.SubTitle("p2nr = " + string(p2nr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=490) | |
b = b.SubTitle("ppnr = " + string(ppnr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=60,y=500) | |
b = b.SubTitle("edgeclean = " + string(edgeclean) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=60) | |
b = b.SubTitle("ECrad = " + string(ECrad) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=70) | |
b = b.SubTitle("ECthr = " + string(ECthr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=80) | |
b = b.SubTitle("ECmode = " + string(ECmode) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=90) | |
b = b.SubTitle("stabilize = " + string(stabilize) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=110) | |
b = b.SubTitle("maxr = " + string(maxr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=120) | |
b = b.SubTitle("TTstr = " + string(TTstr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=130) | |
b = b.SubTitle("enhance = " + string(enhance) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=150) | |
b = b.SubTitle("GFthr = " + string(GFthr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=160) | |
b = b.SubTitle("AGstr = " + string(AGstr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=170) | |
b = b.SubTitle("bias = " + string(bias) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=180) | |
b = b.SubTitle("temp = " + string(temp) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=190) | |
b = b.SubTitle("dbF = " + string(dbF) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=200) | |
b = b.SubTitle("bwbh = " + string(bwbh) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=220) | |
b = b.SubTitle("owoh = " + string(owoh) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=230) | |
b = b.SubTitle("blksize = " + string(blksize) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=240) | |
b = b.SubTitle("overlap = " + string(overlap) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=250) | |
b = b.SubTitle("GPU = " + string(GPU) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=270) | |
b = b.SubTitle("fixband = " + string(fixband) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=280) | |
b = b.SubTitle("bt = " + string(bt) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=290) | |
b = b.SubTitle("ncpu = " + string(ncpu) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=300) | |
b = b.SubTitle("precision = " + string(precision) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=310) | |
b = b.SubTitle("thSAD = " + string(thSAD) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=330) | |
b = b.SubTitle("thSAD2 = " + string(thSAD2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=340) | |
b = b.SubTitle("thSCD1 = " + string(thSCD1) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=350) | |
b = b.SubTitle("thSCD2 = " + string(thSCD2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=360) | |
b = b.SubTitle("truemotion = " + string(truemotion) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=380) | |
b = b.SubTitle("MVglobal = " + string(MVglobal) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=390) | |
b = b.SubTitle("pel = " + string(pel) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=400) | |
b = b.SubTitle("pelsearch = " + string(pelsearch) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=410) | |
b = b.SubTitle("search = " + string(search) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=420) | |
b = b.SubTitle("searchparam = " + string(searchparam) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=430) | |
b = b.SubTitle("MVsharp = " + string(MVsharp) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=440) | |
b = b.SubTitle("DCT = " + string(DCT) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=450) | |
#b = b.SubTitle("screenW = " + string(screenW) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=470) | |
#b = b.SubTitle("screenH = " + string(screenH) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=360,y=480) | |
i = i.subtitle("Input",text_color=$FFFFFF,size=20,x=20,y=20) | |
p = p.subtitle("Prefilter",text_color=$FFFFFF,size=20,x=20,y=20) | |
o = o.subtitle("Output",text_color=$FFFFFF,size=20,x=20,y=20) | |
TOP = stackhorizontal(b,p) | |
BOT = stackhorizontal(i,o) | |
return stackvertical(TOP,BOT) | |
} | |
o = (show==false) ? o : MCTD_Show(i,p,o,xf,yf,version,settings,show_p, | |
\ radius,sigma,twopass,useTTmpSm,limit,limit2,post,chroma,interlaced, | |
\ sharp,adapt,strength,SHmode,SHmethod,Slimit,Sovershoot,Tlimit,Tovershoot,shF, | |
\ protect,cutoff,threshold,maxdiff, | |
\ AA,useEEDI2,reduc,maxd,AAthr,method,aaF, | |
\ deblock,useQED,quant1,quant2, | |
\ edgeclean,ECrad,ECthr,ECmode, | |
\ stabilize,maxr,TTstr, | |
\ enhance,GFthr,AGstr,bias,temp,dbF, | |
\ bwbh,owoh,blksize,overlap, | |
\ GPU,fixband,bt,ncpu,precision, | |
\ thSAD,thSAD2,thSCD1,thSCD2, | |
\ truemotion,MVglobal,pel,pelsearch,search,searchparam,MVsharp,DCT, | |
\ screenW,screenH, | |
\ p1nr,p2nr,ppnr) | |
return o | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment