DVInfo

Přehled

autor: WarpEnterprises
verze:  
stáhnout: http://www.avisynth.org/warpenterprises/
kategorie: Různé pluginy
požadavky:  

Popis

DVInfo čte informace jako časový kód (Timecode) a datum nahrávky (Recording Date) v DV-AVI souboru.

Syntaxe

DVInfo (clip, string "filename", string "output", int "x", int "y", string "font", int "size", int "text_color", int "halo_color", string "rec_format", 
string "tc_format", bool "show_error", float "threshold", int "autoframes"
)

DVInfo otvírá DV-AVI soubor (Typ-1 a Typ-2, legacy a openDML > 4GB jsou podporovány) a čte časový kód a časové značky snímku, který prochází. Pozor: NENAČÍTÁ video nebo audio obsah AVI, to musí být provedeno PŘÍMO PŘEDTÍM pomocí AviSource!

Časový kód a čas nahrávky jsou pak vytištěny do snímku jako by jste použili filtr Subtitle() a parametry x, y, font, size, text_color, halo_color jsou předávány právě do Subtitle.

"Run-time" proměnné "current_frame", "tc_time", "rec_time" jsou nastaveny tak, že je můžete použít ve výrazu (expression) v "output" (pracuje to podobně jako u ScriptClip, na více podrobností se podívejte do dokumentace).

Můžete nastavit generovaný časový formát pomocí parametrů rec_format a tc_format.

2003-12-16:Při "threshold">0 je zapnut výstup informace, jestliže je rozdíl data nahrávky aktuálního a předchozího snímku větší než "threshold" v sekundách. Po projetí počtu "autoframes" snímků je výstup vypnut. Tak dostanete údaje o nahrání jen při změnách scén.
Pozor: použije se poslední zpracovaný (processed) snímek, což není předchozí snímek při vyhledávání (seekování) v klipu (pracuje jen při lineárním přehrávání).
S např. threshold=0.5 a autoframes=2 můžete zobrazit údaje každou sekundu v délce 2 snímků.

2005-12-23: Můžete použít "fix_format" ke spuštění vysílání v pevných intervalech (t.j. každou hodinu). Tento formátový řetězec má stejnou syntaxi jako jiné, ale je použit jen vnitřně, pokud výsledek jeho změní má stejný efekt jako threshold. T.j. fix_format = "%H%M" zobrazí formát zadaný rec_format a tc_format pro autoframes snímků při každé změně minuty.

Nejlépe se to vysvětlí na příkladu:

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file = "c:\myprojects\type2.avi" # tak nebudete muset psát jméno souboru dvakrát

Avisource(file)          # Otevře obsah videa

DVInfo(file, "rec_time") # čte časové značky záznamu
                         # tiskne je ve výchozím formátu do proměnné "rec_time"
                         # vyhodnotí tento výraz (který sestává jen z jedné proměnné)
                         # zobrazí výsledek použitím výchozích parametrů Subtitle

Můžete dokonce vynechat "rec_time", protože je to výchozí hodnota pro "output".

DVInfo(file)   # udělá to samé jako výše


Toto nebude pracovat (více než jeden soubor):

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"
file2 = "c:\myprojects\type2b.avi"

Avisource(file1)+Avisource(file2)  #Tohle je už OK

DVInfo(file1, "rec_time")  # ale nyní se DVInfo snaží číst ve file1 čísla snímků z file2!
DVInfo(file2, "rec_time")  # a naopak

Místo toho to napište takto:

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"
file2 = "c:\myprojects\type2b.avi"

Avisource(file1).DVInfo(file1, "rec_time") + Avisource(file2).DVInfo(file2, "rec_time")
# teď čte každý DVInfo svůj vlastní soubor

Toto nebude pracovat (použití Trim):

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"

Avisource(file1)
Trim(1000,2000)
DVInfo(file1, "rec_time")  # nyní DVInfo dostává špatná čísla snímků

Místo toho to napište takto:

LoadPlugin("c:\myprojects\dvinfo\release\dvinfo.dll")

file1 = "c:\myprojects\type2a.avi"
file2 = "c:\myprojects\type2b.avi"

Avisource(file1).DVInfo(file1, "rec_time") + Avisource(file2).DVInfo(file2, "rec_time")
# teď čte každý DVInfo svůj vlastní soubor


Více příkladů

Můžete upravit časový formát (pro podrobnosti viz. AviSynth dokumentace >> Syntaxe >> funkce Time ):

DVInfo(file, "rec_time", rec_format="%H:%M:%S") # vytiskne jen čas bez data

nebo

DVInfo(file, "rec_time", rec_format="%A, %H:%M:%S") # vytiskne plné jméno dne v týdnu plus čas

tc_time drží pozici na pásce v hodinách, minutách, sekundách a snímcích.
Vložím snímky do pozice dne v měsíci, to je něco nečistého, ale můžete jednoduše zobrazit číslo snímku použitím symbolu frmátu "month":

DVInfo(file, "tc_time", tc_format="%d") # vytiskne jen číslo snímku

Můžete vložit komplexnější výraz do "output":

DVInfo(file, "tc_time + chr(32) + rec_time + chr(32) + current_frane")
# zobrazí časový kód, čas záznamu a číslo snímku, vše oddělené mezerami

Pokud chcete přidat další text:

text = "HALLO WORLD "
DVInfo(file, "text + rec_time") # zobrazí "HALLO WORLD " a čas záznamu

Musíte to udělat tímto způsobem, protože zde není možné vložit uvozovky do řetězce.

Jak vidíte, můžete v "output" použít každou skriptovou proměnnou.

Vytištění data záznamu jen ve změnách scény:.

DVInfo(file, threshold=1)   # vytiskne to v trvání 25 snímků pokud je rozdíl >1 sekunda

Práce s chybami

Pokud je číslo žádaného snímku větší než počet snímků (to by se nemělo stát), do rec_time a tc_time se vloží chybová zpráva.
Pokud nelze najít časový kód nebo časové značky nahrávky, nebo když je tam jiná chyba čtení, vloží se do rec_time a tc_time chybová zpráva.

Tyto chybové zprávy jsou potlačeny, pokud použijete show_error = false.

Pokud nemůže být AVI otevřeno, nebo výsledek z "output" není řetězec, vyskočí chybová zpráva AviSynthu.


Technická poznámka

Pro čtení AVI-dat používám kód z kino od Arne Schirmachera.
Upravil jsem ho tak, že pracuje s openDML - soubory > 2GB, kompiloval ve Win32 a odebral všechny jiné funkce, které se netýkali čtení.

Ernst Peché, 2003-12-16

$English Date: 2004/08/13 21:57:25 $

Český překlad:28.4.2009