DVInfo čte informace jako časový kód (Timecode) a datum nahrávky (Recording Date) v DV-AVI souboru.
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 |
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 |
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.
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