# TDecimate

## Přehled

autor: tritical
verze: 1.0.3
stáhnout: http://bengal.missouri.edu/~kes25c/, http://avisynth.org/warpenterprises/
kategorie: Odstraňování prokládání & pulldown
požadavky:

- YV12 & YUY2 Barevné prostředí

licence: GPL

## Obsah

- A.) Obecné informace
- B.) Základní parametry
- C.) Pokročilé parametry
- D.) Vstupní/výstupní parametry souboru
- E.) Parametry ladění/zobrazení
- F.) Nadřazování
- G.) Seznam změn
- H.) Na dopracování

## A.) Obecné informace:

TDecimate je decimační filtr určený pro odstraňování duplikátů z video streamu. Podporuje několik typů operací, které zahrnují decimaci M snímků-z-N snímků a libovolné schema decimace frekvence snímků, které může podporovat poměry nedosažitelné při M-z-N. Také zahrnuje speciální zacházení s hybridním materiálem jako je blend decimace (pro řešení jedné frekvence snímků) nebo vfr přes mkv použitím souboru časových kódů (timecodes).

### Syntaxe

`TDecimate` (clip, int "mode", int "cycleR", int "cycle", float "rate", float "dupThresh", float "vidThresh", float "sceneThresh", int "hybrid", int "vidDetect", int "conCycle", int "conCycleTP", string "ovr", string "output", string "input", string "tfmIn", string "mkvOut", int "nt", int "blockx", int "blocky", bool "debug", bool "display", int "vfrDec", bool "batch", bool "tcfv1", bool "se", bool "chroma", bool "exPP", int "maxndl", bool "m2PA", bool "denoise", bool "noblend", bool "ssd", int "hint", PClip "clip2", int "sdlim", int "opt")

## B.) Základní parametry:

mode -

Nastavuje režim operace. Možná nastavení:

Mode 0 = Přímá decimace typu M-z-N . TDecimate vyzkouší každé nastavení N snímků a decimuje M nejvíce podobných snímků. Hodnoty M a N jsou ovládány pomocí parametrů cycleR a cycle. Blend decimace videa (30p) je v tomto režimu podporována (hybrid = 1), stejně tak smíchání (blending) 24p do 30p (hybrid = 3).

Mode 1 = Přesně jako mode 0, kromě toho, že místo decimování M nejpodobnějších snímků, jsou snímky decimovány z nejdelších zbývajících řetězců duplikátů. Detekce duplikátu používá parametr dupThresh. Tento režim je správný typ decimace pro animované filmy a další zdroje kde se snímky opakují 2, 3 nebo 4 krát v řadě, a také podporuje blend decimaci videa (30p) při hybrid = 1, stejně tak smíchání (blending) 24p do 30p (hybrid = 3).

Mode 2 = Tento režim používá oddělený decimační algoritmus, který může dosáhnout jakoukoli frekvenci snímků. Je to užitečné, když nemůžete dosáhnout žádané frekvence snímků s decimací M-z-N. Výstupní frekvence snímků pro tento režim je nastavena použitím parametru "rate". Parametr maxndl může být použit pro nastavení chování na zdrojích s nerovnoměrnou distribucí duplikátů. V tomto režimu nemůže být použito zpracování hybridů!

Výstupy těchto režimů se budou mírně lišit, pokud je spustíte s metrikami vstupního souboru (například vytvořených při předchozím průchodu v režimu mode 4), které je nechají analyzovat celé video na samotném začátku, než když je spustíte přímo a necháte je analyzovat video tak jak přichází. Obecně, rozdíly budou malé, ale metoda 2 průchodů (t.j. plná analýza ze vstupního souboru) obecně vytvoří hladší výsledek. Parametr m2PA může být použit pro vynucení jednoprůchodové verze režimu mode 2 pro vytvoření stejných výsledků jako dvouprůchodová verze čtením vpřed ve streamu tolik, kolik je potřeba (jednoprůchodová verze omezuje čtení před na max 100 snímků).

Mode 3 = Toto je jednoprůchodový režim vfr pro mkv s výstupem časových kódů. Hybrid musí být v tomto režimu nastaven na 2! Používá decimaci M-z-N a cycleR musí být nastaven na 1! Typ decimace, která je použita na filmové části (nejpodobnější nebo nejdelší řetězce) je ovládán přes nastavení vfrDec . Aby tento režim pracoval, musí být všechny přístupy lineární od začátku do konce... pokud je detekován nelineární přístup bude zobrazena chybová zpráva.

Protože vfw potřebují znát počet snímků před začátkem zpracování nedělá tento režim změnu počtu snímků a jednoduše vycpe výstup podle potřeby černými snímky. Poslední skutečný snímek bude zaznamenán jako poznámka na konci souboru mkv časových kódů, a bude oznámen ve vycpaných snímcích jakmile se vrátí nejméně 300+ extra snímků. Pokud je možnost se nastavena na true, tak TDecimate vyhodí chybu jakmile je dosaženo 306-tého extra snímku, zastaví zpracování a upozorní uživatele. Pokud se chystáte být poblíž, když se to dělá a neprovádíte dávkové enkódování, může vám tato možnost ušetřit nějaký čas.

Jméno a cesta souboru mkv časových kódů pro výstup jsou nastaveny použitím parametru mkvOut .

Mode 4 = Výstup metrik. Neprovádí se žádná decimace, ale vypočítávají se metriky umožňující možnostem output, display, nebo debug aby byly zapnuty a vysílali své metriky pro pozdější použití. (první průchod pro dvouprůchodové mkv vfr s použitím mode 5)

Mode 5 = Tento je podobný jako mode 3 (mkv vfr, a vyžaduje hybrid=2 a cycleR=1), ale jako část dvouprůchodového zpracování. Vyžaduje úplný vstupní soubor (získaný přes parametr output v předchozím průchodu), a úplný soubor tfmIn (viz možnost batch pro jeho požadavky). Výhody tohoto režimu oproti Mode 3 jsou, že nevyžaduje lineární přístup (vyhledávání je podporováno), využívá parametr conCycleTP místo parametru conCycle který umožňuje pro hodnoty větší než 2, a bude mít správné množství snímků bez vkládaných snímků.

Od verze 0.9.11.8 TDecimate už nejsou pro režim 5 vyžadovány vstupní a tfmIn soubor. Pokud vstupní soubor není zadán, pak hodnota ULLONG_MAX-1 (maximální hodnota, kterou tdecimate má) je přiřazena všem metrikám. Podobně, pokud soubor tfmIn není zadán, pak všechna uspořádání jsou přiřazena jako 'c', neroztřepená, a neduplikované d2v.

Mode 6 = Toto je nastavení pro vytvoření 120fps->vfr w/ souboru časových kódů. To vyžaduje úplné metriky vstupního souboru generované v režimu mode 4 v předchozím průchodu. Bude decimovat bit pro bit jen identických snímků. Veškerá decimace bude na jednu z následujících frekevencí snímků: 119.880, 59.940, 39.960, 29.970, 23.976.

Mode 7 = Tento režim je podobný režimu 2, ve kterém se používá decimační algoritmus, který může docílit libovolné frekvence snímků. Nicméně, operuje docela jinak než mode 2. Je užitečný, když nemůžete dosáhnout žádané frekvence snímků decimací M-z-N a nemůžete si dovolit jít na dva průchody v režimu 2 (v takém případě režim 7 dá obvykle lepší výsledky, jestliže je distribuce duplikátů alespoň trochu soudržná).

Výstupní frekvence snímků pro tento režim je nastavena použitím parametru "rate". Také využívá parametry "dupthresh" a "vidthresh" ... dupthresh nastavuje prahovou hodnotu takovou, že jakékoli snímky s rozdílnými hodnotami pod dupthresh jsou považovány za duplikáty, a vidthresh nastavuje prahovou hodnotu takovou, že jakékoli snímky s rozdílnými hodnotami nad vidthresh jsou považovány za neduplitáty. Snímky s rozdílnými hodnotami uprostřed dupthresh a vidthresh jsou klasifikovány jako podobné jestliže nereprezentují descernable lokální minimum nebo maximum v řetězci rozdílných hodnot. Ve výchozím stavu je dupthresh nastaven na 0.5 a vidthresh je nastaven na 4.0 (používají obvyklé normalizované měřítko 0 až 100).

Výchozí: 0 (int)

cycleR -

Nastavuje "M" pro decimační režimy M-z-N . Jinými slovy, jeho nastavení na 1 znamená, že 1 snímek z každého cyklu snímků bude vypuštěn. Tímto nastavením může být cokoli v rozsahu 1 až (cyklus-1). Musí být menší než nastavená hodnota cyklu cycle!

*Poznámka: všechny možnosti zpracování hybridů podporují jen cycleR = 1. Takže pokud je hybrid > 0 , tato hodnota musí být nastavena na 1!

Výchozí: 1 (int)

cycle -

Nastavuje "N" pro decimační režimy M-z-N . Jinými slovy, jeho nastavení na 5 znamená, že cycleR snímků z každých 5 snímků bude vypuštěno. Tímto nastavením může být cokoli v rozsahu 2 až (počet snímků ve videu). Musí být také větší než nastavení cycleR .

Výchozí: 5 (int)

rate -

Toto nastavuje výstupní frekvenci snímků při použití režimů mode = 2 až 7. Snímky budou vypuštěny tak, že tato frekvence snímků je dosažena, a přitom je zachována audio/video synchronizace tak přesně jak je to jen možné. Musí být menší než vstupní frekvence snímků.

Výchozí: 23.976 (float)

hybrid -

Ovládá jak nebo jestli by se měli brát také video části (30p). Možná nastavení:

0 - žádné zpracování
1 - blend decimace (režimy 0 a 1)
2 - výstup vfr přes mkv w/ soubor časových kódů (režimy 3 a 5)
3 - blend převod 24p částí na 30p a nechá 30p netknuté (režimy 0 a 1)

* Možnost hybrid se nepoužije v režmech mode = 2 nebo mode = 4, a v současnosti je podporován jen hybrid > 0 pro cycleR = 1!

Výchozí: 0 (int)

vfrDec -

Nastavuje typ decimace pro filmové části při použití režimů 3 a 5. Možná nastavení:

0 - vypustí nejpodobnější snímek v cyklu
1 - decimuje z nejdelšího řetězce duplikátů

Výchozí: 1 (int)

## C.) Pokročilé parametry:

dupThresh -

Toto nastavuje prahovou hodnotu pro detekci duplikátů. Toto nastavení je použito v režimu 1 a také v režimech 3 a 5 pokud vfrDec = 1. Pokud je metrika rozdílu snímku menší nebo rovna této hodnotě, pak je snímek deklarován jako duplikát. Poznámka: metriky se budou mírně lišit mezi zpracováním YV12 a YUY2 pokud je chroma=true... metriky byly normalizovány, takže by měly být blízko, ale v průměru YUY2 metriky mají snahy být mírně vyšší (5-10%) než YV12 metriky pro stejný snímek při chroma=true. Když je chroma=false YV12 a YUY2 metriky budou stejné, nicméně chroma=false metriky budou vyšší než chroma=true metriky takže pokud nastavíte chroma=false počítejte s tím. Tato hodnota je % maximální změny pro blok definovaný hodnotami blockx a blocky hodnotami.... takže 1.1 znamená 1.1% maximální možné změny.

V režimu 7, je dupThresh použito pro nastavení prahové hodnoty, pod kterou jsou snímky považovány za absolutní duplikáty. Použijte display=true, aby jste viděli jaké jsou vypočtené hodnoty metrik pro snímky a jaké jsou prahové hodnoty (přeložené do nenormalizovaných hodnot).

Výchozí: 1.1 (pokud je chroma = true) (float) -- režimy 1, 3, 5
1.4 (pokud je chroma = false)
0.4 (pokud je = true) (float) -- režim 7
0.5 (pokud je = false)

vidThresh -

Toto nastavení je použito pro detekci video částí (30p) mimo metriky snímků, když je hybrid > 0. Pokud všechny snímky v cyklu mají metriky nad touto prahovou hodnotou, pak je cyklus deklarován jako s rozumnými metrikami videa. Toto nastavení je podobné jako v dupThresh, ale mělo by být nastaveno mírně výše, pokud máte vidDetect nastaven na 1 a ne 3. Pokud víte, že váš zdroj má hodně video sekvencí, tak toto nastavte níže a naopak pokud víte, že je váš zdroj čistý film, tak to můžete nastavit opravdu vysoko, aby jste zabránili jakýmkoli možným špatným detekcím. Tato hodnota je % maximální změny pro blok definovaný hodnotami blockx a blocky.... takže 1.1 znamená 1.1% maximální možné změny.

V režimu 7 je vidThresh použit pro nastavení prahové hodnoty výše u snímků, které jsou považovány za absolutně neduplikované. Aby jste viděli nenormalizované prahové hodnoty a hodnoty rozdílů snímků nastavte display=true.

Výchozí: 1.1 (pokud je chroma = true) (float) -- režimy 1, 3, 5 && hybrid > 0
1.4 (pokud je chroma = false)
3.5 (pokud je chroma = true) (float) -- mode 7
4.0 (pokud je chroma = false)

sceneThresh -

Nastavuje prahovou hodnotu pro detekci změn scén, při použití blend decimace pro video části (hybrid = 1) nebo blend převodu pro 24p->30p (hybrid = 3). Tato hodnota je % maximální změny pro jasovou plochu. Dobré hodnoty jsou mezi 10 a 15. Musí být v rozsahu 0 až 100.

Výchozí: 15 (float)

vidDetect -

Toto nastavuje, co je vyžadováno pro detekci jednotlivého cyklu videa při hybrid > 0. Jestli je jednotlivý cyklus dostatečně osamělý nebo jestli musí být detekovány jako video dva po sobě jdoucí cykly nebo více je ovládáno parametry "conCycle" a "conCycleTP".

Detekce videa uspořádáním snímků: (typ označený A)

i.) Uspořádání, která byla použita v TFM neindikují, že jsou v cyklu duplikáty

Detekce videa metrikami: (typ označený B)

i.) Všechny snímky v cyklu mají metriky nad vidThresh.

Detekce videa přes absenci lokálního minima: (typ označen C)

i.) Všechny snímky v cyklu mají metriky, které jsou uvnitř 150% všech ostatních (1.5x) a uvnitř 2.0 (hodnota absolutního rozdílu) všech ostatních. Maximální hodnota metriky uvnitř cyklu musí být větší nebo rovna 0.3.

Jak jsou tyto typy informací použity jako celek pro určení video částí stanovuje vidDetect. Každé nastavení vidDetect má podmínku, která pokud je splněna povede v aktuálním cyklu k jeho detekování jako video. (Podívejte se výše co jsou typy A a B ). Všimněte si , že ovr (nadřazení) přepisuje vidDetect!

0 - A (pokud uspořádání indikuje video, tak ho považuje za video)
1 - B (pokud metriky indikují video, tak ho považují za video)
2 - A nebo B (pokud buď uspořádání nebo metriky indikují video, tak ho považují za video)
3 - A a B (Pokud jak uspořádání, tak i metriky indikují video, tak ho považují za video)
4 - A a (B nebo C) (pokud uspořádání indikuje video a metriky indikují video nebo uspořádání indikuje video a není žádné lokální minimum, považují ho za video)

Výchozí: 3 (int)

conCycle -

conCycle nastavuje požadovaný minimální počet po sobě jdoucích cyklů detekovaných jako video, aby jakoukoliv takovou část považoval za video při hybrid > 0. To znamená, že když je conCycle nastaven na 2, a jednotlivý cyklus je detekován jako video, ale oba cykly - před ním i za ním jsou detekovány jako film, pak tento cyklus bude považován také za film. Pokud byl conCycle v předchozím příkladu nastaven na 1 , pak samostatný video cyklus by byl považovaný za video. Toto nastavení je použito ve všech případech kromě dvouprůchodového mkv vfr (mode 5) kde je místo něj použit conCycleTP ! Rozdíl je, že conCycle je omezen na maximální hodnotu 2 zatímco conCycleTP není shora omezený. Možné hodnoty jsou 1 nebo 2.

Výchozí: 1 pokud vidDetect = 3 (int)
jinak 2

conCycleTP -

Toto je stejné jako conCycle, ale použito v režimu 5 (dva průchody) a umožňuje jakoukoli hodnotu (ne jen 1 nebo 2) a není shora omezeno.

Výchozí: 1 pokud vidDetect = 3 (int)
jinak 2

nt -

Nastavuje prahovou hodnotu šumu použitou při výpočtu metrik rozdílů. Pokud rozdíl abs() mezi dvěma pixely je menší nebo roven této hodnotě, tak je rozdíl považován za 0. To může pomoci snížit metriky skutečně duplikovaných snímků takže zvětšení rozdílu mezi duplikovanými a neduplikovanými snímky usnadní nastavení správných hodnot. Vyhněte se nastavení této hodnoty příliš vysoko, jinak velmi podobné objekty pohybující se přes jiné nebudou detekovány atd... Dobré hodnoty jsou v rozsahu 1-2. Pro čisté video se zdá, že nejlépe pracuje hodnota 0.

Výchozí: 0 (int)

blockx -

Nastavuje x-ovou velikost bloků použitých pro výpočty metrik. Větší bloky dají lepší potlačení šumu, ale také dají horší detekci malých pohybů. Možné hodnoty jsou jakákoliv čísla, která jsou druhými mocninami čísla 2 od 4 až do 2048 (4, 8, 16, 32, ... 2048).

Výchozí: 32 (int)

blocky -

Nastavuje y-ovou velikost bloků použitých pro výpočty metrik. Větší bloky dají lepší potlačení šumu, ale také dají horší detekci malých pohybů. Možné hodnoty jsou jakákoliv čísla, která jsou druhými mocninami čísla 2 od 4 až do 2048 (4, 8, 16, 32, ... 2048).

Výchozí: 32 (int)

batch -

Toto nastavení je určeno jen pro použití v režimu 5. V podstatě nastavuje nějaká pole na falešné hodnoty a vypíná několik kontrol a tím umožňuje avisynth skriptu s tdecimate(mode=5, ...) načíst se, když tfmIn a vstupní soubory nemají žádné údaje. To je užitečné a potřebné pro nastavení dvouprůchodového systému v ovládání úloh VirtualDubu t.j. Vytvoříte skripty pro první a druhý průchod a pak nastavíte oba na enkódování v ovládání úloh VirtualDubu. Poznámka: pokud nastavíte batch = true a tfmIn a vstupní soubory nemají údaje pro všechny snímky pak dostanete borked výstup!

Od v0.9.12.3 batch také vypíná crc kontrolování při používání vstupního souboru (toto aplikuje do všech režimů), a jen nastaví pole na falešné hodnoty pokud je mode nastaven na 5.

true - zapíná falešné hodnoty a vypíná kontroly
false - nedělá to

Výchozí: false (bool)

tcfv1 -

Nastavuje typ formátu časových kódů (timecode format) pro použití v mkv timecode souborech, když jsou vytvářeny v režimech 3 a 5. V mkvtoolnix jsou definovány a použity dva typy formátů. Verze 1 nastavuje frekvenci snímků pro rozsahy snímků zatímco verze 2 dává časové kódy pro každý snímek v milisekundách. Viz dokumentaci mkvtoolnix pro více informací o těchto dvou formátech.

true - použít verzi 1
false - použít verzi 2

Výchozí: true (bool)

se -

Použito jen v režimu 3. Způsobí, že TDecimate zobrazí chybovou zprávu jakmile se dosáhne 306-tého vloženého snímku, upozorní uživatele, že to skončilo, takže nebude utrácen čas na zpracování nepotřebných snímků. Tato možnost by neměla být použita při provádění dávkového enkódování nebo něčem podobném, protože při chybě obvykle vyskočí okno které vyžaduje kliknutí uživatele, takže by to zastavilo jakékoli další zpracování.

true - zastavit brzy (vyhodit chybu)
false - nedělá to

Výchozí: false (bool)

chroma -

Nastavuje zda má a nebo nemá být uvažována barevnost při výpočtu metrik rozdílů snímků. Nastavení na false může přinést zrychlení... je to nastavení kvality oproti rychlosti (přesto může v některých případech chroma=false zlepšit operaci).

true - uvažuje barevnost
false - neuvažuje

Výchozí: true (bool)

exPP -

Nastavte ho na true pokud používáte soubor tfmIn, máte tfm nastaveno na PP=1, a používáte samostatný filtr (jako tdeint) pro provádění post-processingu založeného na údajích o roztřepení snímku z tfm. Pokud ho nenastavíte na true při PP=1 v tfm, pak tdecimate předpokládá, že ve snímcích označených v souboru tfmIn jako prokládáné, není odstraňováno prokládání... pokud toto není takový případ (ve skutečnosti je odstraňováno prokládání samostatným filtrem) pak s takovými snímky nebude zacházeno správně.

Výchozí: false (bool)

maxndl -

Toto nastavení je použito jen s režimem 2 a znamená "maximální délka neduplikátů". Říká TDecimate maximální počet po sobě jdoucích neduplikovaných snímků. Tato informace je využita při plánování strategie decimace. V normálních případech, kdy jsou duplikáty případně rozšířeny ve videu, nemělo by být nutné ho nastavovat. Toto by mělo být potřeba nastaveno jen v případech, kdy délka indikovaná decimačním poměrem je příliš krátká. Například řekněme, že máme ve videu následující šablonu:

5 5 7 7 2

kde čísla ukazují kolik snímků je mezi duplikáty. V tomto případě chceme odstranit 5 z každých 26 snímků. Tento decimační poměr (5/26) by ukázal, že je jeden duplikát na každých 5.2 snímků (5/26 = 1/5.2). Zřejmě, jak ukazuje šablona výše, toto není ten případ protože zde běží až 7 snímků bez duplikátu. Takže bychom potřebovali nastavit maxndl na 7.

Jiný příklad by byl decimování 59.94fps videa na 23.976. Tento poměr by ukázal jeden duplikát na každých 1.667 (5/3) snímů. Nicméně, pokud má video části kde jsou dva neduplikáty zády k sobě pak maxndl by bylo potřeba nastavit na 2 pro správné zpracování.

ZVLÁŠTNÍ INFORMACE:

Zatímco maxndl znamená "maximální délka neduplikátů", je to ve skutečnosti spíše kompromis mezi zachováním video synchronizace a vytvářením hladkého výsledku. Čím větší je maxndl, tím více může decimace být nerovnoměrně rozprostřená v celém videu, což pomáhá vyhlazení výsledku v případě, kde jsou nerovnoměrně rozmístěné duplikáty. Rozhodně experimenujte se zvyšováním maxndl a uvidíte co se stane.

Možná nastavení pro maxndl jsou jakákoli celá čísla větší než 0.

Výchozí: nenastaveno (int)

m2PA -

Přepíše výchozí max. hodnotu pro čtení vpřed 100 pro režim 2. To umožní jednoprůchodový režim (metriky nedostupné ze vstupního souboru) pro vytváření stejných výsledků jako když jsou metriky dostupné.

**Poznámka: velikost cyklu by mohla velmi dobře být v 1000-cích nebo 10000-cích, takže zde je možnost nastavení m2PA=true , které by způsobilo, že se zpracování pozastaví za nějaký ten čas (5-10 minut nebo víc) když se spouští nový cyklus!!! Kontrolujte prosím před nastavením m2PA=true pomocí debug=true největší velikost cyklu, která bude použita!

true = přepíše výchozí maximum
false = nepřepíše

Výchozí: false (bool)

noblend -

Dokonce i u hybrid=0 je zvláštní případ kdy tdecimate použije blend decimaci, a který nastane při detekování dvou duplikátů v cyklu, cycleR=1, a kdy žádný duplikát není blízko změny scény. V takových případech tdecimate vypustí jeden z duplikátů a druhý nahradí jiným smíchaným (blend) z jeho sousedů. Parametr "noblend" je použit pro vypnutí tohoto, takže už při hybrid = 0 není prováděno žádné smíchání (blending).

true - žádné smíchání při hybrid = 0
false - použije smíchání v případě dvou duplikátů

Výchozí: true (bool)

denoise -

Nastavuje zda se má nebo nemá ze snímku odstraňovat šum před provedením výpočtů metriky rozdílu. To může značně zlepšit metriky pro zašumělé zdroje (t.j. stabilizuje metriky duplikovaného snímku a usnadní stanovení rozdílu mezi duplikáty a neduplikáty). Pracuje také velmi dobře se zdroji s honě lezoucími body (dot-crawl) protože odšumění efektivně ruší všechny lezoucí body, zatímco lezoucí body by obvykle nafoukli hodnoty rozdílu duplikátů. Použití odšumění trochu zpomalí zpracování, ale má MMX optimalizaci a slušnou rychlost.

true - použije odšumění
false - nepoužije odšumění

Výchozí: false (bool)

ssd -

Ovládá zda jsou metriky vypočítány jako SAD (součet absolutních rozdílů) nebo SSD (součet čtverců rozdílů).

true - použije ssd
false - použije sad

** Do v0.9.11.0 tdecimate vždy používal SAD ... a je to téměř vždy nejlepší pro účely TDecimate a výchozí prahové hodnoty dupThresh, vidTresh, a sceneThresh jsou založeny na hodnotách SAD.

Výchozí: false (bool)

hint -

Zapíná nebo vypíná čtení údajů (hints) z tfm. Informace v hints může ovlivnit rozhodnutí tdecimate (t.j. v režimu 0 to může vést k vypuštění snímku jiného než toho s nejnižší metrikou v cyklu). Hint informace obsahují použité uspořádání, roztřepené vs. progresivní, d2v rff info... Toto info je také použito pro detekci hybridů (podle nastavení vidDetect). True zapíná čtení, false ho vypíná. Pokud není výslovně zadáno uživatelem, tdecimate při načtení kontroluje jestli jsou údaje (hints) ve streamu přítomny a nastavuje parametr 'hint' odpovídajícím způsobem.

Výchozí: autodetekce při načtení (bool)

clip2 -

Umožňuje zadat druhý klip ze kterého se budou brát snímky. Výpočet metriky a decimace jsou stále prováděny na vstupním klipu, ale snímky které tdecimate vrací jsou z klipu clip2. Clip2 musí mít stejný počet snímků jako vstupní klip a mít barevné prostředí YUY2 nebo YV12 (nemusí mít stejné barevné prostředí jako vstupní klip).

Výchozí: null (PClip)

sdlim -

Při použití režimu 0, 1, nebo 3, s cycleR > 1, nastavuje sdlim minimální vzdálenost ve snímcích mezi odstraněnými duplikáty. Například, s sdlim=2, tdecimate neodstraní žádný snímek, který je do dvou snímků od už označeného snímku pro decimaci. Snímky jsou pro decimaci označeny v pořadí od nejnižší po nejvyšší metriku rozdílu uvnitř aktuálního cyklu. Maximální hodnota pro sdlim je řízena následující nerovnicí:

(sdlim+1)*(cycleR-1) < cycle

Při použití nejdelšího řetězce decimace (mode 1 nebo mode 3 w/ vfrdec=1), sdlim zasáhne do hry jen, když počet snímků s metrikami rozdílu < dupthresh a to je < cycleR-1.

Je možné použít hodnotu sdlim, která by vedla k tomu, že tdecimate by nebyl schopen označit celý cycleR snímků. V takovém případě, pokud je sdlim kladný (t.j. > 0), pak tdecimate označí tolik snímků kolik je možné s danou hodnotou sdlim a pak jednoduše označí zbývající počet snímků bez ohledu na to jak jsou blízko k už označeným snímkům. Pokud je sdlim záporný (t.j. < 0), pak tdecimate sníží sdlim pro takový cyklus o 1 a pak začne znovu od nuly označovat snímky. Takový proces snižování sdlim pokračuje dokud není nalezena hodnota, která umožní označit plný cycleR snímků. Když je sdlim dána jako záporná hodnota, použije se ve skutečnosti absolutní hodnota. Znaménko je jednoduše použito k určení, která metoda zpracování scénářů "neschopných označení plného cycleR snímků" bude použita.

Výchozí: 0 (int)

opt -

Řídí, které cpu optimalizace jsou použity. Možná nastavení:

0 - použít c rutiny
1 - použít mmx rutiny
2 - použít isse rutiny
3 - použít sse2 rutiny
4 - autodetekce

Výchozí: 4 (int)

## D.) Vstupní/výstupní parametry souboru:

ovr -

Nastavuje jméno a cestu k nadřazovacímu souboru. Nadřazovací soubor může být použit k vynucení toho, aby byly určité rozsahy snímků považovány za film nebo video a pro zadání vypuštění snímků nebo decimační šablony v určitých rozsazích snímků. Pro více informací o použití ovr souboru se podívejte do kapitoly NADŘAZOVÁNÍ na konci tohoto souboru.

Režim 7 v současnosti nepodporuje použití nadřazovacího souboru.

Výchozí: "" (String)

output -

Nastavuje jméno a cestu pro výstupní soubor. Tento výstupní soubor bude obsahovat všechny vypočtené metriky. Každý řádek bude obsahovat číslo snímku, plus metriku rozdílu, a metriku změny scény. Tento soubor může být později použit pro vstup (přes parametr input) v dalším průchodu, aby se nemusely znovu počítat metriky nebo pro podporu dvou průchodů vfr v režimu 5.

Výchozí: "" (String)

input -

Nastavuje jméno a cestu k souboru metrik pro jeho použití jako vstupu. Tento soubor by měl být vytvořen pomocí parametru "output" při předchozím průchodu.

Výchozí: "" (String)

tfmIn -

Nastavuje jméno a cestu k výstupnímu souboru z TFM. Tato možnost je užitečná při použití hint=true a když byl vytvořen tfm výstupní soubor při předchozím průchodu. Tato možnost umožní TDecimate získat informace z tfm bez nutnosti kontrolovat snímky na údaje (hints), což může vést k výraznému urychlení pro velké cykly (dokonce malé velikosti cyklů by měly mít znatelné urychlení). Jediný případ, kdy je soubor tfmIn absolutně vyžadován je režim 5!

Výchozí: "" (String)

mkvOut -

Toto nastavuje jméno a cestu pro soubor časových kódů mkv (timecodes file), který je generován v režimech 3 a 5.

Výchozí: "" (String)

## E.) Parametry ladění/zobrazení:

debug -

Zapnutí této možnosti způsobí, že TDecimate vyšle informace o svých vnitřních stavech a rozhodnutích přes OutputDebugString(). Můžete použít program zvaný DebugView ze System Internals:

http://www.sysinternals.com/ntw2k/utilities.shtml

pro prohlížení tohoto výstupu. To může být užitečné pro nastavení prahových hodnot a sledování co se děje. Aby jste věděli co všechno zobrazuje, budete ho muset použít ;)

Při mode = 2 a debug=true, TDecimate vyplivne velikosti cyklů pro série decimací M-z-N. Tento výstup vypadá asi takto:

    [1004] mode2_cfs 0 = 7
    [1004] mode2_cfs 1 = 7
    [1004] mode2_cfs 2 = 14
    [1004] mode2_cfs 3 = 56
    [1004] mode2_cfs 4 = 392

Poslední řádek "mode2_cfs # = ##" zobrazuje největší použitou velikost cyklu (číslo za "="). Tedy když nastavíte m2PA=true, a metriky nejsou dostupné ze vstupního souboru, TDecimate čte, těchto ## snímků (392 v případě výše) vpřed ve video streamu, a musí zpracovat tu spoustu snímků v mezích každého cyklu!

výchozí: false (bool)

display -

Vysílá téměř přesně stejné informace jako debug, ale vykreslí je do snímků do levého horního rohu. To se obvykle snadněji čte a používá, než ladící (debug) výstup. Aby jste věděli co všechno zobrazuje, budete ho muset použít ;)

výchozí: false (bool)

## F.) Nadřazování:

Nadřazovací soubor může být použit pro ruční nastavení vypouštěných snímků, deklarování video/filmových částí, nebo zadání decimačních šablon na určitých rozsazích snímků.

zadání video cyklů:

Pro zadání rozsahu snímků, které má TDecimate považovat za video... nejdříve zadejte číslo počátečního snímku, pak vložte čárku (","), pak zadejte číslo koncového snímku, a nakonec vložte "v" jako specifikátor. Tento rozsah je zahrnutý, to znamená, že čísla počátečního a koncového snímku budou počítány jako video! Připomeňme si, že video části jsou uvažovány jen když je hybrid > 0!

    příklad:10,334 v

zadání filmových cyklů:

Stejně jako video ale použijte "f" jako specifikátor. Rozdíl se přitom projeví jen při použití hybrid > 0 a detekování video částí. Ve všech ostatních režimech je vše považováno pro začátek za film.

    příklad: 10,334 f

zadání vypouštěných snímků:

Pro zadání vypouštěného snímku zadejte číslo snímku, který chcete vypustit a vložte specifikátor "-" . Pokud ručně zadáte více než cycleR vypouštěných snímků na jeden cyklus, pak budou chronologicky použity ty, které přijdou nejdřív. Pokud použijete mode 2, a decimační režim, který není M-z-N , platí stejné omezení, ale místo cycleR je limitujícím vnitřně vypočtené číslo.

    příklad: 226 -

zadání decimační šablony:

Použijte specifikátor vypuštěného snímku spolu se specifikátorem zachování snímku (+) jako znaků pro umístění.

    příklad: 10,334 +-+++

V tomto příkladu bude vypuštěn každý 2.snímek ze skupiny 5 snímků počínaje snímkem 10 až po snímek 334.

Zvláštní poznámky:

1.) Pokud zadáte překrývající se údaje, pak budou použity údaje, které přijdou v ovr souboru jako poslední.

2.) Všechny čísla snímků odpovídají číslům snímků ze vstupního klipu (t.j. vstup do TDecimate). Neodpovídají číslům snímků po decimaci (to je případ častých bolestí hlavy).

3.) Můžete zadat jen cycleR vypuštěných snímků na cyklus. Pokud zadáte více, pak bude použit první smysluplně zadaný cycleR.

## G.) Seznam změn

28/09/2007 v1.0.3
- fixed "number of frames after decimation doesn't match" error being incorrectly thrown in mode 2

25/05/2007 v1.0.2
- Lots of fixes for mode 2 and non-standard framerates
- fixed problem in mode 0 decimation when using tfm hints and looking for singleton match duplicates

19/02/2007 v1.0.1
- fixed reading in tfm output files created with PP=0
- fixed a bug in destroying hints on frame output
- fixed a bug in drop/keep frame overrides in the last cycle of a video if the cycle was not full length

18/01/2007 v1.0
- nothing

07/12/2006 v0.9.12.7
- sdlim changes

26/11/2006 v0.9.12.6
+ added sdlim parameter
- expanded file input line buffers from 80 bytes to 1024 bytes
- small change to debug output format of match/d2v duplicate info lines

04/11/2006 v0.9.12.5
- switch setfps() with muldivfps() for modes 0, 1, and 5
- use FloatToFPS() from assumefps/changefps/convertfps for modes 2 and 7

22/10/2006 v0.9.12.4
+ auto detect hints on load if hint is not explicitly set to true or false by the user
+ restore hints passed through tfm when outputting frames
- fixed batch option setting arrays to fake values even if mode was not set to 5
- fixed unneeded requesting of frames under certain conditions due to some logic errors
- a few caching changes/fixes

10/03/2006 v0.9.12.3
+ Removed maximum limit on cycle value (upper limit is now the # of frames in the video)
+ batch option now disables input file crc checking (applies to all modes)
+ Minor changes to tfm match and d2v aided decimation routines
+ Display crc values in error msg when crcs don't match

07/26/2006 v0.9.12.2
+ set fps to average value of the clip in mode 5 (so duration stays the same)
+ use 6 decimal places in v2 tc output

04/09/2006 v0.9.12.1
- fixed opt parameter not be respected in the blurring functions used
when predenoise=true

03/23/2006 v0.9.12.0
+ Added clip2 parameter
+ Added hint parameter
+ Modes 0/1 fully support seeking when complete input/tfmIn files are present (tfmIn file not required if hint=false)
- fixed a few mmx/isse routines containing paddq sse2 instruction
- replace frame copy with makewritable where possible
- fixed not allowing tfmIn file with hybrid=0
- changed noblend default to true

01/24/2006 v0.9.11.9
+ added opt parameter
- fixed sse2 routines using psrldq

01/19/2006 v0.9.11.8
- don't require input and tfmIn files for mode 5

01/17/2006 v0.9.11.7
- sse2 optimizations (only used on P4)

12/20/2005 v0.9.11.6
- Fixed slow down problems with internal caching

12/19/2005 v0.9.11.5
+ internal caching for modes 0, 1, and 3
+ show cycleR value in display output
- Fixed a problem with display output wrap around for the drop frame #'s listing
- Fixed metric prebuffering computing metrics for the incorrect frames within a cycle after a seek to a random frame. It was causing a minor slow down when seeking.
- Fixed requesting frames an extra time in modes 0, 1, and 3 when no field matching hints from tfm were present in the stream.

12/18/2005 v0.9.11.4
+ wrap display=true text to multiple columns and mark frames that will be dropped with "**"
+ round to microsecond accuracy for all v1/v2 timecode output files
+ slightly more efficient metric cycle calculation

12/04/2005 v0.9.11.3
- Fixed bug in metric pre-buffering that would cause TDecimate to always throw an error when processing the last 2 cycles of a clip (introduced in v0.9.11.2).

12/03/2005 v0.9.11.2
+ speeded up some of the mmx functions that were added in the last release
+ modes 0, 1, and 3 now pre-compute metrics for the next needed cycle while delivering frames for the current cycle in order to evenly distribute cpu usage

11/21/2005 v0.9.11.1
+ optimized c metric calculation routine (~2.5-3x faster)
+ removed width restrictions on isse yuy2 scenechange detection routine
+ added mmx yuy2 scenechange detection routine
+ removed all pitch and width restrictions on isse sad/ssd block metric calculation routines
+ added mmx sad routines
+ require mmx and not isse for the assembly ssd routines because they use only mmx instructions
+ removed width restrictions on mmx denoise routines
- fixed possible divide by zero crash with vidDetect = 4

11/01/2005 v0.9.11.0
+ Added ssd parameter
+ Added vidDetect = 4 mode
+ Converted all metric storage/calculation to __int64 to prevent possible overflow on large frames
- Fixed mode 0/1 incorrect decimation of the last cycle of a clip when cycleR > 1 and the number of frames wasn't a multiple of the cycle length

10/07/2005 v0.9.10.1
+ Expanded mode 7 display/debug output
- Fixed a bug in mode 7's frame decision code

09/28/2005 v0.9.10.0
+ Added "noblend" parameter (disable 2 drop scenario blending when hybrid=0)
+ Added mode 7, an arbitrary framerate decimation mode (like mode 2), but based on some ideas from smartdecimate
+ Added denoising parameter, enables denoising of frames before calculating difference values (good for noisy sources or sources with lots of dot-crawl)

09/11/2005 v0.9.9.7
- Fixed crash when reading in tfmIn files that did not have +/- markings

09/02/2005 v0.9.9.6
- Fixed vfrDec=0 crash due to heap corruption

08/27/2005 v0.9.9.5
+ Added fast isse routine for 50/50 blending case
- Fixed a bug in hybrid=3 operation that caused it to handle certain scenechange situations incorrectly.

08/15/2005 v0.9.9.4
+ mode=1 w/ d2v info and hybrid=3 decimation improvements

08/14/2005 v0.9.9.3
+ Added hybrid=3 handling (blend convert 24p sections into 30p)
+ Added generalized isse metric calculation routine (yv12 blocksizes 16x16 or up and yuy2 blocksizes 8x8 or up now use isse when nt <= 0 instead of only the 32x32 case)

06/25/2005 v0.9.9.2
+ Added mode 6 (120fps -> vfr w/ timecodes file).

05/24/2005 v0.9.9.1
+ Added iSSE optimizations for default metric calculation path (32x32 blocks + nt<=0 + mod 16 width and height).

05/18/2005 v0.9.9
+ First cut at new mode 2 operation.
+ Added maxndl/m2PA parameters, goe with mode 2.

04/19/2005 v0.9.8.3
+ Added exPP parameter, fixes handling of interlaced frames marked in tfmIn files when PP=1 in tfm and an external post-processor is used to deinterlace the combed frames.
- Fixed crash caused by above circumstances.

03/13/2005 v0.9.8.2
+ Added missing logic to most similar decimation mode. It can now correctly handle panning->static and static->panning areas like longest string. It can also detect cycles that need two duplicates dropped. Assuming match info is present.
+ Tweaked decimation decisions for both longest string/most similar. These are the decisions that use the extra info such as match info and d2v rff info from tfm.
+ Added isse luma diff calculation routine for yuy2.
- Fixed a bug in the longest string decimation decision that utilized match info from tfm.

03/10/2005 v0.9.8.1
+ Scene change metrics are calculated using only luma, regardless of the chroma option.
+ There can only be one change above sceneThresh within the current cycle as well as the surrounding two cycles for it to be detected as a scene change (as long as cycle length
is 10 or less).
+ D2V rff duplicate info is taken into account when deciding what frames to drop, instead of only for hybrid detection.
+ When hybrid > 0 and concycle or concycleTP is greater then 1, single cycles that are detected as video and that have a scene change detected in them are treated as video.

02/19/2005 v0.9.8
+ Most similar decimation mode now takes duplicate via match info into account.
+ Match duplicate info and d2v duplicate info is shown with debug/display options.
+ rff info from d2v option in tfm is now taken into account when doing hybrid detection.
+ Increased the maximum possible cycle value to 300.

01/08/2005 v0.9.7.2
- Fixed SetCacheHints being called incorrectly and always defaulting to CACHE_ALL.
- Small change to protect against overflow with 1.0 weight when blending frames.

01/04/2005 v0.9.7.1
+ Improved longest string decimation algo by having it look for an obvious duplicate case based off matches/metrics.

01/03/2005 v0.9.7
- Fixed mode 4 display output saying "mode 3" instead of "mode 4".
+ Added chroma parameter.
+ mode 4 display and debug output now display the sceneChange metrics along with the block difference metrics.

01/02/2005 v0.9.6.2
- Fixed incorrect setcachehints call due to checking the value of the wrong argument.
+ Faster and more accurate mmx/sse2 blending routines, thanks to Leak.
+ Optimized the metric calculation routines. Exactly how much of a speed increase is dependent on the source being processed.
+ Some other optimizations and internal changes.

12/22/2004 v0.9.6.1
- Fixed a problem with timecode file generation that would occur in mode 5 with tcfv1 = true. If the cycle following a cycle that needed 2 dups removed was detected as video then
an erroneous line would be written to the file.
- Fixed not initializing mkvOutF file handle.

12/19/2004 v0.9.6
- Fixed not differentiating between c matches and deinterlaced frames when hybrid > 0 and checking for dups via matches.
- Fixed crash with debug=true and large cycles (> 50) due to too small of a string buffer.
- Changed default sceneThresh to 13.
- conCycle and conCycleTP now default to 1 when vidDetect = 3 and still default to 2 when vidDetect != 3.
+ Added handling for cycles around scene changes which need 2 dups removed.
+ Some other internal changes.

12/14/2004 v0.9.4
- Fixed problems with longest string decimation and static to panning and panning to static scene workarounds in longest string decimation.
+ added se parameter (causes mode 3 to stop early once the last actual frame is delivered).
+ mmx and sse2 blending routines now work with any width (not just mod 8 and mod 16).

12/07/2004 v0.9.3
- fixed outputting of extra timecode entries when using tcfv1=false (v2 format) in mode 3 or mode 5 and the last frame was not a cycle boundary.
- fixed incorrect formatting of the first 2 lines of the mkvOut file when in mode 3 and using tcfv1=false (v2 format).
+ added mmx and sse2 blending routines (used when hybrid = 1)

11/30/2004 v0.9.2
- fixed mishandling of the last cycle of a clip when in mode 3 and the last cycle was film.
- removed a mode 5 specific vidDetect = 3 action that wasn't suppose to be there.
+ write blockx and blocky sizes into tdecimate metric log files.
+ timecode v2 format support.

11/28/2004 v0.9.1
+ Added batch parameter.
+ Added crc checking of input/output files to make sure that a file loaded via the input parameter actually goes with the current video.

11/27/2004 v0.9
- Initial release.

## H.) Na dopracování:

- oprava chyb, pokud bude potřeba pro řadu 1.0

kontakt: forum.doom9.org nick = tritical nebo email: kes25c@mizzou.edu

`$English Date: 2007/09/28 $`

`Český překlad:15.4.2009`