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.
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
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:
Při překrývání RGB-klipu s použitím režimů "add", "subtract" nebo "multiply", je lepší když je rozsah překrývajícího klipu 0-255, což zapne zcela tmavé oblasti bez vlivu na výsledek (namísto přidání 16 ke každé hodnotě).
Když se neprovádí převod barevného prostředí výstupu. Když se barevné prostředí (RGB vs. YUV) liší od vstupu, bude škála špatná. Pokud je pc_range true, a vstup je RGB, zatímco výstup je YUY2 - pak výsledné YUY2 má neplatný rozsah, a nikoliv rozsah podle CCIR 601.
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.
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ří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.
v2.54 | Původní vydání |
$English Date: 2008/09/28 21:34:00 $
Český překlad:12.2.2009