Zoznámenie s programovaním videa v AviSynthu na príkladoch
Podľa prvých viet na domácom webe avisynth.org je AviSynth výkonným nástrojom pre video postprodukciu. Ale záleží, čo si predstavíme pod pojmom video postprodukcia. Hneď zo začiatku musím povedať, že nemá ambície nahradiť Media Composer alebo FinalCut. Jeho sila je v možnostiach prevodov a konverzií medzi rôznymi formátmi videa. Ďalej je schopný pracovať s rôznymi farebnými priestormi a prevádzať ich medzi sebou. Viete, že digitálny signál vzniká z analógového procesom, ktorý sa niekedy zjednodušene nazýva vzorkovanie (samplovanie). AviSynth potom vie pracovať s rôznymi typmi samplovanie a tiež ich vie prevádzať medzi sebou. Ale nečakajte od neho softvér zo seriálu CSI. Keď nejaká informácia chýba, nevymyslí si ju. Takže ak je zdrojom MPEG2 (samplovanie 4: 2: 0) a spracovávate ho v RGB (4: 4: 4), stále máte farby rovnaké ako v pôvodnom zdroji, stále majú 4 pixely vo štvorčeku vedľa seba rovnakú farebnú hodnotu. Líšiť sa môžu iba jasom. V neposlednom rade, vie AviSynth pracovať s vrstvami a vie tak pomerne ľahko napríklad vkladať rôzne "kaziznačky", Watermark, logá, ale aj štandardné podtitulky priamo do obrazu. Ukážeme si to na príkladoch ďalej.
Čo ale AviSynth nedokáže alebo čo vie horšie. Tak predovšetkým je pomerne komplikované pomocou neho vykonávať strih. Točíte Ak filmovým spôsobom, pred každým záberom klapku, dlhý pre i post roll a máte na disku tento hrubý materiál z kamery a chcete ho zostrihať, AviSynth nie je najvhodnejšie. Nie, že by to nešlo, ale je to veľmi, veľmi pracné. Je to ako by ste chceli písať ručne EDL strihovú súpisku. Tiež nemám najlepšie skúsenosti s editáciou videa, ktoré obsahuje audio. Ale možno to je len tým, že mne osobne to netrápi, pretože mám k dispozícii ProTools, kde si audio zpracovávám samostatne.
Čo k prevádzke AviSynth potrebujeme
Keďže je AviSynth vlastne len proprocesor, ktorý spracováva avs script, a výstupný video poskytuje klientovi, ktorý s ním následne nejako nakladá, nemá žiadne GUI. Ako klienta s dobrým GUI používam VirtualDub. V ňom sú ihneď vidieť výsledky spracovávaného scriptu.
Ďalším programom, ktorý sa mi osvedčil, je špecializovaný textový editor AVSP. Nielen, že farebne zvýrazňuje syntax, ale aj napovedá parametre funkcií. Má zabudované veľa veľmi užitočných funkcií, vrátane náhľadu, takže v čase písania ale aj ladenie scriptu okamžite vidíte čo robíte.
Teraz si na niekoľkých príkladoch ukážeme prácu s AviSynthem. Nebudem tu podrobne popisovať jednotlivé príkazy, na to máte veľmi dobrú nápovedu, ktorá sa spolu s AviSynth inštaluje do počítača.
Príklad 1.
Všetci to poznáme, točíme svoje deti pri hraní, bežne striháme v kamere, ale začiatok a koniec záznamu nie je úplne "úhľadný". Niekto si natáča aj farebné kalibračné pruhy a alebo dokonca aj klapku. Takže potrebujeme odstrihnúť začiatok, kde sú neostré a rozhádzané sekundy záznamu a potom i koniec, ktorý je vďaka došlé kazete nezrozumiteľný. Preto si na začiatok ukážeme veľmi jednoduchý skript, ktorý zo vstupného videa odstrihne začiatok a koniec a na začiatku vytvorí roztmívačku a na konci zatmívačku obe dlhej 12 okien.
avisource("cebr.avi") trim(74,44378) fadeio(12)
Príkazom avisource otvoríme video. Príkaz trim potom určuje prvý a posledný snímka videa. Výsledkom bude video, ktorého prvá snímka je 74 pôvodného videa a posledné 44378. A to vrátane. Posledný príkaz hovorí, že prvých a posledných 12 snímok sa postupne prelína do čiernej.
Príklad 2.
Moja kamera nie je už najmladší, je analógová a keď dôjde batéria, nevie úplne dobre nadviazať na predchádzajúci záznam. Uprostred záznamu je preto jedna technická chyba, ktorú chceme odstrániť. Súčasne je tu zmena prostredia, tak chceme spojenie vykonať prelínačky.
V tomto príklade už začneme používať premenné a napíšeme si jednoduchú funkciu Crosfade.
v = avisource("cebr.avi") function crosfade (clip v1, clip v2, int frames) { tempvbegin = v1.trim(0,v1.Framecount()-frames-1) tempvend = v2.trim(frames+1,0) v1cros = v1.trim(v1.Framecount()-frames-1, 0) v2cros = v2.trim(0,frames) maskclip = BlankClip(v1cros, color=$FFFFFF).fadeIn(frames) tempvcrossfade = v1cros.Overlay(v2cros, mask=maskclip, mode="blend") return tempvbegin+tempvcrossfade+tempvend } v1 = v.trim(16,23945) v2 = v.trim(23972,41989) Crosfade(v1,v2,20)
Ako vidíte, v tomto príklade ukladáme referencie na jednotlivé klipy, či ich časti do premenných. V premennej v je celé zdrojovej video. Preskočme časť scriptu a sústreďme sa na predposlednej dva riadky. Vidíme, že v premenných v1 a v2 sú dve časti zdrojového videa. v1 obsahuje video od snímky 16 do snímky 23945 a v2 zdroj od snímky 23976 do snímky 41989. Ak ich chceme len proste spojiť, stačí na koniec napísať riadok
v1+v2
Ale naším zámerom bolo obe časti prolnout. Na to sme si napísali funkciu, ktorá prelínanie zaistí. Volá sa Crosfade a má tri parametre. Prvým je prvá časť videa, druhým je druhá časť videa a tretím je dĺžka prelínanie v snímkach. Script vnútri funkcie urobí nasledujúce kroky. Najprv rozdelí obe časti vstupných videí na časti pred a po prolínačce (tempvbegin a tempvend) a časti, ktoré sa prekrývajú (v1cross a v2cross). Princíp prelínanie spočíva v tom, že sa akoby dajú obe videá do vrstiev na seba au horného sa postupne zmení priehľadnosť zo 100% na 0%. Priehľadnosť je daná jasom alfakanálu. Ten si vytvoríme ako biely videoklip rovnakej dĺžky ako je samotná FADER a pomocou príkazu fadein ho postupne preženú do čiernej. Takto vytvorený klip použijeme ako masku v príkaze Overlay. Na záver zostavíme všetky tri časti, začiatok, FADER a koniec, za seba a vrátime späť. Tým je funkcia hotová a jej použitie vidíme na poslednom riadku scriptu.
Príklad 3.
Na začiatok nášho videa naklíčujeme úvodný titulok. Ten je vytvorený v grafickom editore a je uložený ako 32bit TIFF s alfa kanálom.
Síce v tomto prípade budeme vkladať len jeden titulok, ale aby sme to mali jednoduchšie nabudúce a pretože to už vieme, napíšeme si na to funkciu.
function InsertTitle (clip clip, string tiffsource, int begin, int end) { subs = imagesource(tiffsource, start=0, end=end-begin, fps=clip.framerate(), pixel_type="rgb32") alpha = ShowAlpha(subs).fadeIO(12) oclip = clip.trim(begin,end).overlay(subs,mask=alpha, mode="blend") return clip.trim(0,begin-1)+oclip+clip.trim(end+1,0) }
Funkcia InsertTitle má štyri parametre. Prvým je video, do ktorého sa vkladá titulok, druhý je meno súboru s titulkom, potom nasledujú čísla snímok od ktorého do ktorého sa titulok zobrazí. Naša funkcia obsahuje nové príkazy imagesource, ktorý načíta jeden alebo sériu statických snímok a ShowAlpha, ktorá "pripravia" alfakanál z nášho titulku. Ostatné už poznáme z našej predchádzajúcej funkcie crosFade. Princíp je podobný, Vstupný video sa rozdelí na tri časti, pred titulkom, po titulku a časť do ktorej sa bude titulok vkladať. V riadku, kde sa tvoria alfakanál, je použitý už známy príkaz fadeio. Ten je tam preto, aby sa titulok postupne vylnul a na konci zas zalnul.
Na koniec scriptu potom napíšeme ešte jeden riadok, z ktorého túto funkciu zavoláme.
InsertTitle ("titulek_01.tif", 219, 394, 1)
Tak a máme hotovo. Náš videozáznam je zostrihaný, doplnený titulkom a obsahuje aj jeden drobný trik. Ale čo s ním ďalej?
Najjednoduchšie je uloženie medziprodukt videa vo formáte avi priamo vo VirtualDub. Ďalšími možnosťami je import AviSynth scriptu priamo do enkódera mpeg, avc alebo VC1. Medzi encodery, ktoré avs podporujú sú napríklad Cinema Craft Encoder, Sonic CineVision, Canopus ProCoder pod.