Overlay

Overlay (clip, clip overlay, int "x", int "y", clip "mask", float "opacity", string "mode", bool "greymask", string "output", bool "ignore_conditional", bool "pc_range" )

Overlay (Překrývání) položí dva klipy jeden na druhý s volitelným odstraněním překrývaného obrazu, a použitím různých metod překrytí. Kromě toho může být upravena průhlednost překrývajícího klipu.

Vstupem je pro overlay jakékoliv barevné prostředí, a různá barevná prostředí různých klipů nehrají roli! Vstupní klipy jsou vnitřně převedeny do obecného YUV (bez podvzorkování barevnosti) formátu, takže je možné, že filtr má výstup v jiném barevném prostředí než je ve vstupu. Také je možné vstupovat video v různých barevných prostředích, protože budou hladce převedeny. Nicméně se nedoporučuje používat overlay "pouze" pro převod barevných prostředí, protože je to pomalejší a s mírně horší kvalitou.

Obecně se všemi klipy se zachází jako by měly hodnoty 0->255. To znamená, že čísla nebudou ořezána na rozsah CCIR 601. Poté použijte pro tuto úlohu filtr  Limiter .
Masky by také měly mít hodnoty  0->255. Pro prohlédnutí rozložení barev můžete použít  Histogram v režimu  Histogram ("levels"). Pokud je vaše maska v rozsahu CCIR 601 , použijte ColorYUV(levels= "TV->PC") pro zvětšení úrovní barev.

Nedoporučuje se provádět overlay na prokládaném materiálu, pokud přesně nevíte co děláte.

Parametry:

clip
Tento klip bude základem, a překrývající obraz bude položen na jeho vršek. 

overlay
Toto je obraz, který bude umístěn nahoru na základní klip. Barevné prostředí nebo rozměry obrazu nemusí být stejné jako u základního klipu.

x & y
Tyto dvě proměnné určují umístění překrývajícího obrazu na základní klip v pixelech. Proměnná může být kladná nebo záporná.
Výchozí hodnota je 0.

mask
Toto bude použito jako průhledná maska pro překrývající obraz. Maska musí mít stejnou velikost jako překrývající klip. Ve výchozím stavu jsou z obrazu použity pouze černobílé (jasové - luma) komponenty. Obraz je tím tmavší, čím větší průhlednost bude překrývající obraz mít.
Není zde výchozí hodnota, ale je-li nespecifikováno předpokládá se hodnota 255.

opacity
Toto nastaví jak průhledný bude váš obraz. Hodnoty jsou od 0.0 do 1.0, kde 0.0 je průhledný a 1.0 je zcela nprůhledný (není-li použita žádná maska). Když je použito spolu s maskou, je pro vytvoření konečné neprůhlednosti tato hodnota násobena hodnotou masky.
Výchozí hodnotou je 1.0

mode
Mode - režim, určuje jak bude váš klip pokládán na váš obraz. 
Mode Popis
Blend Toto je výchozí režim. Když je opacity (neprůhlednost) 1.0 a není žádná maska, overlay (překrývající) obraz bude kopírován na vrch originálu. Jinak je použito obyčejné průhledné smíchání.
Add Toto přidá překrývající video do základního videa, a zesvětlí ho. Jestli se jasová složka dostává mimo standartní rozsah, mění se barvy a obraz se stává bělejším (jako u RGB).
Subtract Opak Add. Ztmavuje oblasti.
Multiply Také ztmavuje obraz, ale pracuje jinak než subtract.
Chroma Toto překryje jen barevnou informaci základního obrazu informací z překrývajícího klipu.
Luma Toto překryje jen jasovou informaci základního obrazu informací z překrývajícího klipu.
Lighten Toto zkopíruje světlostní informaci z překrývajícího klipu do základního klipu, je to v případě, že překrývající je světlejší než základní obraz.
Darken Toto zkopíruje světlostní informaci z překrývajícího klipu do základního klipu, je to v případě, že překrývající je tmavší než základní obraz.
SoftLight Zesvětlí nebo ztmaví základní klip, v závislosti na světlosti překrývajícího klipu. Pokud je překrývající klip (overlay) tmavší než klip s luma = 128, základní obraz bude ztmaven. Pokud je překrývající klip (overlay) světlejší než klip s luma = 128, základní klip bude zesvětlen. To je užitečné pro přidání stínů do obrazu. Překrývání čistě černou nebo bílou vytváří jasně tmavé nebo světlé oblasti, ale nevede to k čistě černé nebo bílé barvě v obrazu.
HardLight Zesvětlí nebo ztmaví základní klip, v závislosti na světlosti překrývajícího klipu. Pokud je překrývající klip (overlay) tmavší než klip s luma = 128, základní obraz bude ztmaven. Pokud je překrývající klip (overlay) světlejší než klip s luma = 128, základní klip bude zesvětlen. To je užitečné pro přidání stínů do obrazu. Překrývání čistě černou nebo bílou vede k čistě černé nebo k čistě bílé barvě v obrazu.
Difference Toto zobrazí rozdíl mezi klipem a overlay (překrývajícím klipem). Všimněte si, že jako u Subtract, jsou místa kde je nulový rozdíl zobrazena šedou barvou ale s jasem luma= 128 namísto 126. Pokud chcete přesný rozdíl, použijte mode="Subract" nebo přidejte ColorYUV(off_y=-128).
Exclusion Toto invertuje (vytváří negativ) obraz založený na jasu překrývajícího obrazu. Smíchání s bílou invertuje hodnoty základních barev; smíchání s černou nedělá žádné změny.

Výchozí hodnotou je Blend

greymask
Tato možnost udává zda by měla být použita barevnost (chroma) z masky pro výpočet barevné průhlednosti. Pro obecné účely by tento režim neměl být vypnut. Externí filtry jako mSharpen a Masktools jsou schopny exportovat správné mapy barevnosti.
Výchozí hodnotou je true

output
Tímto je možné zadat výstup filtru Overlay v různém barevném formátu. Možné výstupní barevné formáty jsou "YUY2", "YV12", "RGB32" a "RGB24".
Výchozí je vstupní (základního klipu) barevný formát

ignore_conditional
Donutí  filtr Overlay ignorovat jakékoliv podmíněné proměnné. Viz část "Podmíněné proměnné" pro přehled podmíněných proměnných.
Výchozí je false

pc_range
Když je nastaveno true, provede všechny vnitřní převody RGB -> YUV -> RGB a bude předpokládat, že jasový (luma) rozsah je 0 až 255 namísto výchozího rozsahu 16->235 . Doporučuje se měnit toto nastavení jen, když víte co děláte. Viz část "Úvahy o RGB" níže.
Výchozí je false

Úvahy o RGB

Tato část popíše proč filtr Overlay pracuje právě tak jak pracuje, když je dán jeden nebo více RGB zdrojů.
Jeden nebo více vstupů pro Overlay je dovoleno pro RGB-data. Nicméně, protože Overlay zpracovává materiál v barevném prostředí YUV povede to k převodu RGB na YUV. Jsou dva režimy tohoto převodu, které se přepínají pomocí parametru "pc_range". Tento parametr rozšíří rozsah YUV z 16-235 (toto je rozsah používaný všemi převodníky avisynthu) na 0-255. Je několik případů, ve kterých je zapnutí pc_range dobrým nápadem:

Výstupní RGB

Mohl by být dobrý nápad nechat výstup z Overlay na YUY2, dokonce i když je vstupní barevné prostředí RGB, protože tím se vyhnete převodu barevného prostředí zpět do RGB z YUV. Měli by jste si být ale vědomi, že váš materiál by měl být jak je uvedeno výše "přeškálován", pokud použijete pc_range = true. Můžete to opravit použitím ''ColorYUV(levels= "pc->tv")'' pro převedení zpět do rozsahu 16-235.

Vstupní RGB jako maska

Maska ve formátu RGB se může chovat trochu jinak, než bychom očekávali. Pokud vždy používáte černobílou masku, a nevypínáte ''greymask'' ("šedou masku") získaté výsledek, který očekáváte. Měli by jste si všimnout, že hodnoty klipu masky nejsou nikdy měněny do jiného rozsahu, takže automaticky budou v rozsahu 0->255, přímo kopírovány z hodnot RGB.

Použití RGB32 alfa kanálu

Overlay nikdy nepoužívá alfa kanál z RGB32 klipu. Pokud chcete vyjmout alfa kanál z RGB32 klipu můžete použít příkaz ShowAlpha pro extrahování alfa informací. Pro zachování maximální kvality se doporučuje extrahovat alfa jako RGB.

Podmíněné proměnné

Globální proměnné "OL_opacity_offset", "OL_x_offset" a "OL_y_offset " jsou čteny při zpracování každého snímku, a použity. Pro jejich změnu je možné použít FrameEvaluate. Hodnoty těchto proměnných budou přidány do každého zpracovávaného snímku originálu. Takže když zadáte "x = 100" jako parametr filtru, a globální proměnná "OL_x_offset" je nastavena 50, překrývající klip (overlay) bude umístěn na  x = 150.

Pokud používáte více filtrů Overlay v jednom klipu lze podmíněné proměnné vypnout nastavením parametru "ignore_conditional = true".

V popisu filtru  ConditionalReader najdete příklady podmíněných úprav.

Příklady

# Příprava některých zdrojů.

bg = colorbars(512,384).converttoyuy2()
text = blankclip(bg).subtitle("Colorbars", size= 92,text_color=$ffffff).coloryuv(levels="tv->pc")

# Toto překryje obraz textem ve třech různých verzích.

overlay(bg, text, x=50, y=20, mode="subtract", opacity=0.25)
overlay(text, x=50, y=120, mode="add", opacity=0.5)
overlay(text, x=50, y=240, mode="blend", opacity=0.7)

# Toto překryje yuy2clip  klipem  rgbclip za použití masky  yuy2-mask (všimněte si, že rozsah jasu (luma) masky je [0-255]).

Overlay(yuy2clip, rgbclip, mask = rgbclip.ShowAlpha("yuy2"))

# což je stejné jako

mask = rgbclip.ShowAlpha("rgb").ConvertToYUY2.ColorYUV(levels="TV->PC")
Overlay(yuy2clip, rgbclip, mask)

# což je stejné jako

mask = rgbclip.ShowAlpha("rgb")
Overlay(yuy2clip, rgbclip, mask)

# Toto bere průměr ze dvou klipů. Může to být použito například pro sloučení jednoho klipu zachyceného dvakrát a tím snížit šum. Diskuzi k tomuo tématu najdete [zde]. Příklad skriptu (samozřejmě se musíte přesvědčit, že se snímky obou klipů shodují, jinak v případě nutnosti použijte DeleteFrame ):

clip1 = AviSource("F:\shakira-underneath_your_clothes1.avi")
clip2 = AviSource("F:\shakira-underneath_your_clothes2.avi")
Overlay(clip1, clip2, mode="blend", opacity=0.5)

# Použije modré (nebo jinou barvu) pozadí (blue.jpg je modrý snímek překrytý titulky v černém obdélníku) jako masku. Černý obdélník obsaující titulky bude viditelný ve zdrojovém klipu (což je zde ColorBar):

testcard = ColorBars()

# dostane se modrá maska (stejně modrá jako je v ColorBars: R16 G16 B180)
maskclip = BlankClip(testcard,  color= $0f0fb4)

#Příklad souboru titulků s modrým pozadím jako je výše
subs = ImageSource("F:\TestClips\blue.jpg").ConvertToRGB32

maskclip = ColorKeyMask(subs, $0f0fb4, 60)

Overlay(testcard, subs, mask=ShowAlpha(maskclip), mode="blend", opacity=1)

Je zde použita tolerance 60 protože modrá není zcela jednotná. Poblíž černých obdélníků je modá dána poměrem barev R23 G22 B124. Pravděpodobně kvůli kompresi blue.jpg.

# Posune bod červené (nebo jiné barvy) v klipu za použití ConditionalReader (dot.bmp je červený bod na černém pozadí):

a1 = ColorBars().Trim(0,399)
a2 = ImageSource("F:\TestClips\dot.bmp").ConvertToRGB32

# a2.GreyScale vrací šedý bod na černém pozadí; Levels překlápí bod do bílé
mask_clip = Mask(a2, a2.GreyScale.Levels(0, 1, 75, 0, 255))
Overlay(a1, a2, mask=ShowAlpha(mask_clip), y=0, x=0, mode="blend", opacity=1)

ConditionalReader("xoffset.txt", "ol_x_offset", false)
ConditionalReader("yoffset.txt", "ol_y_offset", false)

Vytvořte soubory xoffset.txt obsahující polohu x a yoffset.txt obsahující polohu y pohybujícího se bodu (viz. ConditionalReader pro více informací), a vložte ho do stejné složky jako váš skript:

xoffset.txt

Type int
Default -50

R 0 100 20
I 100 200 20 250
R 200 300 250
I 300 400 250 400
yoffset.txt

Type int
Default -50

R 0 100 20
I 100 200 20 350
R 200 300 350
I 300 400 350 40

Bod se pak bude pohybovat tímto způsobem: (20,20) -> (250,350) -> (400,40). Nb, toto je také možné udělat filtrem Animate.

Seznam změn:

v2.54 Původní vydání

$English Date: 2008/09/28 21:34:00 $

Český překlad:12.2.2009