ConditionalReader

ConditionalReader (clip, string filename, string variablename, bool "show")

ConditionalReader vám umožní import informací z textového souboru, s různými hodnotami pro každý snímek - nebo rozsah snímků.

Parametry

Parametr Popis Výchozí hodnota
clip Vstupní klip. Nemění se, dokud nezadáte show=true. Není
filename Soubor s hodnotami proměnných, které chcete nastavit. Není
variablename Název proměnné, které chcete přiřadit informace ze souboru. Není
show Je-li nastaveno true, tak hodnota odpovídající aktuálnímu snímku bude zobrazena na tomto snímku. false

Formát souboru

Je to prostý textový soubor. Všechny separátory jsou tvořeny mezerami, a nové řádky označují nová (další) nastavení. Registr nemá hodnoty!

TYPE (int|float|bool)

V každém souboru můžete zadat pouze jeden typ dat. V danou chvíli je možné mít   float, int nebo bool hodnoty. Zadáváte je použitím příkazu TYPE . Musíte vždy začít zadáním typu dat, t.j. dokud  není určen typ dat, nic se ničemu nepřiřazuje. Jednou zadaný typ dat nelze v průběhu provádění měnit!

DEFAULT <value>

Zadává výchozí nastavení hodnot všech snímků. Tento příkaz můžete použít hned po zadání typu dat, toto nastavení se použije na všechny snímky. Můžete toto nastavení také vynechat, ale pak se musíte přesvědčit, že pro každý snímek máte přímo definované nastavení, Jinak bude chování filtru neodhadnutelné.

OFFSET <value>
Když je zadáno, posune to všechna čísla snímků o konstantní posunutí. Toto je provedeno pro všechna čísla snímků, která jsou nastavena za tímto klíčovým slovem.

<framenumber> <value>

Nastavuje hodnotu jen pro uvedený snímek<framenumber>.

R <startframe> <endframe> <value>

Nastavuje hodnotu pro zadaný rozsah snímků. Oba hraniční snímky <start-frame> a <end-frame> jsou zahrnuty v daném rozsahu. 

I <startframe> <endframe> <startvalue> <stopvalue>

Interpoluje hodnoty od <startvalue> do <stopvalue> v zadaném rozsahu snímků. Pracuje pouze pro celé (int) a desetinné (float) hodnoty. Oba hraniční snímky <start-frame> a <end-frame> jsou zahrnuty v daném rozsahu.

Typy

Jak bylo zmíněno, typ může být   float, int nebo bool

Int - celá čísla, mohou být se znakem.

Float - desetinná čísla (s desetinnou tečkou), může jim předcházet znak a mohou být následována písmeny e nebo E a desítkovým číslem jako exponentem. Například -732.103 nebo 7.12e4.

Bool může být  true, T, yes, false, F nebo no.

Příklady

Základní použití

File.txt:

Type float
Default 3.45567

R 45 300 76.5654
2 -671.454
72 -671.454

Tento soubor vrací desetinné hodnoty. Výchozí nastavení (default) vrátí 3.45567. Nicméně snímky od 45 do 300 vrátí 76.5654. A snímky 2 a 72 vrátí -671.454. 
Můžete si všimnout - následující nastavení přepisují předchozí. To ilustruje snímek '72' - nehledě na to že  se nachází uvnitř rozsahu 45-300, bude vrácena pozdější hodnota. Na druhou stranu, pokud by byl rozsah zadán až po '72  -671.454' - vrátila by se hodnota 76.5654.

Skript pro práci s tímto souborem by mohl vypadat takto:

colorbars(512,512)
trim(0,500)
ScriptClip("subtitle(string(myvar))")
ConditionalReader("file.txt", "myvar", false)

Tento skript vkládá hodnoty do proměnné "myvar", která je použita filtrem Subtitle, vyvolaný filtrem ScriptClip pro zobrazení podmíněné hodnoty jako titulku.

Všimněte si! Řádek ConditionalReader() se nachází po každém použití "myvar" ve Vašem skriptu.

Úprava překrytí (overlay)

AviSynth skript:

colorbars(512,256)
a1 = trim(0,600)
a2 = MessageClip("Text clip")
overlay(a1,a2, y = 100, x = 110, mode="subtract", opacity=0, pc_range=true)
ConditionalReader("opacity.txt", "ol_opacity_offset", false)
ConditionalReader("xoffset.txt", "ol_x_offset", false)

xoffset.txt:

Type int
Default -50

I 25 50 -50 100
R 50 250 100
I 250 275 100 250

opacity.txt:

Type float
Default 0.0

I 25 50 0.0 1.0
R 50 250 1.0
I 250 275 1.0 0.0

V zásadě definuje klíčové snímky pro x-offset (horizontální posun) a opacity (neprůhlednost). Ve snímcích 25->50 je neprůhlednost zvětšena z 0.0 na 1.0, zatímco text je posunut zleva doprava. Potom text stojí na místě od snímku 50 po snímek 250, a potom jede text dále doprava až postupně zmizí.
Je jednodušší si klip prohlédnout, než podrobně popisovat, co dělá.

Složitý ApplyRange

Jak jste si mohli všimnout používání velkého počtu volání ApplyRange() ve skriptu může vést k problémům s resoursy. Použití  ConditionalReader spolu s  ConditionalFilter může vést k efektivnímu řešení.

File.txt:

Type Bool
Default False

2 True
R 45 60 True
72 True
R 200 220 True
210 False
315 True

Uvedený skript vrátí logické hodnoty. Ve výchozím nastavení vrací False. Nicméně pro snímky 2, 45 až 60, 72, 200 až 220 a 315 kromě 210 vrátí True. Mohli jste si všimnout, že pozdější změny přepisují nastavení provedená v souboru dříve. To ilustruje snímek '210' - i když je uvnitř intervalu 200-220, bude vrácena pozdější hodnota False.

Skript pro použití tohoto souboru by mohl vypadat takto:

colorbars(512,512)
trim(0,500)
A=Last
FlipHorizontal() # Přidá komplexní řetězec filtrů
B=Last
ConditionalFilter(A, B, "MyVar", "==", "False", false)
ConditionalReader("File.txt", "MyVar", false)

To vloží hodnoty do proměnné zvané "MyVar", kterou používá ConditionalFilter k výběru mezi nezpracovanou a otočenou verzí zdroje.

Všimněte si! Řádek  ConditionalReader() je umístěn  po každém použití "MyVar" v našem skriptu.

Seznam změn:

v2.60 Přidáno OFFSET

$English Date: 2008/10/26 14:19:43 $

Český překlad:18.9.2009