MVTools - plugin pro AviSynth 2.5 je kolekce funkcí pro odhadnutí a kompenzaci pohybu objektů ve video klipech. Kompenzace pohybu může být použita pro silné časové (temporal) odšumění, pokročilé převody snímkových frekvencí, restauraci obrazu a další úlohy.
Plugin obsahuje server-funkci odhadu pohybu MAnalyse pro nalezení vektorů pohybu a několik klient-funkcí kompenzace pohybu (MCompensate, MMask a další) které používají tyto vektory.
Plugin používá metodu srovnávání bloků pro odhad pohybu (podobné metody jsou použity v MPEG2, MPEG4, atd). Ve fázi analýzy plugin rozděluje snímky na malé bloky a snaží se najít pro každý blok v aktuálním snímku nejpodobnější (odpovídající) blok v druhém snímku (předchozím nebo následujícím). Relativní posunutí těchto bloků je vektor pohybu. Hlavním měřítkem podobnosti bloků je součet absolutních rozdílů (SAD) všech pixelů těchto dvou porovnávaných bloků. SAD je hodnota, která říká, jak dobrý byl odhad pohybu.
Výstupem MAnalyse (server) je speciální klip s informacemi o vektorech pohybu v nějakém formátu.
Ve fázi kompenzace klient-funkce pluginu čtou vektory pohybu a použijí je k vyjmutí bloků a zformování snímku s kompenzovaným pohybem (nebo realizuje nějakou jinou plnou nebo částečnou kompenzaci pohybu nebo funkci interpolace). Každý objekt (blok) v tomto (plně) kompenzovaném snímku je umístěn na stejnou pozici v jaké je v aktuálním snímku. Tedy, můžeme (například) použít silné časové odšumění dokonce pro docela rychle se pohybující objekty bez vytváření nepříjemných artefaktů a duchů (rysy objektu a hrany jsou shodné pokud je kompenzace perfektní). Plugin může vytvořit kompenzované sousední snímky pro každý aktuální snímek, a odstranit v nich šum vnitřní funkcí (MDenoise). Nebo můžete použít kompenzované a původní snímky k vytvoření prolínaného (interleaved) klipu, odstranit v nich šum jakýmkoliv externím časovým (temporal) filtrem, a vybrat centrální vyčištěné původní snímky pro výstup (viz příklady).
Odhad pohybu a jeho kompenzace nejsou samozřejmě ideální a dokonale přesné. V některých komplikovaných případech (video se stmíváním - fading, ultra-rychlého pohybu, nebo periodických struktur) může být odhad pohybu zcela chybný, a kompenzovaný (obzvláště interpolovaný) snímek může být kostkatý a (nebo) ošklivý. Těžké potíže jsou také kvůli vzájemnému zastínění jednoho objektu druhým nebo obráceně odkrývání. Složité Avisynth skripty s řadou funkcí pro kompenzaci pohybu mohou spotřebovat velký objem paměti a výsledkem je velmi pomalé zpracování. Nejedná se o jednoduchý, ale o docela pokročilý plugin. Používejte ho jen ve vhodných případech a snažte se vyladit jeho parametry. Existuje mnoho diskuzí o použití kompenzace pohybu na doom9 Avisynth fóru. Především se podívejte na starší vlákno MVTools, vlákno true motion, nové vlákno MVTools a některá další. Snažte se číst příspěvky jako doplněk této dokumentace a žádejte zde o pomoc. Pokud se skutečně zajímáte o témata odhadu a kompenzace pohybu, můžete snadno najít řadu vědeckých publikací (použijte WWW vyhedávání).
Poznámky: Plugin je stále ve vývoji. Aktuální verze má některá omezení. Podporováno je jen progresivní YV12, YUY2 video. Použijte převod barevného formátu a zkuste použít (smart) bob-deinterlace pro prokládané video (může také pracovat rozdělení na pole SeparateFields s nebo bez SelectEven/SelectOdd). Některé komplikované skripty (MVBOB, MCBOB, TempGaussMC) používají MVTools pro odstranění prokládání s kompenzací pohybu.
Alternativně můžete zkusit použít plugin Motion od mg262.
MVTools verze 2 je významnou vnitřní i vnější aktualizací. Hlavními cíly MVTools v2.X jsou jasnost a stabilita (především pro vícevláknová prostředí na vícejádrových CPU) a samozřejmě zlepšení výkonu i využití paměti.
Hlavní prostředek k dosažení cílů je odstranění vnitřního bufferu MVTools
s mysteriózním (pro řadu lidí) indexem (idx) a dále některé další vnitřní triky
(viz vlákno MVTools without idx).
Pro implementování tohoto bez snížení výkonu používáme normální efektivní snímkový keš (cache) Avisynthu
a uvadíme nové povinné přípravné stadium (před odhadem pohybu pomocí MAnalyse
).
V tomto stadiu bude nová funkce MSuper
dostávat zdrojový klip a připraví speciální klip "super"
s víceúrovňovými (hierarchicky upavovanými) daty snímků
(V předchozích verzích MVTools 0.X-1.X byla tato víceúrovňová data připravena, uložena a kešována vnitřně
pomocí idx jako indexem pseudo-klipu těchto "supersnímků" ).
Super klip je pak použit jak ve funkci MAnalyse
tak klientských funkcí kompenzace pohybu.
Odpovídající změna syntaxe: některé parametry (pel, sharp) funkce MAnalyse
jsou přesunuty do funkce MSuper
.
Další podstanou vnější změnou je nahrazení všech jmenných klipových parametrů nejmennými (povinné, bez dvojtých uvozovek v popisu) pro normální práci implicitního klipu "last" v Avisynthu.
Ve v.2.0 je implementováno také rychlejší planární zpracování pro YUY2.
Od v2.2 je MVTools.dll přejmenováno na MVTools2.dll, a od v2.3 jsou všechny funkce přejmenovány z MVxxx na Mxxx (t.j. z MVAnalyse na MAnalyse), takže můžete pokračovat v používání starých MVTools 1.x s vašimi starými skripty, a jste schopni použít / vytvořit nové skripty s MvTools 2.x beze změny načítané dll.
Také mám v úmyslu odstranit (neimplementovat) některé zastaralé funkce jako MVDenoise, MVFlowFps2 (hlasujte prosím).
Úplný seznam změn viz kapitola Revize .
Obecně, nové MVTools 2.0 by měly poskytnout podobné výsledky jako v1.11.4. Vylepšení algoritmu je plánováno ve v2.1 a pozdějších.
Poznámka: v2 má v současnosti alfa (beta?) status (měla by být při zpracování stabilní, ale některá syntaxe se může změnit). Vítají se oznámení možných chyb a návrhy (požadavky na funkce).
Poslední poznámka: MVTools v1.x se už nevyvíjí a nepodporuje (Fizick).
Filtry, které používají vektory pohybu mají běžné parametry.
Ty jsou prahovými hodnotami detekce změny scény,
a mají znaky isse mmx. Také používají jeden nebo více
vektorových streamů, které jsou vytvářeny funkcí MAnalyse
.
int "thSCD1" : prahová hodnota, která rozhoduje, zda se blok změnil mezi předchozím snímkem a aktuálním. Když se blok změnil, znamená to, že odhad pohybu pro toto není významný. To nastává například při změně scény. Tedy to je jedna z prahových hodnot použitých k nastavení mechanismu změny scény. Jeho zvětšení sníží počet bloků detekovaných jako změněné. Může to být užitečné pro zašumělé nebo blikající video. Prahová hodnota je porovnána s hodnotou SAD (Sum of Absolute Differences - součet absolutních rozdílů, hodnotou, která říká jak špatný byl odhad pohybu ). Pro přesně identické bloky máme SAD=0. Ale skutečné bloky se vždy liší kvůli složitému pohybu objektů (přiblížení, rotaci, deformaci), diskrétnosti vzorkování pixelů, a šumu. Předpokládejme, že máme dva porovnané bloky 8x8 s každým pixelem lišícím se o 5. V tomto případě bude SAD 8x8x5 = 320 (blok nebude detekován jako změněný pro thSCD1=400). Pokud použijete bloky 4x4, SAD bude 320/4. Pokud použijete bloky 16x16, SAD bude 320*4. Ve skutečnosti se tento parametr násobí vnitřně v MVTools, a vy musíte vždy použít hodnotu redukovanou na velikost bloku 8x8. Výchozí je 400 (od v.1.4.1).
int "thSCD2" : prahová hodnota, která nastavuje kolik bloků ve snímku se musí změnit aby se rozhodlo, že se jedná o změnu scény. Je to v rozsahu 0 až 255, 0 znamená 0 %, 255 znamená 100 %. výchozí je 130 ( což znamená 51 % ).
bool "isse" : znak, který umožňuje vypnout ISSE a MMX optimalizace pokud se nastaví na false (pro odladění). Výchozí je true. Pokud váš procesor nepodporuje ISSE MMX optimalizace, bude to každopádně vypnuto ( a vy nebudete schopni je aktivovat )
bool "planar" : znak pro použití speciálního planárního barevného formátu pro YUY2 klipy, jak pro vstup tak pro výstup funkce.
Využívá zvláštní trik pro uchování snímků s planární organizací dat barev
(oddělené Y, U, V plochy v paměti) v normálním prolínaném (interleaved) formátu YUY2 jako kontejneru.
Tak se můžeme vyhnout řadě vnitřních převodů prolínaného (interleaved) formátu do planárního a tím zvýšíme rychlost.
Můžete převést normalní prolínaný YUY2 zdrojový klip na planární formát pomocí funkce Interleaved2planar
z pluginu RemoveGrain od kassandra,
a převést konečný výsledek pomocí funkce Planar2interleaved
.
Tento speciální planární YUY2 formát je podporovaný také v pluginu Removegrain od Kassandra, pluginu MaskTools2 od Manaa a některých dalších.
Tento trik nebude nutný v Avisynthu v2.6 s nativní podporou planárního formátu YV16.
Tento parametr je ignorován u YV12 klipů. Poznámka: klip super je vždy planární.
Výchozí je planar=false.
MSuper
(clip, int "hpad", int "vpad", int "pel", int "levels", bool "chroma",
int "sharp", int "rfilter", clip "pelclip", bool "isse", bool "planar")
Dostává vstupní klip a připravuje speciální "super" klip s víceúrovňovými (hierarchicky upravenými) daty snímků.
Superklip je použit jak v MAnalyse
tak ve (klientských) funkcích kompenzace pohybu.
Pro uchování a předání jejích parametrů použijeme vlastností audia superklipu (jmenovitě, num_audio_samples) jako triku.
Tedy, audio je v superklipu zabito. To je jeden z důvodů, proč dodatečně používáme zdrojový klip s klient funkcemi.
Můžete se podívat na superklip sami (má normální formát).
hpad : je to horizontální vyplnění (pruh) přidané do zdrojového snímku (vlevo i vpravo). Malé vyplnění je dodáno pro správnější odhad pohybu v blízkosti okrajů snímku. (V MVTools před v2.0 byla vždy vnitřně použita hodnota padding = velikosti bloku. Nyní to není striktní, ale doporučená hodnota.) Výchozí=8.
vpad : je to vertikální vyplnění (pruh) přidané do zdrojového snímku (nahoře i dole). Výchozí=8.
pel : je to přesnost odhadu pohybu. Hodnota může být jen 1, 2 nebo 4. 1 znamená přesnost na pixel. 2 znamená přesnost na půl pixelu, 4 znamená přesnost na čtvrtinu pixelu, tvořenou prostorovou (spatial) interpolací (přesnější ale pomalejší a ne vždy lepší kvůli velkému kroku násobení mezi úrovněmi). Výchozí je 2 od v1.4.10.
levels : je to počet hierarchických úrovní ve snímcích superklipu. MAnalyse je potřebná ve vešch úrovních, ale pro jiné klient funkce je jedna jemná úroveň dostatečná (hrubší úrovně se nepoužívají). Výchozí : 0 (auto, vytváří se všechny možné úrovně).
chroma : je-li nastaven na true, umožňuje připravit i barevnostní plochy v superklipu. (false - jen jas (luma)). Výchozí je true.
sharp: metoda subpixelové interpolace pro pel=2,4.
Použijte 0 pro měkkou interpolaci (bilineární), 1 pro bikubickou interpolaci (4 vývodová Catmull-Rom),
2 pro ostřejší Wiener interpolaci (6 vývodová, podobná Lanczos).
Výchozí je 2.
rfilter: filtr vyhlazování a zmenšování (půlení) hierarchických úrovní.
0 je jednoduché zprůměrování 4 pixelů jako nefiltrovaný SimpleResize (stará metoda);
1 je trojúhelníkový (posunutý) filtr jako ReduceBy2 pro více vyhlazení (snižuje aliasing);
2 je trojúhelníkový filtr jako BilinearResize pro ještě více vyhlazení;
3 je kvadratický filtr pro ještě více vyhlazení;
4 je kubický filtr jako BicubicResize(b=1,c=0) pro ještě více vyhlazení.
Výchozí je 2 (od v2.3.1).
Můžete také zkusit použít některý externí filtr na superklip nebo jeho hrubou spodní část (vhodným oříznutím a navrstvením).
pelclip: volitelný nadvzorkovaný zdrojový klip pro použití místo vnitřní subpixelové interpolace (pro pel>1).
Pixely v řádcích a sloupcích dělitelných pel (0,2,4,... pro pel=2) (bez vyplnění) musí být původní zdrojové pixely,
jiné pixely musí být interpolovány.
Příklad pro pel=2: LanczosResize(width*2,height*2,src_left=0.25, src_top=0.25)
.
(Nedávná poznámka: je to správné pro jas, ale ne přesně odpovídá pozicím pixelů barevnosti vnitřní interpolace v MVTools.
Přesto jsou vektory a kompenzace pohybu celkem podobné pro běžné klipy,
stejná barevnost by byla u src_left=0.5 pro YUY2 a dodatečně src_top=0.5 pro YV12).
Další užitečný příklad je EEDI2 hranově-namířený resampler.
Výchozí není definováno.
MAnalyse
(clip super, int "blksize", int "blksizeV", int "level", int "search",
int "searchparam", int "pelsearch", bool "isb", int "lambda", bool "chroma", int "delta",
bool "truemotion", int "lsad", int "plevel", bool "global", int "pnew", int "pzero", int "pglobal", int "overlap", int "overlapV",
string "outfile", int "dct", int "divide", int "sadx264", int "badSAD", int "badrange", bool "isse")
Dostává připravený víceúrovňový superklip, odhaduje metodou srovnávání bloků
a vytváří speciální výstupní klip s daty vektorů pohybu (používaných jinými funkcemi).
Některé hierarchické víceúrovňové metody vyhledávání jsou implementovány (od hrubého měřítka obrazu k nejjemnějšímu).
Funkce používá nulový vektor a vektory sousedních bloků jako prediktory pro aktuální blok.
Nejdříve je odhadnut rozdíl (SAD) pro prediktory,
pak se zkušební vektor změní o nějakou hodnotu v některém směru, odhadne se SAD, a tak dále.
Přijmutý nový vektor je vektor s minimální hodnotou SAD (s určitou úpravou pro soudržnost pohybu).
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
blksize : Velikot bloku (horizontální). Je buď 4, 8 nebo 16 ( výchozí je 8 ). Větší bloky jsou méně citlivé na šum, jsou rychlejší, ale také méně přesné.
blksizeV : vertikální velikost bloku. Výchozí je rovna horizontální velikosti. Doplňkové možnosti: 4 pro blksize=8 a 8 nebo 2 pro blksize=16.
level : je počet Nepoužitých hrubých úrovní v hierarchické analýze prováděné při vyhledávání vektorů pohybu. Obvykle čím nižší, tím lepší (lze nalézt vektory s jakoukoliv délkou). Proměnná je zachována pro studijní (testovací) účely. Někdy je level užitečný pro vyloučení velkých (lživých) vektorů (počítačové grafiky, atd). Výchozí = 1 odv.2.3 (jsou použity všechny úrovně kromě jedné).
search, searchparam, pelsearch : search určuje typ vyhledávání v každé úrovni, a searchparam je přídavný parametr (krok, rádius) pro toto vyhledávání, a pelsearch je parametr na nejjemnější (pel) úrovni:
isb : umožní volit mezi dopředným vyhledáváním (pohyb z předchozího snímku do aktuálního) pro isb=false a zpětným vyhledáváním (pohyb z následujícího snímku do aktuálního) pro isb=true (isb znamená "IS Backward", je to implementováno a nazváno přesně tak jak je zde popsáno, neptejte se na to :-). Výchozí je isb=false.
chroma : nastavení na true umožní zahrnout také barevnost při odhadu pohybu (false - pouze jas). Výchozí je true.
delta : nastavuje interval snímků mezi referenčním snímkem a aktuálním snímkem. Výchozí je 1, což znamená, že vektory pohybu jsou vyhledávány mezi aktuálním snímkem a předchozím ( nebo dalším ) snímkem. Nastavení na 2 vám umožní vyhledávat vektory pohybu mezi snímkem n a n-2 nebo n+2 ( v závislosti na nastavení isb ).
Existuje několik pokročilých parametrů, které nastavují souvislost vektorů pohybu pro odhad takzvaného skutečného pohybu (true motion). Některé porovnané bloky z jiného snímku mohou být nejpodobnější vzorovým blokům aktuálního snímku podle kriteria intenzity (SAD), ale neodpovídají skutečnému pohybu objektu. Například, mohou příslušet jinému podobnému objektu v jiném rohu snímku nebo nějaké periodické struktuře. Parametry "True motion" se snaží udržet pohybová pole více soudržná, namísto některých náhodných distribucí vektorů. Je to obzvlášť důležité pro jednotlivé kompenzace pohybu a interpolace. Některé parametry jsou experimentální a mohou být odstraněny (nahrazeny) v příštích verzích po vyzkoušení. Oznamujte prosím své závěry.
truemotion je přednastavení hodnot těchto parametrů. Umožňuje snadno přepnout výchozí hodnoty všech "true motion" parametrů najednou. Nastavte true pro vyhledávání skutečného pohybu - true motion (vyšší soudržnost vektorů), Nastavte false pro vyhledávání vektorů pohybu s nejlepší SAD. Výchozí je true od v1.4.10. V každém případě můžete nastavit každý parametr samostatně.
lambda : nastavuje soudržnost polí vektorů. Čím vyšší,
tím soudržnější. Nicméně, pokud je příliš vysoký, mohou být některé nejlepší vektory pohybu
opomenuty. Velmi se doporučují hodnoty kolem 400 - 2000 (pro velikost bloku 8).
Vnitřně je to koeficient pro penalizaci (úpravu) SAD od kvadratického rozdílu vektoru od prediktoru (sousedů),
násobeným 256.
Výchozí je 0 pro truemotion=false a 1000*blksize*blksizeV/64 pro truemotion=true.
lsad: SAD limit pro použití lambda . Lokální lambda je sníženo (plynule od v1.10.2)
pokud hodnota SAD vektoru prediktoru (zhotovená ze sousedních bloků) je větší než tento limit.
Brání to použití špatných prediktorů, ale snižuje soudržnost pohybu.
Pro skutečný pohyb (true motion) jsou doporučeny hodnoty nad 1000. Vnitřně upravené na velikost bloku blocksize=8 (od v2.0.11).
Výchozí je 400 pro truemotion=false a 1200 pro truemotion=true.
pnew: relativní penalizace (násobena 256) k odchylce (SAD) nového kandidujícího vektoru.
Nový kandidující vektor musí být lepší, aby byl přijat jako nový vektor jen, když jeho
SAD s penalizací (SAD + SAD*pnew/256) jen nižší než odchylka prediktoru (staré SAD).
To brání nahrazení docela dobrých prediktorů novými vektory s o trochu lepším SAD
ale jinou délkou a směrem.
Výchozí je 0 pro truemotion=false a 50 pro truemotion=true.
plevel: režim násobení penalizačního koeficientu lambda úrovně.
Hodnota=0 - bez násobení, 1 - lineární, 2 - kvadratická závislost na velikosti hierarchické úrovně.
Všimněte si, že délka vektoru je menší na nižší úrovni.
Výchozí je 0 pro truemotion=false a 1 pro truemotion=true
global: odhaduje globální pohyb (v každé úrovni) a používá ho jako doplňkový prediktor. Je odhadován pouze (panoramatický) posun kamery (ne přibližování ani rotace). Použijte false pro vypnutí, použijte true pro zapnutí. Výchozí je false pro truemotion=false a true pro truemotion=true.
pzero: relativní penalizace (násobena 256) k odchylce (SAD) pro nulový vektor. Brání nahrazení docela dobrých prediktorů nulovými vektory s o trochu lepší SAD (lambda se pro nulový vektor nepoužívá). Výchozí je roven pnew od v1.11.
pglobal: relativní penalizace (upravená do rozsahu 256) k chybě SAD pro globální prediktor. (lambda se nepoužívá pro globální vektor). Výchozí je 0.
overlap: hodnota překrytí bloků (horizontální). Musí být sudá a menší než velikost bloku
(do blksize/2 pro MCompensate).
Krok mezi bloky pro odhad pohybu je roven (blksize-overlap).
N bloků pokrývá velikost ((blksize-overlap)*N + overlap) na snímku.
Zkuste použít hodnotu překrytí od blksize/4 do blksize/2.
Čím větší překrytí, tím větší počet bloků, a tím menší rychlost zpracování.
Výchozí hodnota je 0.
Funkce s podporou překrytí jsou: MFlow, MFlowInter, MFlowFps, MShow, MMask, MCompensate, MDeGrain1, MDeGrain2, MDeGrain3.
overlapv: vertikální hodnota překrytí bloků. Výchozí je rovna horizontální. Musí být sudá pro YV12 a menší než velikost bloku.
outfile: Jméno souboru pro zápis dat vektorů pohybu.
Tato data mohou být použita některým externím programem
nebo mohou být dalšími verzemi MVTools pro kódování druhého průchodu, atd.
Vytvářený binární soubor má hlavičku (struktura MVAnalysisData, viz MVInterface.h ve zdrojovém kódu),
a sekvenci dat:
číslo snímku, data vektoru (Vx, Vy, SAD) každého bloku,
příští platné číslo snímku, data vektoru tohoto snímku, atd.
Výchozí - Prázdný řetězec, nezapisuje soubor.
dct: použití bloků DCT (frekvenční spektrum) pro výpočet rozdílu bloků (SAD).
Zvláště může zlepšit odhad vektoru pohybu při blikání a stmívání jasu.
0 - obvyklé prostorové (spatial) bloky, nepoužívat DCT;
1 - použít bloky DCT místo prostorových dat (pomalé pro velikost bloku 8x8 a velmi pomalé pro jiné velikosti);
2 - smíchaná prostorová a DCT data; váha závisí na středním rozdílu jasu;
3 - adaptivní přepínání po blocích z prostorového na ekvivalentní-vážený smíšený režim (experimentální, o něco rychlejší).
4 - adaptivní přepínání po blocích z prostorového na smíšený režim s větší váhou DCT (experimentální, o něco rychlejší).
přidané režimy ve v1.9.5.3: (vyžadují sadx264 0-7, používají nejrychlejší SATD funkce, pouze jas!)
5 - SATD místo SAD pro jas
6 - stejné jako 2 jen používají SATD
7 - stejné jako 3 jen používají SATD
8 - stejné jako 4 jen používají SATD
9 - podobné jako 2, používají SATD a vážené rozsahy od SAD jen k ekvivalentním SAD & SATD
10 - podobné jako 3/4,používají SATD váha je na SAD, jen na velké změny jasu
Výchozí = 0.
divide: post-processing vektorů pohybu rozdělením každého bloku na 4 podbloky.
0 - nedělit;
1 - rozdělit bloky a připsat originální vektor všem 4 podblokům;
2 - rozdělit bloky a připsat střední (se 2 sousedními) vektory podblokům;
Výchozí je = 0. Hodnoty velikosti bloku překrytí musí být zvoleny, aby byly přijatelné po vnitřním dělení.
sadx264: využívá SAD funkcí z kodeku x264 pokud jsou dostupné pro velikost bloku
0 - Autodetekovat CPU a vybrat nejlepší funkce
1 - použít MMX 16x16, 16x8, 8x8, 8x4, 4x4 (8x16, 4x8 použito jen na barevnost - chroma)
2 - použít MMX 16x16, 16x8, 8x8, 8x4 (8x16, použito jen na barevnost - chroma) zarovnáno na 32 bajtové bloky
3 - použít MMX 16x16, 16x8, 8x8, 8x4 (8x16, použito jen na barevnost - chroma) zarovnáno na 64 bajtové bloky, nejlepší pro Pentium M
4 - použít SSE2 16x16, 16x8 (žádné zvláštní zarovnání)
5 - použít SSE2 16x16, 16x8, zarovnáno na 64 bajtové bloky (dobrá volba pro Core)
6 - použít SSE3 16x16, 16x8 (zdá se, že rychleji pracuje jen na Pentium 4E & Core1)
7 - použít SSSES3 16x16, 16x8, zarovnáno na 64 bajtové bloky (dobrá volba pro Core2)
Režimy 8-12 jsou určeny jen pro ladění a testování - použijte místo nich dct >4.
Použití sadx264 > 7 znamená: použít vybraný místo SAD pro jakoukoliv jasové/barevnostní (luma/chroma) SAD kde je to možné!
pro SAD / SATD mix a pouze luma použijte dct
8 - použít SSD mmx, pracuje podobně jako 1
9 - použít SATD mmx, pracuje podobně jako 1
10 - použít SATD SSE2, pracuje podobně jako 2
11 - použít SATD SSSE3, pracuje podobně jako 2
12 - použít SATD SSSE3 s PHADD na 8xY, pracuje podobně jako 2
Výchozí je 0, použijte -1 nebo >=13 pro použití starého algoritmy v1.9.4 SAD a úplnou deaktivaci x264 SAD funkcí.
badSAD: prahová hodnota SAD pro vytvoření širšího druhého vyhledávání špatných vektorů. Hodnota je přepočítána ne velikost bloku 8x8.
Výchozí je 10000 (hodnota vypnutí), doporučená je kolem 1000-2000.
badrange: rozsah (rádius) šířky vyhledávání špatných bloků. Výchozí je 24 (v jednotkách pixelů obrazu). Použijte kladné hodnoty pro UMH vyhledávání a záporné pro Vyčerpávající (Exhaustive) vyhledávání.
Zkuste použít funkci MShow
pro kontrolu odhadnutých polí pohybu a vyladění parametrů.
Poznámka: MAnalyse (pokud Pel=2) detekuje znak videa založeného na polích (po SeparateFields) a automaticky dělá opravu vektorů pohybu v souladu s vertikálním posunem polí s různou paritou. Zkuste použít AssumeFrameBased pokud to nepotřebujete.
MCompensate
(clip source, clip super, clip vectors, bool "scbehavior", float "recursion", int "thSAD",
bool "fields", int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Provádí plnou kompenzaci pohybu ve snímku. To znamená, že bloky ukázané pomocí vektorů pohybu v referenčním snímku budou posunuty podle vektorů k dosažení jejich umístění v aktuálním snímku.
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
vectors (nejmenný) je klip s daty vektorů pohybu vytvářený funkcí MAnalyse.
scbehavior ( výchozí je true ), rozhoduje, který snímek bude zachován při změně scény. Je-li true, snímek je ponechán nezměněný. Jinak je do aktuálního snímku zkopírován referenční snímek.
recursion je procentuální šíře dříve kompenzovaných snímků použitých pro novou kompenzaci ve speciálním rekurzivním režimu. Zbylá šířka je brána (uniformě) z daného referenčního snímku (použitého v obyčejném režimu). Recursion=100 je plná rekurze podobná kruhovému režimu mode=2 starých MVTools v0.9.x. Nepoužívejte rekurzivní režim, když nevíte co děláte. Výchozí je recursion=0.
thSAD je prahová hodnota SAD pro bezpečnou (dummy) kompenzaci. Pokud je blok SAD nad thSAD, pak je blok špatný, a my použijeme zdrojový blok místo kompenzovaného bloku. Výchozí je 10000 (prakticky vypnuto).
fields: je-li nastaven na true a pel=2, pak přidáváme vhodná vertikální posunutí
(po půlpixelu) polí pro video založené na polích.
Zkuste to použít pro odstranění prokládání (ne pro odšumění).
Výchozí je false.
Zpracování překrytých bloků je implementováno jako okenní sumarizace bloků (jako FFT3DFilter, hodnota překrytí do blksize/2) pro snížení blocking artefaktů (kostkatění).
MMask
(clip source, clip vectors, float "ml", float "gamma",
int "kind", int "Ysc", int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Vytváří klip masek ze zdrojového klipu s daty vektorů pohybu. Maska je definována daty bloků, ale je interpolovaná, aby zapadla na celou velikost snímku. Maska je vytvořena jak na jasové (luma) tak na barevnostních (chroma) plochách. Hodnoty masky mohou být od 0 (min) do 255 (max).
kind parametr definuje druh masky.
Režim kind=0 vytváří masku pohybu z délek vektorů pohybu. Vytváří lepší
masku než funkce MotionMask
pluginu MaskTools protože vektory pohybu jsou mnohem víc věrohodné než
algoritmus MotionMask. Hodnota masky 0 znamená nikde žádný pohyb ( délka
vektorů pohybu je nulová ). Čím větší délka vektoru, tím větší hodnota masky (nasycené do 255),
měřítko je definováno pomocí ml.
kind=1 umožní vytvořit masku hodnot SAD (součet absolutních rozdílů) místo délek vektorů. Může to být užitečné k nalezení problémových oblastí se špatným odhadem pohybu. (Je použit vnitřní faktor blocksize*blocksize/4 pro normalizaci měřítka ml.)
kind=2 umožňuje vytvořit okluzní masku (špatné bloky v důsledku roztržení, napětí). V současnosti se používá nějaký normalizovaný součet kladných rozdílů pohybu bloků. Může to být násobeno pomocí měřítka ml.
kind=3 umožňuje vytvořit masku horizontální komponenty vektoru pohybu v jednotkách pel plus 128. Násobené koeficienty se nepoužívají.
kind=4 umožňuje vytvořit masku vertikální komponenty vektoru pohybu v jednotkách pel plus 128. Násobené koeficienty se nepoužívají.
kind=5 - barevná mapa pohybu jako x,y komponent vektorů pohybu zobrazených v U, V barevných plochách (v jednotkách pel plus 128, násobené koeficienty se nepoužívají).
ml definuje měřítko masky pohybu. Když délka vektoru (nebo hodnota jiného typu) je vyšší nebo rovna ml, bude výstupní hodnota nasycena do 255. Menší hodnoty vedou k menším výstupům.
gamma je použito pro definování ukazatele závislosti výstupu na vstupu. gamma = 1.0 znamená lineární závislost, zatímco gamma = 2.0 dává kvadratickou závislost.
A nakonec, Ysc je hodnota vzatá maskou při změně scény
Výchozí jsou: kind = 0, ml = 100, gamma = 1.0, a Ysc = 0.
MSCDetection
(clip source, clip vectors, int "Ysc", int "thSCD1", int "thSCD2", bool "isse")
Vytváří masku detekce scény z dat vektorů pohybu. Maska je vytvořena jak na jasové (luma) tak i na barevnostních (chroma) plochách. Výstup beze změny scény je 0.
Ysc je hodnota braná maskou při změně scény, výchozí je 255.
MShow
(clip super, clip vectors, int "scale", int
"sil", int "tol", bool "showsad", int "number", int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Zobrazuje vektory pohybu ve zdroji doplněném pruhy otevřením superklipu (od v2.0.11).
scale umožňuje zvětšit vektory pohybu, například za účelem zvýšení přesnosti ( když je pel > 1 a scale = 1, neuvidíte odchylky menší než jeden pixel ).
sil umožní vidět různé úrovně analýzy ( když se při vyhledávání vektorů pohybu provádí hierarchická analýza, a může to být zajímavé pro pozorování co se děje ve vyšších úrovních ).
tol je prahová hodnota tolerance. Pokud deformace vyvolaná vektorem pohybu větším než tol, vektor není zobrazen.
showsad umožní zobrazit střední (přepočítanou na blok 8x8) SAD po kompenování obrazu a množství (ThSCD1) špatných (ThSCD1) bloků.
number umožňuje označit daný blok (jeho číslem) bíle. Výchozí=-1.
Výchozí jsou : scale = 1, sil = 0, tol = 20000 a showsad = false ( což zobrazí všechny vektory ).
Dostává vektory pohybu, odhaduje globální pohyb a vkládá data do
výstupního snímku ve zvláštním formátu pro plugin DePan
(od Fizick).
Globální pohyb uvnitř snímku (panoramování, zoom, rotace) je odhadnut iterativní procedurou, za použití pouze dobrých bloků.
Odmítnuté bloky: 1) poblíž okrajů snímků; 2) s velkým SAD (podle parametru thSCD1 ); 3) s pohybem lišícím se od sousedů nebo globálu.
Parametry zoom a rot přepínají odhad zoom (přiblížení, vzdálení)) a rotaci, pixaspect je protažení pixelu (1.094 pro standardní PAL, 0.911 pro standardní NTSC), error je maximální střední odchylka pohybu.
Vyhodnocený globální pohyb ve snímku se přepne na nulu pro velké chyby pohybu nebo při změně scény (podle parametrů thSCD1, thSCD2 ).
parametr info umožňuje zapsat informace o globálním pohybu pro ladění.
parametr log umožňuje nastavit jméno log souboru ve formátu DeShaker, Depan.
parametr wrong definuje limit pro vypnutí bloků velmi odlišných od sousedních.
parametr zerow definuje váhu nulových vektorů pohybu (pro snížení jejich vlivu).
range - počet předchozích (a také následujících) snímků (polí) v blízkosti žádaného snímku pro odhad jejich pohybu.
Výchozí jsou : zoom = true, rot = true, pixaspect = 1.0, error = 15.0, info = false, wrong=10, zerow=0.05, range=0.
Pro odhad globálního pohybu prokládaného zdroje musíte rozdělit pole (jak pro MAnalyse tak pro MDepan).
MFlow
(clip source, clip super, clip vectors, float "time", int "mode", bool "fields",
int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Provádí kompenzaci pohybu ve snímku ne po blocích (jako MCompensation), ale po pixelech.
Vektor pohybu pro každý pixel je vypočítán bilineární interpolací vektorů pohybu
aktuálních a sousedních bloků (v souladu s pozicí pixelu).
To znamená, že pixely ukázané vektorem v referenčním snímku
budou posunuty (flow - proudí) podle vektorů pro dosažení jejich umístění v aktuálním snímku.
Tato flow motion (proudící) kompenzační metoda neprodukuje žádné blokové artefakty, a je dobrá pro odšumění,
ale občas může vytvářet velmi zvláštně deformované obrazy :).
Pro tuto funkci se důrazně doporučuje skutečný odhad pohybu (true motion).
Kompenzace pohybu může být úplná nebo částečná (v mezičase).
Omezení: vektory s komponentami nad 127 budou resetovány na nulovou délku.
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
vectors (nejmený) je klip s daty vektorů pohybu vytvořený funkcí MAnalyse.
time: procento kompenzace pohybu (výchozí=100.0, úplná kompenzace), definuje časový moment mezi referenčním a aktuálním snímkem.
mode může být buď 0 ( výchozí ), nebo 1.
mode=0 - přinést pixely na každé místo cílového snímku. Je to hlavní produkční režim.
mode=1 - posunout pixely z každého místa zdroje (reference).
Je to ladící (učební) režim s nějakými prázdnými místy (s nulovou intensitou).
Může být použit pro vytvoření masky okluzí.
fields: je-li nastaven na true a pel=2, pak přidáváme vhodná vertikální posunutí
(po půlpixelu) polí pro video založené na polích.
Zkuste ho použít pro odstranění prokládání (ne pro odšumění).
Výchozí je false.
MFlowInter
(clip source, clip super, clip mvbw, clip mvfw, float "time", float "mL",
bool "blend", int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Funkce interpolace pohybu. Není stejná (ale podobná) jako funkce MVInterpolate strších verzí MVTools. Používá zpětných "mvbw" a dopředných "mvfw" vektorů pohybu pro vytvoření obrazu v nějakém mezičase mezi aktuálním a následujícím (podle delta) snímkem. Používá pixelovou (podle metody MFlow) kompenzaci pohybu z obou snímků. Vnitřní zpětné a dopředné masky okluze (metoda MMask kind=2) a časově vážené součinitele jsou použity pro vytvoření výstupního obrazu s minimálními artefakty. Pro tuto funkci se důrazně doporučuje skutečný odhad pohybu (true motion).
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
mvbw, mvfw (nejmený) je klip s daty zpětných a dopředných vektorů vektorů pohybu vytvořený funkcí MAnalyse.
time: pozice interpolačního času mezi snímky (v procentech, výchozí=50.0, poloviční způsob)
mL: násobící parametr masky. Nižší hodnoty odpovídají silnějším maskám okluzí (jako ve funkci MMask, použijte ho pro vyladění a odstranění chyb). Výchozí=100.
blend: smíchá snímky na změně scény jako když je ConvertFps true, nebo opakuje poslední snímek jako když je ChangeFps false. Vychozí je true.
MFlowFps
(clip, clip "mvbw", clip "mvfw", int "num", int "den", int "mask", float "ml", clip "pelclip", int "idx")
Změní frekvenci snímků (fps) klipu (a počet snímků). Funkce může být použita pro převod frekvence snímků, efekt pomalého pohybu, atd. Používá zpětných "mvbw" a dopředných "mvfw" vektorů pohybu pro vytvoření obrazu v nějakém mezičase mezi snímky. Používá pixelovou kompenzaci pohybu (jako MFlow, MFlowInter). Vnitřní zpětné a dopředné masky okluze (metoda MMask kind=2) a časově vážené součinitele jsou použity pro vytvoření výstupního obrazu s minimálními artefakty. Pro tuto funkci se důrazně doporučuje skutečný odhad pohybu (true motion).
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
mvbw, mvfw (nejmený) je klip s daty zpětných a dopředných vektorů vektorů pohybu vytvořený funkcí MAnalyse.
num: čitatel fps výstupního klipu. Výchozí=25.
den: jmenovatel fps (výchozí=1). Výsledná fps = num/den. Především pro dvojnásobnou NTSC fps=2*29.97 použijte num=60000 a den=1001, a pro dvojnásobnou NTSC FILM fps=2*23.976 použijte num=48000 a den=1001. Když num nebo den je rovno 0, pak je pro výstup brána dvojnásobná fps vstupního klipu (od v1.8.1).
mask: režim masky zpracování:
mask=0 jsou jednoduché zpětné a dopředné masky okluze (použité ve verzích do 1.4.x, nejrychlejší);
mask=1 je podobná maska s dodatečným přepínáním na statické nulové vektory v okluzních oblastech (podobné do v1.5.x);
mask=2 je pro použití zvláštních vektorů ze sousedních snímků pro snížení
halo efektu u objektů v okluzních oblastech (v1.8, nejpomalejší). Výchozí=2.
ml: parametr měřítka masky. Větší hodnoty odpovídají slabší masce okluze (jako ve funkci MMask, použijte ho pro vyladění a odstranění chyb). Výchozí=100.
blend: smíchá snímky na změně scény jako když je ConvertFps true, nebo opakuje poslední snímek jako když je ChangeFps false. Vychozí je true.
MBlockFps
(clip, clip super, clip mvbw, clip mvfw, int "num", int "den", int "mode", float "thres",
bool "blend", int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Funkce používá částečnou kompenzaci pohybu založenou na blocích ke změně frekvence snímků (fps) klipu (a počtu snímků). Používá zpětné "mvbw" a dopředné "mvfw" vektory pohybu pro vytvoření interpolovaných obrazů v nějakém mezičase mezi snímky. Pro vytvoření výstupního obrazu se používají některé vnitřní zpětné a dopředné masky a časově vážené součinitele. (Algoritmus je založen na funkci MVInter starých MVTools v1.9.12.) Je to obvykle rychlejší než MFlowFps , ale může vytvářet kostkatění a jiné artefakty. Pro tuto funkci se důrazně doporučuje skutečný odhad pohybu (true motion).
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
mvbw, mvfw (nejmený) je klip s daty zpětných a dopředných vektorů vektorů pohybu vytvořený funkcí MAnalyse.
num: čitatel fps výstupního klipu. Výchozí=25.
den: jmenovatel fps (výchozí=1). Výsledná fps = num/den. Především pro dvojnásobnou NTSC fps=2*29.97 použijte num=60000 a den=1001, a pro dvojnásobnou NTSC FILM fps=2*23.976 použijte num=48000 a den=1001. Když num nebo den je rovno 0, pak je pro výstup brána dvojnásobná fps vstupního klipu.
mode: režim zpracování:
0 - průměr dopředné a zpětné částečné kompenzace pohybu (nejrychlejší, výchozí).
1 - statický střed.
2 - dynamický střed.
3 - časově vážená kombinace přenesených dopředných bloků maskovaných posunutými zpětnými
a přenesených zpětných maskovaných posunutými dopřednými.
4 - režim 3 smíchaný s jednoduchým statickým časovým průměrem podle masky okluze posynutých bloků.
5 - maska okluze (pro ladění).
thres: prahová hodnota množství okluzí na blok pro binarizaci masky. Výchozí=0, což je vnitřně = blksize*blksizeV/4.
blend: smíchá snímky na změně scény jako když je ConvertFps true, nebo opakuje poslední snímek jako když je ChangeFps false. Vychozí je true.
MFlowBlur
(clip, clip super, clip mvbw, clip mvfw, float "blur", int "prec",
int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Experimentální jednoduchá funkce rozmazání pohybu. Může být použita pro FILM-efekt (simulaci konce otevření závěrky kamery). Používá zpětné "mvbw" a dopředné "mvfw" vektory pohybu pro vytvoření a překrytí mnoha kopií částečně kompenzovaných pixelů v mezičase v nějakém intervalu rozmazání (blurring) kolem aktuálního snímku. Používá pixelovou kompenzaci pohybu (jako MFlow). Pro tuto funkci se důrazně doporučuje skutečný odhad pohybu (true motion).
super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
mvbw, mvfw (nejmený) je klip s daty zpětných a dopředných vektorů vektorů pohybu vytvořený funkcí MAnalyse.
blur: časový interval rozmazání (blur) mezi snímky, čas otevření závěrky (v procentech, výchozí=50.0)
prec: přesnost rozmazání v jednotkách pixelů. Maximální krok mezi kompenzovanými rozmazanými pixely. Výchozí =1 (nejpřesnější).
MDeGrain1
(clip, clip super, clip mvbw, clip mvfw, int "thSAD", int "thSADC", int "plane", int "limit",
int "thSCD1", int "thSCD2", bool "isse", bool "planar")
MDeGrain2
(clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2, int "thSAD", int "thSADC", int "plane", int "limit",
int "thSCD1", int "thSCD2", bool "isse", bool "planar")
MDeGrain3
(clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2,
clip mvbw3, clip mvfw3,int "thSAD", int "thSADC", int "plane", int "limit",
int "thSCD1", int "thSCD2", bool "isse", bool "planar")
Provádí časové (temporal) odšumění s kompenzací pohybu. Bloky předchozích a následujících snímků jsou pohybově kompenzovány a pak zprůměrovány s aktuálním snímkem s váženými součinitely závislými na rozdílech bloků od aktuálního (SAD). Funkce podporují režim překrývání bloků.
Zpracování překrývajících se bloků je implementována jako okenní sumarizace bloků (jako FFT3DFilter, hodnoty překrytí do blksize/2) pro snížení artefaktů kostkatění.
MDeGrain1 má časový (temporal) rádius 1 (používá vektory předchozího mvfw a následujícího mvbw snímku).
MDeGrain2 má časový (temporal) rádius 2 (používá vektory dvou předchozích mvfw2, mvfw a dvou následujících mvbw,mvbw2 snímků). MDeGrain3 má časový (temporal) rádius 3 (používá vektory tří předchozích mvfw3, mvfw2, mvfw a tří následujících mvbw, mvbw2, mvbw3 snímků). Je to pomalejší, ale produkuje trochu lepší výsledky (silnější odšumění).super (nejmenný) je víceúrovňový superklip připravený funkcí MSuper.
mvbw, mvfw (nejmený) je klip s daty zpětných a dopředných vektorů vektorů pohybu vytvořený funkcí MAnalyse.
parametr "thSAD" definuje měkkou prahovou hodnotu součtu absolutních rozdílů bloku.
Blok se SAD nad prahovou hodnotou thSAD má nulovou váhu při průměrování (odšumění).
Blok s nízkou hodnotou SAD má největší váhu. Zbytek váhy se bere z pixelů zdrojového klipu.
Musíte zadat hodnotu thSAD redukovanou na velikost bloku 8x8.
Nízké hodnoty mohou vést k šachovnicovému odšumění, velké hodnoty mohou vést k duchům a artefaktům.
Výchozí thSAD=400.
"thSADC" je prahová hodnota pro plochy barevnosti (chroma).
Výchozí (není-li zadána) : thSADC=thSAD.
Pokud je zadána pak thSADCje použito pro barevnost a thSAD je použito pro jas (luma).
parametr plane nastavuje zpracovanou barevnou plochu:
0 - jas, 1 - barevnost U, 2 - barevnost V, 3 - obě barevné roviny, 4 - vše. Výchozí je 4.
limit: maximální změna pixelu (jako plugin DeGrainMedian pro zabránění některým artefaktům). Výchozí je 255 (bez omezení).
MRecalculate
(clip super, clip vectors, int "thSAD", int "smooth", int "blksize", int "blksizeV",
int "search", int "searchparam", int "lambda", bool "chroma",
bool "truemotion", int "pnew", int "overlap", int "overlapV",
string "outfile", int "dct", int "divide", bool "mc", int "sadx264", bool "isse", bool "planar")
Upřesňuje a přepočítává dříve odhadnutá (z MAnalyse) data vektorů pohybu vectors pro jiný klip super nebo nastavení nových parametrů (např. menší velikost bloku), po dělení, atd. Tato dvou fázová metoda může být také užitečná pro stabilnější (robustnější) odhad pohybu. Upřesnění se provádí jen na nejjemnější hierarchické úrovni. Interpolované vektory starých bloků jsou použity jako prediktory pro nové vektory, s přepočtem SAD. Jen nové vektory špatné kvality se SAD vyšší než prahová hodnota thSAD budou znovu odhadnuty vyhledáváním. Zadávejte hodnotu thSAD redukovanou (násobenou) na velikost bloku 8x8. Výchozí thSAD=200. Dobré vektory jsou nezměněny, ale jejich SAD bude aktualizováno (přepočítáno).
smooth je metoda jak rozdělit hrubé bloky na menší. 0 - použije pohyb na nejbližší blok, 1 - bilineární interpolace 4 sousedů. Výchozí 1.
Další parametry mají stejný význam jako v MAnalyse (ale můžete použít jiné hodnoty).
Zobrazení vektorů pohybu ( dopředných ) :
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. vectors = MSuper().MAnalyse(isb = false) MShow(vectors) # implicitní last pracuje správně
Zobrazení zpětných vektorů :
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. vectors = MSuper().MAnalyse(isb = true) MShow(vectors)
Použití MMask :
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. vectors = MSuper().MAnalyse(isb = false) MMask(vectors)
Použití MDepan s pluginem Depan pro prokládaný zdroj (příklad funkce DepanStabilize):
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. AssumeTFF().SeparateFields() # nastavení správného pořadí polí vectors = MSuper().MAnalyse(isb = false) globalmotion = MDepan(vectors, pixaspect=1.094, thSCD1=400) DepanStabilize(data=globalmotion, cutoff=2.0, mirror=15, pixaspect=1.094) Weave()
Rozmazání problémových (kostkatých) oblastí kompenzovaných snímků s maskou okluze:
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. super = MSuper() vectors = MAnalyse(super, isb = false) compensation = MCompensate(super,vectors) # nebo zde použijte funkci MFlow # připravíme rozmazaný snímek s nějakou silnou funkcí rozmazání nebo deblokování: blurred = compensation.DeBlock(quant=51) # použijeme zde funkci DeBlock badmask = MMask(vectors, kind = 2, ml=50) overlay(compensation,blurred,mask=badmask) # nebo použijeme rychlejší funkci MaskedMerge z MaskTools
Nové vytvoření špatných snímků interpolací pomocí MFlowInter:
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. super = MSuper() backward_vectors = MAnalyse(super, isb = true, delta=2) forward_vectors = MAnalyse(super, isb = false, delta=2) inter = MFlowInter(super, backward_vectors, forward_vectors, time=50, ml=70) # Předpokládejme, že špatné snímky jsou 50 a 60 trim(0,49) ++ inter.trim(49,-1) \ ++ trim(51,59) ++ inter.trim(59,-1) ++ trim(61,0)
Změna fps pomocí MFlowFps:
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. # Předpokládáme progresivní zdroj PAL 25 fps super = MSuper(pel=2) backward_vec = MAnalyse(super, isb = true) forward_vec = MAnalyse(super, isb = false) MFlowFps(super, backward_vec, forward_vec, num=50, den=1, ml=100) # získáme 50 fps
Zdvojnásobení fps pomocí MFlowFps pro nejrychlejší (téměř) k přehrávání v reálném čase
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. # Předpokládáme progresivní zdroj PAL 25 fps nebo NTSC Film 23.976 super = MSuper(pel=1,hpad=16,vpad=16) backward_vec = MAnalyse(super, blksize=16, isb = true, chroma=false, searchparam=1) forward_vec = MAnalyse(super, blksize=16, isb = false, chroma=false, searchparam=1) MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), \ den=FramerateDenominator(last), mask=0)
Zdvojnásobení fps pomocí MFlowFps pro 'nejlepší' výsledky (ale pomalejší zpracování):
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. # Předpokládáme progresivní zdroj PAL 25 fps nebo NTSC Film 23.976 super = MSuper(pel=2) backward_vec = MAnalyse(super, overlap=4, isb = true, search=3) # použijeme překrývání bloků, přesnost na půl pixelu a Vyčerpávající vyhledávání forward_vec = MAnalyse(super, overlap=4, isb = false, search=3) MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), \ den=FramerateDenominator(last))
Generování pěkného rozmazání pohybu pomocí MFlowBlur:
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. super = MSuper() backward_vectors = MAnalyse(super, isb = true) forward_vectors = MAnalyse(super, isb = false) MFlowBlur(super, backward_vectors, forward_vectors, blur=15)
Odšumění pomocí nějakého externího filtru pro odstranění šumu (který používá 3 snímky: předchozí, aktuální, následující):
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. super = MSuper() backward_vectors = MAnalyse(super, isb = true) forward_vectors = MAnalyse(super, isb = false) forward_compensation = MFlow(super, forward_vectors, thSCD1=500) # nebo použijte MCompensate backward_compensation = MFlow(super, backward_vectors, thSCD1=500) # vytvoříme postupné 3-snímkové sekvence interleave(forward_compensation, last, backward_compensation) DeGrainMedian() # umístěte sem váš oblíbený časový nebo časově-prostorový (temporal nebo spatial-temporal) odšumovač selectevery(3,1) # vrací jen filtrované centrální (nekompenzované) snímky
Použití předfiltrovaného klipu pro spolehlivější odhad pohybu, ale kompenzaci pohybu nepředfiltrovaného klipu (příklad odšumění)
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. # Použijte některý odšumovač (rozmazávač) nebo odstraňovač blikání (deflicker) pro předfiltrování prefiltered = blur(1.0) super = MSuper(levels=1) # jedna úroveň je pro MCompensate dostačující superfilt = MSuper(prefiltered) # všechny úrovně pro MAnalyse backward_vectors = MAnalyse(superfilt, isb = true) forward_vectors = MAnalyse(superfilt, isb = false) # použijeme nepředfiltrovaný (super) klip pro kompenzaci pohybu forward_compensation = MCompensate(super, forward_vectors) backward_compensation = MCompensate(super, backward_vectors) # vytvoříme postupné 3-snímkové sekvence interleave(forward_compensation, last, backward_compensation) DeGrainMedian() # umístěte sem váš oblíbený časový nebo časově-prostorový (temporal nebo spatial-temporal) odšumovač selectevery(3,1) # vrací jen filtrované centrální (nekompenzované) snímky
Odšumění pomocí MDegrain2 s překrytými bloky (blksize=8) a subpixelovou přesností:
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. super = MSuper(pel=2, sharp=1) backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4) backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4) forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4) forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4) MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)
Odšumění prokládaného zdroje pomocí MDegrain1 s překrývajícími se bloky (blksize=8) a subpixelovou přesností:
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. fields=AssumeTFF().SeparateFields() # nebo AssumeBFF super = MSuper(fields) backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=2) forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=2) MDegrain1(fields, super, backward_vec2,forward_vec2,thSAD=400) Weave()
Odšumění prokládaného zdroje pomocí funkce MDegrain2i2:
function MDegrain2i2(clip source, int "overlap", int "dct") { overlap=default(overlap,0) # hodnota překrytí (0 až 4 pro blksize=8) dct=default(dct,0) # použijte dct=1 pro klip se slabým blikáním fields=source.SeparateFields() # rozdělíme pole super = fields.MSuper() backward_vec2 = super.MAnalyse(isb = true, delta = 2, overlap=overlap, dct=dct) forward_vec2 = super.MAnalyse(isb = false, delta = 2, overlap=overlap, dct=dct) backward_vec4 = super.MAnalyse(isb = true, delta = 4, overlap=overlap, dct=dct) forward_vec4 = super.MAnalyse(isb = false, delta = 4, overlap=overlap, dct=dct) fields.MDegrain2(super, backward_vec2,forward_vec2,backward_vec4,forward_vec4,thSAD=400) Weave() } AVISource("video.avi") mvdegrain2i2(4,0)
Jak použít externí klip subpixelové interpolace::
# Načtěte plugin Eedi2 (by tritical) s funkcí interpolace se zohledněním směrů obrysů LoadPlugin("Eedi2.dll") AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. # vytvoříme ze zdroje nadvzorkovaný klip ups = EEDI2(field=1).LanczosResize(2*width(last), 2*height(last), src_left=0.25) super = MSuper(pel=2, pelclip=ups) bv = MAnalyse(super, isb = true, overlap=4) MCompensate(super, bv)
Jak použít s MT filtrem a speciální vícevláknovou verzí AviSynthu:
# Načtěte MT plugin od TSP LoadPlugin("MT.dll") avisource("some.avi") MT(""" super = MSuper(pel=2, sharp=1) backward_vec2 = super.MAnalyse(isb = true, delta = 2, overlap=4) backward_vec1 = super.MAnalyse(isb = true, delta = 1, overlap=4) forward_vec1 = super.MAnalyse(isb = false, delta = 1, overlap=4) forward_vec2 = super.MAnalyse(isb = false, delta = 2, overlap=4) MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400) """,2) # dvě vlákna
Poznámka: Režim SetMTMode(2) vícevláknového AviSynthu je podporován od MVTools v.1.8.4.1 (beta testing). MVtools verze 2 by měla pracovat stabilněji. Stejný příklad se SetMTMode:
SetMTMode(5) FFmpegSource("some.avi") # avisource nepracuje se SetMTMode na mém stroji - TSchniede SetMTMode(2) super = MSuper(pel=2) backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4) backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4) forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4) forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4) MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)
Jak použít předfiltrovaný klip a přepočítat data pohybu původního zdroje (MFlowFPS příklad)
AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. prefiltered = DeGrainMedian() # trocha vyhlazení super = MSuper(hpad=16, vpad=16, levels=1) # jedna úroveň pro MRecalculate stačí superfilt = MSuper(prefiltered, hpad=16, vpad=16) # všechny úrovně pro MAnalyse backward = MAnalyse(superfilt, isb = true, blksize=16) forward = MAnalyse(superfilt, isb = false, blksize=16) # přepočítání původního zdrojového klipu s jinou velikostí bloku forward_re = MRecalculate(super, forward, blksize=8, thSAD=100) backward_re = MRecalculate(super, backward, blksize=8, thSAD=100) MFlowFps(super, backward_re, forward_re, num=50, den=1)
Jak použít možnost planar pro rychlejší zpracování YUY2 (příklad MDegrain3):
LoadPlugin("RemovegrainS.dll") # pro převod funkcí AVISource("c:\test.avi") # nebo MPEG2Source, DirectShowSource, některý předchozí filtr, atd. Interleaved2Planar() # převede klip na planární super = MSuper(planar=true) bv1 = MAnalyse(super, isb = true, delta = 1, overlap=4) fv1 = MAnalyse(super, isb = false, delta = 1, overlap=4) bv2 = MAnalyse(super, isb = true, delta = 2, overlap=4) fv2 = MAnalyse(super, isb = false, delta = 2, overlap=4) bv3 = MAnalyse(super, isb = true, delta = 3, overlap=4) fv3 = MAnalyse(super, isb = false, delta = 3, overlap=4) MDegrain3(super,bv1,fv1,bv2,fv2,bv3,fw3,thSAD=400,planar=true) Planar2Interleaved() # převede zpět na normální prolínané YUY2
Tento plugin je šířen za podmínek GNU GPL licence, bez jakýchkoli záruk. Viz. 'gpl.txt'.
Dokumentace je šířena pod CreativeCommons BY-SA 3.0 license.
Zvažte prosím provedení nějaké dotace pro podporu.
MVTools používají části kódu z následujících projektů:
Resizer (SimpleResize.cpp) je z Avisynth pluginu SimpleResize od Toma Barryho. http://www.trbarry.com
Fast DCT (fdct_mmx.asm) je z XVID MPEG-4 VIDEO KODEKU. http://www.xvid.org
DCT general transform (viz. fftwlite.h) je z FFTW knihovny (jako DLL výzva). http://www.fftw.org
Satd. (pixel-32.asm, pixel.asm) a alternative SADx264 (sad-a.asm,
x86inc.asm, x86inc-32.asm, cpu-32.asm) jsou z projektu x264.
http://www.videolan.org/developers/x264.html
(Loren Merritt, Laurent Aimar, Alex Izvorski et al).
2.4.2 (07.04.2009 by Fizick)
2.4.1 beta (24.01.2009 by Fizick)
2.4.0 beta (09.01.2009 by Fizick)
2.3.1 (14.12.2008 by Fizick)
2.3.0 (6.12.2008 by Fizick)
2.2.2 (30.11.2008 by Fizick)
2.2.1 (27.11.2008 by Fizick)
2.1.2 (23.11.2008 by Fizick)
2.1.1 (18.11.2008 by Fizick)
2.1.0 (8.11.2008 by Fizick)
2.0.11.2 (6.11.2008 by Fizick)
2.0.11.1 (5.11.2008 by Fizick)
2.0.9.2 (3.11.2008 by Fizick)
2.0.9.1 (20.10.2008 by Fizick)
2.0.9.0 alpha (13.10.2008 by Fizick)
2.0.7.0 alpha (02.10.2008 by Fizick)
2.0.0.3 alpha (28.09.2008 by Fizick)
1.11.4.4 (15.10.2008 by Fizick)
1.11.4.3 (08.10.2008 by Fizick)
1.11.4.2 (26.09.2008 by Fizick)
1.11.0.1 beta (08.09.2008 by Fizick)
1.10.2.1 (28.08.2008 by Fizick)
1.10.2.0 beta (27.08.2008 by Fizick)
1.10.1.0 not public (22.08.2008 by Fizick)
1.10.0.0 not public (18.08.2008 by Fizick)
1.9.6.x-1.9.7.x series branch (01.08.2008-26.08.2008 by josey_wells)
1.9.5.7 public beta (03.07.2008 by Fizick)
1.9.5.6 (02.07.2008 by TSchniede)
1.9.5.5 (28.06.2008 by TSchniede)
1.9.5.4 (27.06.2008 by TSchniede)
1.9.5.3 (26.06.2008 by TSchniede)
1.9.5.2 (24.06.2008 by TSchniede)
1.9.5.1 public beta (21.06.2008 by Fizick)
1.9.5 (21.06.2008 by TSchniede), based on v.1.9.3
1.9.4.1 beta (12.06.2008 by Fizick, released 21.06.2008)
1.9.4 not public beta (08.06.2008 by Fizick)
1.9.3.1 (05.06.2008 by Fizick)
1.9.3 (20.04.2008 by Fizick)
1.9.2 (29.01.2008, all bugs were found by josey_wells)
1.9.1 beta (15.12.2007 by Fizick)
1.9.0 (04.12.2007 by Fizick)
1.8.6 (02.12.2007 by Fizick)
1.8.5.1 (12.11.2007 by we:)
1.8.4.3 (05.10.2007 by Tsp)
1.8.5 (05.11.2007 by Fizick)
1.8.4.2 (25.10.2007 by Tsp)
1.8.4.1 (23.10.2007 by Tsp)
1.8.4 (22.08.2007 by Fizick)
1.8.3 (17-20.08.2007 by Fizick)
1.8.2 beta (30.07.2007 by Fizick)
1.8.1 beta (28.06.2007 by Fizick)
1.8.0 beta (22.06.2007 by Fizick)
1.7.0 beta (05.06.2007 by Fizick)
1.6.4 (30.05.2007 by Fizick)
1.6.3 (06.05.2007 by Fizick)
1.6.2 (11.11.2006 by Fizick)
1.6.1 beta (25.10.2006 by Fizick)
1.5.8 beta (14.10.2006 by Fizick)
1.5.3 beta (01.10.2006 by Fizick)
1.5.1 beta (05.09.2006 by Fizick)
1.5.0 beta (23.08.2006 by Fizick)
1.4.13 (28.09.2006 by Fizick)
1.4.12 (25.09.2006 by Fizick)
1.4.11 (06.09.2006 by Fizick)
1.4.10 (18.08.2006 by Fizick)
1.4.9 (14.08.2006 by Fizick)
1.4.8 (31.07.2006 by Fizick)
1.4.7 (25.07.2006 by Fizick)
1.4.6 (24.07.2006 by Fizick)
1.4.5 (22.07.2006 by Fizick)
1.4.4 (19.07.2006 by Fizick)
1.4.3 (17.07.2006 by Fizick)
1.4.2 (16.07.2006 by Fizick)
1.4.1 (23.06.2006 by Fizick)
1.4.0 (19.06.2006 by Fizick)
1.3.1 (11.06.2006 by Fizick)
1.3.0 (05.06.2006 by Fizick)
1.2.6 beta (21.05.2006 by Fizick)
1.2.5 (08.05.2006 by Fizick)
1.2.4 (07.04.2006 by Fizick)
1.2.3 (31.03.2006 by Fizick)
1.2.2 beta (01.03.2006 by Fizick)
1.2.1 beta (20.02.2006 by Fizick)
1.2 beta (17.02.2006 by Fizick)
1.1.1 (16.02.2006 by Fizick)
1.1 (non-public build 9.01.2006 by Fizick)
1.0.3 (Released 30.12.2005 by Fizick)
1.0.2 (Released 28.12.2005 by Fizick)
1.0.1 (Released 24.12.2005 by Fizick)
1.0 (Released 29.11.2005 by Fizick)
0.9.13.3 (Released 27.11.2005 by Fizick)
0.9.13.2 (Released 22.11.2005 by Fizick)
0.9.13.1 (Released 21.11.2005 by Fizick)
0.9.13 (Released 20.11.2005 by Fizick)
0.9.12.4 (Released 15.11.2005 by Fizick)
0.9.12.3 (Released 14.11.2005 by Fizick)
0.9.12.2 (Released 13.11.2005 by Fizick)
0.9.12.1 (Released 12.11.2005 by Fizick)
0.9.12 (Released 09.11.2005 by Fizick)
0.9.11.1 (Released 06.11.2005 by Fizick)
0.9.11 (Released 04.11.2005 by Fizick)
0.9.10.1 (Released 01.11.2005 by Fizick)
0.9.10 (Released 31.10.2005 by Fizick)
0.9.9.1 (Released 20.01.2005 by Manao)
0.9.9
0.9.8.5
MVCompensate
changed : a new parameter, idx, which works as idx in MVAnalyse
,
and which allows speed up when compensating the same frames several times.0.9.8.4
0.9.8.3
Corrector
function, as requested by scharfi.0.9.8.2
MVDepan
(added by Fizick) for Depan plugin.0.9.8.1
0.9.8
0.9.7
MVAnalyse
. New filter : MVChangeCompensate
.
0.9.6.2
MVMask
parameters.0.9.6.1
0.9.5.3
0.9.5.2
0.9.5
0.9.4
0.9.3
0.9.2.1
0.9.2
0.9.1 - 12.05.2004
0.1-0.6 Released 24.01.2004 - 01.04.2004 by Manao
Starší verzi 1.X dokumentaci a odkaz na její stažení je na http://avisynth.org.ru/mvtools/mvtools.html
Starší MVTools v.0.9.9.1 můžete stáhnout z Manaových stránek
Český překlad:22.5.2009