1. O překladu
2. Jak začít?
3. Příklady
- Příklad 1: Zpracování kvalitně nahraného (zachyceného filmu) z TV
- Příklad 2: Zpracování mírně zašumělého nahraného filmu z TV
- Příklad 3: Zpracování více zašumělého nahraného filmu z TV včetně odstranění prokládání
- Příklad 4: Zpracování filmu nahraného z TV do více souborů
- Příklad 5: Silné odšumění pomocí RemoveDirt
- Příklad 6: Zpracování DVD a DVB videa
4. Odstraňování prokládání
- Příklad 7: Odstranění prokládání u videí s posunutými poli pomocí filtru Telecide
- Příklad 8: Odstranění prokládání u videí s posunutými poli pomocí vnitřních funkcí Avisynthu
5. Jiné úpravy videa
6. Co dál se skriptem?
7. Krátké odbočení ke kompresi
8. Malý slovník pojmů
9. Odkazy
10. Licence
11. Závěrem
AviSynth je jeden z nejlepších programů pro zpracování videa (a také audia), ale poněkud jiný než většina ostatních programů. Nemá GUI tzn. že nemá žádná dialogová okna, na ploše se po instalaci neobjeví ikona a nejde ho proto spustit a ovládat pomocí intuice, jako jiné programy. Proto je u něj velmi důležitá a nezbytná dokumentace, která se nainstaluje spolu s vlastním programem a je přístupná v menu Start/Programy/AviSynth 2.5. Tato dokumentace obsahuje úplný přehled všech funkcí a jejich parametrů, včetně mnoha příkladů. Je dost rozsáhlá a pro snadné používání programu je potřeba, aby jí uživatel rozuměl. Proto vznikl tento překlad. Nemusí být vždy úplně přesný, ale je tu hlavně proto, aby přiblížil AviSynth českým uživatelům, kteří neumí anglicky.
Do češtiny je z dokumentace přeloženo prakticky vše co se týká AviSynthu samotného, tzn. včetně vnitřních filtrů. Překlad dokumentace externích filtrů je už nad mé síly. Přeložená dokumentace bude také ke stažení na stránkách www.cestiny.cz . Jestliže se vám bude chtít můžete tam poslat svůj překlad vašeho oblíbeného externího filtru.
To základní se dozvíte v kapitole Začínáme , kde je popsáno jak vlastně AviSynth pracuje. Zde shrnu jen to, že stačí vytvořit skript t.j. krátký textový soubor (například v poznámkovém bloku, PSPadu, a jiných textových editorech kromě Wordu) a přepsat u něj příponu na .avs . Je-li skript správně napsaný a vy máte nainstalované potřebné kodeky, půjde otevřít ve VirtualDubu a videopřehrávačích stejně, jako by to bylo video.
Skript se skládá z funkcí různých filtrů, například pro načtení videa, střih videa, oříznutí obrazu videa, zvětšení/zmenšení, odšumění,... . Filtry mohou být vnitřní - ty jsou součástí programu a nebo externí (pluginy - připojované moduly), které je potřeba stáhnout z internetu a vložit jejich dll soubory do složky plugins v nainstalované složce AviSynthu. Při používání filtrů je potřeba řídit se dokumentací daného filtru. Návod na použití AviSynthu s praktickými ukázkami najdete taky na těchto stránkách http://www.jech.webz.cz/avisynth.php .
AviSynth nabízí obrovské možnosti ve zpracování videa a to i značně pokročilé. Upravit lze téměř vše. Skripty mohou být také velmi složité a dlouhé. Ale běžný uživatel, který si chce sestříhat, trochu vylepšit a zkomprimovat nahrané video z TV karty a nebo který si chce převést film z DVD do MPEG4 pomocí DivX nebo Xvid kodeků, bude používat většinou jen pár funkcí a jeho skripty budou velmi jednoduché. Budou doslova na pár řádků. Jakmile je pak skript hotový, dá se použít pro zpracování dalších videoklipů, stačí v něm jen upravit hodnoty pro konkrétní video nebo audio.
Abych vám usnadnil začátek, uvedu zde pár příkladů skriptů které jsem použil pro zpracování svých videí. V drtivé většině si vystačím s několika vnitřními filtry (AviSource, Mpeg2Source, Trim, ++, Crop, některýResize, AudioDub, DelayAudio, Tweak, SeparateFields, Weave) a několika externími pluginy (KernelDeint, TemporalCleaner, MipSmooth, DGDecode, RemoveDirt, FluxSmooth, Decomb). Externí pluginy, které zde uvádím nechci protěžovat, jsou zde jen proto, že jsem si na ně zvykl a používám je při zpracování svých videí. Tady na nich ukážu jak se dá odstranit prokládání z TV pořadů (KernelDeint nebo jeho rychlejí varianta LeakKernelDeint, Decomb), nebo jak s jejich pomocí snížit šum (TemporalCleaner, MipSmooth, RemoveDirt, FluxSmooth). Po seznámení s AviSynthem si i vy najdete své oblíbené pluginy podle vašich požadavků na kvalitu a rychlost zpracování. Zde je seznam externích pluginů (filtrů) rozdělený podle oblasti použití a zde je (úplnější) abecední seznam externích pluginů. Oba obsahují stručné popisy použití jednotlivých filtrů. Další seznam externích filtrů rozdělený podle funkce najdete na stránkách AviSynthu. Externích pluginů k AviSynthu je v přiloženém abecedním seznamu téměř 300!
Ještě dodám, že AviSynth zpracovává video jak ve formátech RGB (RGB24, RGB32) tak i ve formátech YUV (YUY2, YV12). Díky tomu a také proto, že jeho kód je vysoce optimalizovaný se jedná o jeden z nejkvalitnějších a nejrychlejších programů svého druhu.
Zde ukážu v několika příkladech skripty, které jsem použil ke zpracování svých videí. Začnu od jednodušších. Pokud budete chtít použít stejný skript stačí ho zde jen vybrat, zkopírovat do schránky, vložit do poznámkového bloku a upravit cestu se jménem videa podle vašeho konkrétního. Kromě vnitřních filtrů ve skriptech používám také několik externích filtrů. Jsou to KernelDeint (můžete použít jeho optimalizovanou a tedy rychlejší verzi LeakKernelDeint), TemporalCleaner, MipSmooth, DGDecode, Telecide, RemoveDirt. Aby jste je mohli použít musíte si je stáhnout a vložit do složky plugins v nainstalované složce AviSynth. Ještě dodám, že rozlišení zdrojových souborů bylo 768x576 (720x576).
Vytvořil jsem tento skript: Prelet nad kukaccim hnizdem.avs
Avisource ("d:\Filmy\Prelet nad kukaccim hnizdem_MJPG.avi") Trim (5128,197550) Crop(10,2,-18,-4) TemporalCleaner() LanczosResize(720,540)
Ještě jednou a s rozborem použitých filtrů.
Avisource ("d:\Filmy\Prelet nad kukaccim hnizdem_MJPG.avi") # Pomocí AviSource načtu nahrané video. # V uvozovkách se uvede celá cesta a název souboru videa. Trim (5128,197550) # Protože jsem měl nahrávání načasované, # mám ve videu konec předchozího a začátek # následujícího pořadu. Pomocí filtru Trim # vyberu (vystřihnu) jen potřebnou část snímků. # K určení míst střihu je nejlepší VirtualDub, # který zobrazuje čísla zobrazovaných snímků. Crop(10,2,-18,-4) # Filtr Crop ořízne okraje snímku o zadaný počet řádků # nebo sloupců pixelů v tomto pořadí: levý, horní, # pravý, spodní (pravý a spodní jsou záporné). # K určení velikosti oříznutí je opět nejlepší # VirtualDub s jeho filtrem "null transform". TemporalCleaner() # TemporalCleaner provede časové (dynamické) odšumění obrazu. # Používám ho prakticky vždy, protože trochu usnadní kompresi, # a nerozmazává detaily, není totiž příliš silný. Jiný odstraňovač # šumu už nepoužiju, protože video je nahrané kvalitně. # To, že za názvem následují prázdné závorky znamená, že se # použije výchozí nastavení filtru. Podobně je to také u ostatních filtrů. # Pokud budete zesilovat intenzitu, pozor na rozmazání pohybu (duchy)! # Místo TemporalCleaneru můžete zkusit např. plugin FluxSmooth nebo TTempSmooth. LanczosResize(720,540) # LanczosRezize upravuje velikosti snímku. Zde používám klasický poměr # stran 4:3 (neboli 1,33). Zde použitý poměr tomu přesně odpovídá. Často # se také pro rozměry (zvlášť pro kompresi do MPEG 4) používají násobky 8, # pak by byly rozměry takovéto : 720,544. Bylo to proto, že je takové # vyžadovali kodeky. U Xvidu jsem ale s 540 problém neměl. # Kromě LanczosResize existují ještě další metody změny velikosti snímku # a to BicubicResize a BilinearResize. Lanczos je nejostřejší a je nejlepší # pro zvětšení obrazu. Bilinear zase vyhlazuje a je vhodný pro výraznější # zmenšování. Bicubic je někde mezi.
Vytvořil jsem tento skript: Leon.avs
Avisource ("d:\Filmy\Leon_MJPG.avi") Trim (3892,41332)++Trim(50109,89300)++Trim(100458,138170)++Trim(149282,191020) Crop (12,94,-12,-90) TemporalCleaner() MipSmooth (preset= "movieHQ") LanczosResize (720,368)
Ještě jednou a s rozborem použitých filtrů.
Avisource ("d:\Filmy\Leon_MJPG.avi") # Pomocí AviSource načtu nahrané video. Trim (3892,41332)++Trim(50109,89300)\ # Funkcí Trim opět vyberu ty části, které chci. ++Trim(100458,138170)++Trim(149282,191020) # Funkcí ++ spojím jednotlivé části vystříhaného videa. # Tolik střihů je zde kvůli třem reklamám v průběhu filmu. # Obrácené lomítko na konci řádku znamená, že příkaz # nekončí, ale pokračuje na dalším řádku. Crop(12,94,-12,-90) # Pomocí Crop oříznu obraz. TemporalCleaner() # Provádím časové (dynamické) odšumění obrazu. MipSmooth (preset= "movieHQ") # Provádím také prostorové (statické) odšumění obrazu, # které je účinnější než časové, ale rozmazává detaily. # přednastavení "movieHQ" představuje ale poměrně citlivé odšumění # bez velkého rozmazání. # MipSmooth použije i mírné časové vyhlazení, takže by jste mohli # TemporalCleaner ze skriptu odstranit, nebo parametry časového # (temporal) nastavení u MipSmooth nastavit na nulu. Ze zkušenosti ale # vím, že se nic hrozného nestane, když zůstanou oba ve funkci. # Místo MipSmooth můžete zkusit použít např. plugin VagueDenoiser. LanczosResize(720,368) # Pomocí LanczosRezize upravím rozměr snímku.
V tomto případě jsem pomocí KernelDeint odstraňoval prokládání, ne však z celého videa, ale jen z jeho úvodní části, protože ve zbytku videa se prokládání už neobjevovalo.
Vytvořil jsem tento skript: Okno do dvora.avs
Avisource ("d:\Filmy\Okno do dvora_MJPG.avi") video_1 = Trim (270,3249) video_1_deint = Kerneldeint(video_1, order=1) video_2 = Trim (3250,52545)++Trim (54857,108519)++Trim (111070,166222) Okno_do_dvora = video_1_deint++video_2 Crop(Okno_do_dvora,10,2,-14,-10) TemporalCleaner(ythresh=6,cthresh=12) MipSmooth(preset="LQ") LanczosResize (720,540)
Ještě jednou a s rozborem použitých filtrů.
Avisource ("d:\Filmy\Okno do dvora_MJPG.avi") # Pomocí AviSource načtu nahrané video. video_1 = Trim (270,3249) # Vytvořím proměnnou video_1. Je to úvodní část videa, ve # které se vyskytuje prokládání. video_1_deint = Kerneldeint(video_1, order=1) # Vytvářím další proměnnou, která obsahuje video_1 # s odstraněným prokládáním pomocí filtru KernelDeint. # U KernelDeint musí být zadán parametr order (pořadí polí), # které je pro nás (systém PAL) rovno 1. video_2= Trim (3250,52545)++Trim (54857,108519)\ # Vytvořím další proměnnou, která obsahuje zbytek videa (bez artefaktů prokládání). ++Trim (111070,166222) Okno_do_dvora = video_1_deint++ video_2 # A teď vytvořím poslední proměnnou, která spojuje obě části videa, # tedy první část s odstraněným prokládáním a druhou část, ve které # žádné artefakty prokládání nebyly. Crop (Okno_do_dvora, 10,2,-14,-10) # Pomocí Crop oříznu obraz u proměnné Okno_do_dvora (t.j celého # sestříhaného videa, které už neobsahuje prokládání). Prvním parametrem # zde musí být proměnná (klip) Okno_do_dvora, protože chci # zpracovat jen sestříhané a prokládání zbavené video z proměnné Okno_do_dvora. # Kdybych nezadal žádnou proměnnou, filtr Crop by zpracoval celý a neupravený # zdrojový soubor Okno do dvora_MJPG.avi. TemporalCleaner(ythresh=6,cthresh=12) # Provádím časové (dynamické) odšumění obrazu. Filtr bude zpracovávat výstup # z předchozího filtru Crop, který už zpracoval video sestříhané # a proto už zde žádnou proměnnou neuvádím. Naopak, kdybych zde použil jako první # parametr např. proměnnou Okno_do_dvora, vynechal bych tím filtr Crop. MipSmooth (preset= "movieLQ") # Provádím silnější časově-prostorové odšumění obrazu. LanczosResize(720,540) # Pomocí LanczosRezize upravím rozměr snímku.
Pro ty, kterým nebyla práce s proměnnými příliš jasná a zamotali se do toho, zde uvedu jiný způsob jak udělat totéž. Vytvořím dva skripty. Každý bude zpracovávat jen jednu část původního videa různými sadami filtrů.
Tedy pro první část videa ve které chci odstranit také prokládání bude skript s názvem např. Okno do dvora_1.avs vypadat:
Avisource ("d:\Filmy\Okno do dvora_MJPG.avi") Trim (270,3249) Kerneldeint(order=1) Crop(10,2,-14,-10) TemporalCleaner(ythresh=6,cthresh=12) Mipsmooth(preset="LQ") LanczosResize (720,540)
Pro druhou část videa ve které prokládání odstraňovat nemusím bude skript s názvem např. Okno do dvora_2.avs vypadat takto:
Avisource("d:\Filmy\Okno do dvora_MJPG.avi") Trim(3250,52545)++Trim(54857,108519)++Trim(111070,166222) Crop(10,2,-14,-10) TemporalCleaner(ythresh=6,cthresh=12) Mipsmooth(preset="LQ") LanczosResize (720,540)
Oba skripty můžeme spojit do jednoho výsledného skriptu s názvem Okno do dvora.avs velmi jednoduše:
Avisource ("d:\Filmy\AVS Skripty\Okno do dvora_1.avs")++\ Avisource ("d:\Filmy\AVS Skripty\Okno do dvora_2.avs")
Chci zde popsat případ kdy jsem omylem přerušil nahrávání filmu z TV karty během reklamy a po jejím skončení jsem nahrál zbytek filmu do druhého souboru.
Vytvořil jsem tento předběžný skript: Obecna skola.avs
Avisource ("d:\Filmy\Obecna skola_1_MJPG.avi")++\ Avisource ("d:\Filmy\Obecna skola_2_MJPG.avi")
Tím jsem pouze načetl a spojil oba soubory za sebe. Po otevření tohoto skriptu ve VirtualDubu si najdu místa střihů a zapíšu čísla příslušných snímků. Jde o to, že zde budou čísla snímků u druhého souboru pokračovat za snímky prvního souboru. Kdyby jste otevřeli druhý soubor ve VirtualDubu samostatně, začínaly by od 0 a nenavazovaly by tak na první soubor.
Konečný skript pro zpracování videa pak vypadal takto: Obecna skola.avs
Avisource ("d:\Filmy\Obecna skola_1_MJPG.avi")++\ Avisource ("d:\Filmy\Obecna skola_2_MJPG.avi") Trim (9550,43367)++Trim (55453,90850)++Trim (102793,137108)++Trim (144554,185261) Crop(10,32,-18,-44) TemporalCleaner() MipSmooth (Spatial= 4,\ Temporal= 5,\ Spatial_Chroma= 5,\ Temporal_Chroma= 7,\ Scenechange= 2.0,\ Method= "SuperSoft",\ Downsizer= "Bilinear",\ Upsizer= "Bilinear",\ Scalefactor= 0.85,\ Weigh = true) LanczosResize(720,472)
Vše ostatní je už obdobou z předchozích příkladů. Liší se jen zápis filtru MipSmooth. Zde je jsou vypsány všechny parametry tohoto filtru. Hodnoty všech parametrů odpovídají přednastavení preset = "movieHQ", tzn. že zápis MipSmooth z tohoto skriptu je shodný s MipSmooth (preset = "movieHQ"). V takovémto podrobně vypsaném nastavení filtru si pak můžete podle libosti upravovat všechny parametry. Nebo můžete zapsat filtr normálně s nějakým přednastavením a k tomu dopsat některý z parametrů, který chcete upravit s vaší hodnotou. Já si obvykle pohrávám jen s parametrem Scalefactor. Čím je nižší, tím je vyhlazení (a rozmazání detailů) silnější a čím je vyšší, tím je účinek filtru slabší. Lze použít i hodnoty větší než 1 (ale ne přesně 1).
Při slabším odstraňování šumu rozdíly mezi jednotlivými odšumovači tolik nevynikají. Při odstraňování silného šumu z videa se už ale často začínají objevovat různé artefakty a zjistí se na to některé filtry nestačí ani svojí silou ani výslednou kvalitou. Nedávno jsem z VHS kazety nahrával jeden film, který byl poměrně zašumělý už na této kazetě. Navíc to byla televizní inscenace a proto byly snímky prokládané. Odstraňování prokládání šum často ještě více zesiluje a proto jsem hledal silný, kvalitní a pokud možno i rychlý filtr pro odšumění. Narazil jsem na filtr RemoveDirt který mě mile překvapil. Je to skriptová funkce, která využívá několik pluginů. Ukážeme si na jak se taková funkce použije.
RemoveDirt potřebuje ke své práci několik pluginů - RemoveDirt, RemoveGrain a dále pak souborů AvsRecursion.dll a msvcr71.dll , které patří do složky system32. Vše je uvedeno v dokumentaci filtru.
Skript: Kralovsky zivot otroka.avs
Avisource ("x:\Kralovsky zivot.avi") Trim(147,107551) LeakKernelDeint(order=1,threshold=5) #odstranění prokládání FluxsmoothT(temporal_threshold=7) #předběžné časové odšumění function RemoveDirt(clip input, bool "_grey", int "repmode") #definování skriptové funkce RemoveDirt { #tímto se funkce ještě nespouští _grey=default(_grey, false) repmode=default(repmode, 16) clmode=17 clensed=Clense(input, grey=_grey, cache=4) sbegin = ForwardClense(input, grey=_grey, cache=-1) send = BackwardClense(input, grey=_grey, cache=-1) alt=Repair(SCSelect(input, sbegin, send, clensed, debug=true), input, mode=repmode, modeU = _grey ? -1 : repmode ) restore=Repair(clensed, input, mode=repmode, modeU = _grey ? -1 : repmode) corrected=RestoreMotionBlocks(clensed, restore, neighbour=input, alternative=alt, gmthreshold=70, dist=1, dmode=2, debug=false, noise=10, noisy=12, grey=_grey) return RemoveGrain(corrected, mode=clmode, modeU = _grey ? -1 : clmode ) } RemoveDirt() #výzva RemoveDirt - nyní se chce aby pracovala Tweak(sat=1.1) #mírné přidání sytosti barev Crop(8,0,-24,-8) LanczosResize(720,540)
Odstranění prokládání je zde umístěno před odšumění. Můžete se setkat s názorem, že je lepší provést odšumění před odstraněním prokládání. Mě se víc líbil výsledek při tomto pořadí. Zkuste posunout LeakKernelDeint za Removedirt, srovnejte výsledky a rozhodněte se podle svého vkusu.
Aby jste nemuseli vždy vypisovat celou definici funkce RemoveDirt v každém skriptu kde ji chcete použít, můžete si ji samotnou (jen definici bez výzvy) uložit do
samostatného souboru s příponou .AVSI a vložit do složky plugins k ostatním automaticky načítaným pluginům. Skripty s příponou .AVSI se budou také automaticky načítat, takže ve vašem
skriptu pro zpracování videa pak stačí jen vyzvat funci bez jejího definování. Další způsob jak načítat takovou skriptovou funkci uloženou samostatně je, uložit si někam její
definici do souboru s příponou .AVS a pak ji před její výzvou v nějakém skriptu importovat pomocí vnitřní funkce Import
.
Silných odšumovačů můžete najít samozřejmě více. Pokud vám jde především o kvalitu, tak k nejlepším patří ty které pracují ve frekvenční oblasti, jako
FFT3DFilter
nebo jeho analog FFT3DGPU
, který využívá výpočetní výkon grafických karet. Další takový odšumovač je dfttest
.
Tyto filtry jsou ale také úměrně pomalejší.
Jestli máte vícejádrový procesor, můžete zkusit urychlit některé filtry použitím filtru MT
, který umožní maximální využití výkonu vícejádrových procesorů.
Pokud máte DVD film nebo film nahraný z digitální TV (DVB) a chcete ho zkomprimovat některým MPEG4 kodekem (DivX, Xvid), musíte film zpracovat nejdříve programem DGIndex (součást balíku DGMPGDec), ve kterém po načtení příslušných VOB-ů, nebo mpg-ů které chcete zpracovat, uložíte projektový soubor s příponou .d2v . Při ukládání ještě můžete zvolit demux audio stop. DGIndex zpracovává video dekodérem DGDecode.dll. Stejný soubor by jste měli vložit do složky pluginů AviSynthu, protože s jeho pomocí pak video v AviSynthu otevřete. Pro načtení videa sice použijete funkci Mpeg2Source, ale ta je jednou z funkcí právě pluginu DGDecode.
Skript pro načtení DVD videa (bez zvuku), které nebude stříháno může vypadat takto: Indiana Jones a chram zkazy.avs
Mpeg2source ("d:\Indiana Jones a chram zkazy\VTS_02_1.d2v") Crop(2,72,-2,-72) LanczosResize (720,304)
Pokud budete film stříhat, je pro zachování synchronizace nejlepší když spolu s videem budete načítat a stříhat současně i audio. Demuxované audio (zpravidla ve formátu ac3 nebo mp2) je dobré převést na formát WAV, protože takové audio se nejlépe načítá a nejlépe se sním pracuje. Při načítání audia je také dobré uvést příslušnou hodnotu zpoždění (delay), která je uvedena v názvu souboru demuxovaného audia. Video a audio spojíme pomocí funkce AudioDub viz následující skript.
Skript pro načtení videa nahraného z DVB-T (se zvukem), které bude stříháno může vypadat takto: Americka noc.avs
Video=Mpeg2source ("y:\Video\Americka noc.d2v") #načtení videa Audio=WAvsource("y:\Video\Americka noc Tc0 L2 2ch 48 192 DELAY -390ms.wav") #načtení audia, v externím programu (např. LameXP jsem ho převedl na wav) AudioDub(video, audio) #spojení videa a audia DelayAudio(-0.390) #nastavení zpoždění audia v sekundách - beru ho ze #zpoždění je uvedena v názvu souboru audia (DELAY -390ms) Trim(9600,176116) #střih klipu (videa i zvuku) LanczosResize(720,400)
Filmy na DVD mívají dobrou kvalitu a často není potřeba použít filtry pro vyhlazení nebo odstranění prokládání, zvlášť u nových filmů. Jinak samozřejmě můžete v případě potřeby použít i jiné filtry jako v předchozích příkladech. Zvláštní pozornost věnujte rozměrům snímků u filtru Resize. U DVD bývá totiž šířka násobena určitým koeficientem, který se liší při poměru stran 4:3 a 16:9. Jak si vše pohlídat je popsáno zde.
Prokládání, nebo také roztřepení obrazu, je velmi viditelný artefakt ve videu. Úzce souvisí s televizním vysíláním, protože televizní kamery zaznamenávají jeden snímek (rozdělený na dvě pole) ve dvou časových okamžicích. Televize pak snímky zobrazí správně, protože je vysílají po jednotlivých polích, ale počítačové monitory zobrazují vždy celý snímek, tedy obě části (pole) najednou. V pohyblivých scénách je pak vidět roztřepený obraz. Podrobnější popisy o tom jak vzniká a vypadá najdete zde a nebo zde.
Jsou vlastně tři možnosti jak video zpracovat. Zachovat prokládání, odstranit prokládání při zachování původní frekvence snímků a odstranit prokládání při vytvoření dvojnásobné frekvence snímků. Předpokládám, že (například po přečtení výše uvedených odkazů) už víte v jaké podobě budete chtít video mít. Každá metoda má svoje výhody a nevýhody. Nejuniverzálnější je odstranit prokládání při zachování původní frekvence snímků. Tuto metodu používám a ukážu na ní několik příkladů.
1. Klasické TV prokládání - pochází z čistě televizních programů snímaných televizními kamerami. Takové prokládání se řeší celkem jednoduše použitím některého filtru
pro odstranění prokládání (např. zmíněného KernelDeint
, jeho optimalizované verze LeakKernelDeint
, filtr Yadif
nebo jiný). Viz příklad 3. Jen je potřeba si dát
pozor na správné pořadí polí.
2. Roztřepení obrazu způsobené posunutím polí - dochází k němu u filmů. U běžných filmů natáčených klasicky pro kina by se na našich televizích ani DVD neměl
roztřepený obraz objevit, protože obraz je v nich snímán po celých snímcích a i když je pak vysílán v TV po polích, obě pole každého snímku do sebe přesně zapadají,
protože pochází z jednoho okamžiku. Občas ale u některých filmů dochází k roztřepení obrazu kvůli tomu, že nějaké pole vypadne a pole se posunou tak,
že spodní pole jednoho snímku se posune na pozici horního pole daného snímku a na pozici spodního pole se posune horní pole z původně dalšího snímku. Tak vznikne snímek složený
z polí ze dvou různých snímků a to má za následek roztřepení obrazu. Tento případ se dá řešit prakticky s dokonalým výsledkem. Stačí totiž jen poskládat do sebe ty pravé pole.
Lze to provést pomocí filrů Telecide
nebo TFM
z pluginů Decomb nebo TIVTC - viz. příklad 6.
Tyto filtry kontrolují roztřepení snímků a když ho posoudí jako roztřepený zkusí přeuspořádat pole tak, aby do sebe zapadly. Když je ale ve snímku málo roztřepení, třeba jen na mrkajících
očích, nechají ho obvykle tak. To je určitá nedokonalost. Můžete zkusit další způsob, který je dokonce kvalitnější a rychlejší. Pomocí vnitřních filtrů SeparatField
, Trim
, a Weave
smažete jedno pole z filmu. Tím se všechna pole posunou o jednu pozici a problém se tak vyřeší dokonale. Vložte do vašeho skriptu funkce z příkladu 7 a pak hned uvidíte jestli je roztřepený obraz
způsobený posunutím polí. Pokud ano, roztřepení úplně zmizí. Tato metoda má proti filtrům Telecide a TFM jen tu nevýhodu, že pokud není roztřepený celý film, ale jen jeho část, musíte sami
určit začátek a konec roztřepené části, na které pak tuto metodu použijete.
3. Roztřepení obrazu při převodu NTSC materiálu na PAL materiál - je vidět hlavně v některých převážně starších amerických nebo japonských filmech. Tam se totiž filmy musí
trochu komplikovaně převádět na jinou frekvenci snímků (z 24 na 30). Nazývá se to telecine. A naše televizní stanice někdy vysílají tyto NTSC materiály u nás a přitom provádí převod zase na naši
frekvenci snímků 25. Vznikne z toho roztřepený obraz, který navíc obsahuje smíchaná a duplikovaná pole. Toto je nejhorší případ, který se jen těžko řeší. Takové filmy mívají obvykle trochu trhavý pohyb.
Že se jedná o tento případ poznáte tak, že pomocí příkazu SeparateFields
rozdělíte snímky na pole a krokujete vpřed v čase. Když uvidíte některá pole normální (hladká) a
některá smíchaná ze dvou polí a také, že se některá pole opakují, jedná se o tento případ (zároveň si při tom zkontrolujete pořadí polí).
Takový stav řeším jednoduše jako u klasického prokládání, s tím, že jsem smířený s artefakty smíchaných polí a občas
zadrhávajícího pohybu. Existuje skriptová funkce Restore24
pro řešení tohoto problému, ale je poměrně složitá a neuměl jsem ji moc dobře použít.
Přesto ji můžete vyzkoušet.
Skript pro přeuspořádání polí: Rozmarne leto_Telecide.avs
Video=Mpeg2source ("y:\Video\Rozmarne leto.d2v") Audio=WAVsource("y:\Video\Rozmarne leto Tc0 L2 2ch 48 192 DELAY 0ms.wav") AudioDub(video, audio) AssumeTFF() #určuji pořadí polí pro Telecide Telecide() #Telecide přeuspořádá pole, aby do sebe zapadaly Trim(1394,110448) Crop(10,4,-14,-4) TemporalCleaner() LanczosResize(720,540)
Toto řešení je kvalitnější a rychlejší. Pokud jsou posunutá pole jen v části filmu, musíte oblasti ve kterých jsou pole posunutá určit sami.
Skript pro posunutí polí v celém filmu: Rozmarne leto.avs
Video=Mpeg2source ("y:\Video\Rozmarne leto.d2v") Audio=WAVsource("y:\Video\Rozmarne leto Tc0 L2 2ch 48 192 DELAY 0ms.wav") AudioDub(video, audio) SeparateFields() #rozdělím snímky na pole - z každého pole (půlsnímku) se stane samostatný snímek Trim(1,0) #tímto vystřihnu první snímek (původně pole) Weave() #spojím pole do celých snímků; pole jsou posunuta a prokládání zmizí Trim(1394,110448) Crop(10,4,-14,-4) TemporalCleaner() LanczosResize(720,540)
Další úpravou může být třeba zostření videa, které je na váš vkus až příliš vyhlazené (rozmazané). To lze provést například filtrem MSharpen. Spojit video a audio z různých souborů můžete pomocí filtru AudioDub , upravit odstín, světlost a kontrast můžete pomocí filtru Tweak , atd. Každý externí plugin můžete také načíst pomocí funkce LoadPlugin se zadáním patřičné cesty a názvu pluginu, ale je jednodušší mít plugin ve složce "Plugins", protože pak se načte sám. Možností úprav videa nebo audia je ještě spousta. Stačí se jen podívat na seznamy vnitřních a externích filtrů.
Napsaný skript otevřete ve videopřehrávači a nebo nějakém videoeditoru. Nejlepší je na to VirtualDub. V něm si můžete prohlédnout výsledek práce AviSynthu. Jestli jste spokojeni můžete video zkomprimovat. Podle kontejneru do kterého chcete video uložit použijte vhodný program (plus příslušné enkodéry):
AVI - VirtualDub (zde použijte režim Fast recompress - Rychlá rekomprese)
MPG (m2v), VOB - QuEnc, HC encoder
MP4, MKV - MeGUI
Seznam většiny užitečných programů pro práci s videem a zvukem najdete na http://www.doom9.org/software.htm
Na chvilku odbočím od AviSynthu ke kompresi videa. Nechci zde detailně popisovat všechny formáty komprese, ale dát pár úvodních rad pro ty nejpoužívanější. V současnosti jsou nejrozšířenější kompresní formáty MPEG2 a MPEG4-ASP (neboli také DivX, Xvid video).
MPEG2 je rozšířený především díky tomu, že je používán na DVD videu a video jím komprimované tam bývá ukládáno do kontejteru VOB. Jinak bývá takové video ukládáno do kontejneru mpg nebo mpeg (to když je spolu se zvukem) a nebo do kontejneru m2v pokud se jedná o holé video bez zvuku. Ve výše uvedených programech QuEnc a HC encoder se zadává datový tok - bitrate. Tento datový tok volte tak aby vám celovečerní film vyšel na 1 celé DVD. Při tom počítejte s místem pro audio (asi 1,5 - 2 MB na 1 minutu pro MP2 a pro AC3 až dvakrát tolik - podle zvolého datového toku) a také počítejte s přibližně 100 MB na spojení videa a zvuku. Jestliže si budete chtít vytvořit DVD video zkontrolujte si, že jsou nastaveny povolené hodnoty pro DVD formát t.j. maximální bitrate 9800 kb/s (obvykle se ale používá 8000), dále správnou frekvenci snímků 25 snímků za sekundu, rozměry snímku 720(704)x576, velikost GOP a možná i další parametry. U HC to vše můžete upravit jedním kliknutím. Podrobný návod na tvorbu DVD najdete zde
MPEG4-ASP je formát známý především v podobě DivX a Xvid kodeků. Ukládá se nejčastěji do AVI kontejneru za pomoci např. programu VirtualDub. Xvid je zdarma a jeho použití je popsáno zde a zde je posáno jak silná komprese by se měla volit podle tzv. indexu kvality. Je to vlastně počet bitů připadajících průměrně na jeden pixel snímku. Tento index však nezohledňuje přesně míru zašumění ani míru pohybu v obrazu. Proto chci poukázat na výbornou možnost kodeku Xvid při použití dvouprůchodového kódování. Xvid při prvním průchodu používá na všechna videa prakticky stejnou míru komprese (neměníte-li vy svoje nastavení). Pro snímky P používá kvantizer 2 a pro snímky B používá kvantizer 4 což je velmi dobrá kvalita. Výsledky prvního průchodu pak ukládá do statistického souboru s příponou .pass. Výchozí název tohoto souboru je "video.pass" a kam se ukládá najdete po stisknutí tlačítka "more" hned vedle okna s vybraným 1. průchodem. Tento statistický soubor si můžete pojmenovat třeba podle svého filmu a nastavit cestu uložení podle libosti. Tento soubor si taky můžete otevřít v utilitce StatsReader, kterou najdete ve Start/Programy/Xvid. A po otevření statistického soubou ve StatsReaderu si můžete přečíst velikost videa komprimovaného v 1. průchodu. A právě velikost videa je měřítkem kvality komprese. Jestliže je malý, znamená to, že i při výborné kvalitě se podařilo video zkomprimovat poměrně silně. Takové video má zřejmě málo šumu a málo pohybu. Pak ho stačí taky v druhém průchodu zkomprimovat právě s ohledem na velikost videa z prvního průchodu. Nemá smysl zadávat větší velikost komprimovaného videa než v prvním průchodu (při větší velikosti o 40-50% dokonce Xvid ztrácí kontrolu nad datovým tokem). Naopak, výsledná velikost se dá ještě trochu snížit při zachování velmi dobré kvality. Já se snažím zadávat velikost výsledného videa nad 75% videa z prvního průchodu. Vaše nastavení závisí samozřejmě na vašich požadavcích na kvalitu. Druhý průchod můžu spustit tedy až zhodnotím první průchod a to třeba i u více filmů. Pak můžu vybrat které filmy dát společně na jedno DVD a mít u nich podobnou kvalitu. Při nastavování více kompresí 1. průchodu za sebou, si musím pro každou kompresi nastavit jiný název statistického souboru, jinak by se navzájem přepisovali. Podobně také, jestliže nastavuji více druhých průchodů za sebou, nesmím zapomenout použít správný statistický soubor, který se volí opět po stisku tlačítka "more" vedle okna s vybraným 2. průchodem, protože jinak by se použil ten z předchozí komprese.
Tento slovník pojmů vznikl ze slovníku v ruské verzi dokumentace AviSynthu a obsahuje vysvětlení nejběžnějších termínů, které se ve zpracování videa a zvuku používají.
bitrate - rychlost toku dat (v bitech za sekundu)
bob-deinterlace - metoda odstranění prokládání rozdělením snímků na pole a zdvojnásobením jejich výšky
border - okraj snímku
blocking, blockiness - kostkatění obrazu, obraz se skládá ze čtverečků (bloků); vzniká vlivem silné komprese
clip - část videa, může být se zvukem
clip - ohraničit, oříznout amplitudy (u zvuku)
colorspace - barevné prostředí (RGB, YUV)
color format - barevný formát, konkrétní provedení barevného prostředí (RGB24, YV12 atd.)
combing - roztřepení obrazu, hřebínek, nebo taky zubatice - artefakt objevující se při snímkovém zobrazení prokládaného (TV) materiálu
deblocking - odstranění kostkatění
deinterlace - odstraňování artefaktů prokládání
demuxing - oddělení jednotlivých streamů (video, audio) ze souboru AVI, MPG, VOB, ...
deringing - odstranění zvonění hran
downmixer - směšovač, zmenšuje počet kanálů vícekanálových AC3 souborů na stereo
edge - hrana, okraj objektu, obrys
field - pole (polovina snímku tvořená sudými a nebo lichými řádky), půlsnímek
fieldbased video - video založené na polích, je to video uměle rozdělené na pole
fps - smímky za sekundu ("frames per second")
framebased video - video založené na snímcích
framerate - frekvence snímků
frameserver - snímkový server
frameserving - předávání snímků jiným aplikacím
frameserve - předávat snímky - načíst AVS skript
chroma - barevnost, barevná složka
interlaced - prokládaný (formát obrazu televizních pořadů)
interleaved - prolínané (například avi), znamená propojení video a audio streamu do jednoho soubory, pravidelně se při tom střídají části videa a audia; úmyslně je zde použité slovo prolínání, aby nedocházelo k záměně s prokládaným televizním formátem obrazu
inverse telecine - obrácený proces telecine, odstranění pulldown
luma - jas, jasová složka
muxing - spojení jednotlivých streamů (video, audio) do jednoho souboru (kontejneru) AVI, MPG, VOB, ...
pixel - bod obrazu
plugin - připojitelný programový modul, v AviSynthu zpravidla využíván jako filtr
pulldown - proces změny filmové frekvence snímků na video frekvenci snímků cestou přidávání duplikovaných polí v určitém pořádku, např. pro NTSC se používá 2:3 pulldown
pulldown pattern - šablona, struktura pořadí polí v pulldown
pulldown removal - odstranění pulldown, obnovení původního stavu filmu (původní frekvence snímků).
resampling - převzorkování, změna počtu vzorků
resize - změna rozměru snímku
ringing - zvonění hran, obrysy nejsou čisté, ale jakoby rozechvělé
sample - vzorek
sample rate - vzorkovací frekvence
samples type - typ vzorku (u zvuku)
sampling - vzorkování
script - skript, posloupnost příkazů
script function - skriptová funkce
subsampling, downsampling - podvzorkování, snížení počtu vzorků
taps - opěrné body, elementy jádra filtru, počet vzorků použitých pro výpočet nového vzorku
telecine - proces převodu filmů na videomateriál, nejčastěji používán pro pulldown, někdy jsou to synonyma
template - šablona
upsampling - nadvzorkování, zvýšení počtu vzorků (interpolací)
Prohlédněte si české odkazy na stránky užitečné pro zpracování videa a zvuku.
Tento český překlad dokumentace AviSynthu je vytvořen z anglické dokumentace off-line dokumentace.
Od 5.srpna 2007 je tato dokumentace vydávána za podmínek licence CC BY-SA 3.0. Pod touto licencí je vydávána také tato česká dokumentace.
V podstatě to znamená, že použijete-li části této dokumentace pro své články, měli by jste uvést odkud pochází, autorská práva, licenci atd.
Tato kapitola měla především vám, novým českým uživatelům přiblížit AviSynth a na názorných ukázkách předvést tvorbu skriptů, tak aby uživatel dlouho netápal při psaní svých prvních skriptů. I když v příkladech nebyly použity žádné filtry pro zpracování zvuku, existuje i řada audio filtrů. Jak už zde bylo zmíněno, AviSynth umožňuje i pokročilé zpracování videa například za pomoci podmíněného filtrování. Vše je podrobně popsáno v této dokumentaci a objevení všech možností AviSynthu je už jen na vás.
Přeložil: vlada_vm (vlada_vm@centrum.cz)