Naposled aktualizováno 10. 01. 2011.

Tvorba DVD

Teoretický úvod

Dnes už jsou DVD vypalovačky zcela běžnou součástí každého nového počítače a proto se také šíří dotazy lidí, jak video nahrané z TV či VIVO karty, DV kamery, digitálního foťáku nebo stažené z internetu zkomprimovat a vypálit tak, aby vzniklo standardní filmové DVD-Video. Plno lidí si také koupilo DVD přehrávač bez podpory komprese MPEG-4 (DivX/XviD) a nyní chtějí své filmy uložené v tomto formátu vypálit tak, aby si je mohli na svém stolním přístroji přehrát. Formát kompatibilní se všemi DVD přehrávači se nazývá DVD-Video. Tento formát používá pro obraz kompresi MPEG-2, která je sice mnohem méně účinná než MPEG-4, ale v době vzniku DVD byl standard MPEG-4 teprve v plenkách. Příští generace přehrávačů již samozřejmě s MPEG-4 počítají, téměř každý nový DVD přehrávač již MPEG-4 ASP (alespoň částečně) zvládá. Současné přístroje zatím nedokáží dekódovat veškerá MPEG-4 videa, ale situace se pomalu zlepšuje. Lidé vlastnící přehrávač s podporou MPEG-4 (XviD/DivX) často vypalují i několik filmů s touto kompresí na DVD médium. Takto vypálené filmy ale starší přístroje nepřehrají. Během léta 2006 se objevili první výrobky schopné přehrát i video s nejkvalitnější současnou kompresí - MPEG-4 AVC (Nero Digital AVC, x264) a to i ve vysokém rozlišení (HD). Jsou to přehrávače standardu HD DVD a Blu-ray.

Přestože DVD-Video není zrovna nejkvalitnějším a nejmodernějším způsobem uložení obrazového záznamu, pro jeho použití existuje několik důvodů. Kromě již zmíněné kompatibility je to také skutečnost, že zdrojové video z TV karty nebo DV kamery má většinou špatnou kvalitu a rozlišení. Proto je použití formátu DVD-Video zcela adekvátní. I když kamery natáčející ve vysokém rozlišení jsou stále bažnější a stejně tak i přístroje pro přehrávání HD videa, v běžných podmínkách se s formátem DVD-Video budeme setkávat ještě určitě několik let. Pokud je zdrojovým videem DVD-rip zkomprimovaný pomocí kodeků DivX nebo XviD, je nutné připomenout, že vytvořením DVD z takovéhoto zdroje výrazně ztratíme na kvalitě oproti originálnímu disku. Vaším zdrojem videa pro vytvoření vlastního DVD může být také jiné DVD. Na prosté kopírování disků se ale většinou používají jednoduché specializované programy typu DVD Shrink. V tom případě je tento postup zbytečně složitý. Můj návod Vám popíše, jak v podstatě z libovolného video souboru vytvořit DVD-Video. Pro převod z AVI na DVD mám na stránkách samostatný návod, který některé věci oproti tomuto návodu zjednodušeje a zároveň přidává informace o zpracování titulků.

Pokud bych měl rozdělit postup při tvorbě DVD do několika částí, dalo by se vše shrnout asi takto:

  • 1) Úprava zvuku a videa do správných parametrů (1. díl)
  • 2) Zkomprimování zvuku a videa (2. díl)
  • 3) Authoring - tvorba menu, kapitol atd. (3. díl)

    Formát zvuku

Pokud je zdrojem pro budoucí video DVD-rip (AVI - DivX/XviD), je poměrně pravděpodobné, že zvuk u filmu je ve formátu AC3. Tento formát zvuku je standardem pro DVD-Video a mi tím pádem nemusíme zvukovou stopu nijak upravovat. Plno práce si tak ušetříme tím, že zvuk z video souboru extrahujete programem VirtualDubMod. Zároveň tak také uchováme původní kvalitu zvuku. Jak na to Vám prozradí tento návod. I v případě, že je zvuk v jiném formátu než AC3 (nejčastěji MP3), není jeho separování (tzv. demux) špatným postupem. Zvuková stopa se daleko snáž zpracovává odděleně od videa. Také některé programy pro authoring DVD (například MuxMan) požadují zvukovou a video stopu odděleně. Pokud se nám ale nepodaří zvuk a obraz separovat, není žádný důvod k zoufalství, jak uvidíte za chvíli. Jestliže nevíte, v jakém formátu je zvuk nebo video u Vašeho souboru, použijte k tomu VirtualDub nebo GSpot.

Pokud chceme vytvořit standardní DVD, je nutné připravit pro něj video a zvuk ve správných formátech. Zvuk může být zkomprimován do MP2 (MPEG-1 layer 2) nebo AC3 (Dolby Digital) s rozlišením 16 bitů, samplovací frekvencí 48 kHz a datovým tokem 64 - 448 kbps. Pro extrémně vysokou kvalitu je možné použít kompresi DTS. Vhodným kompromisem mezi kvalitou a velikostí je AC3. Pro stereo bych doporučil 224 kbps, u šestikanálového zvuku 5.1 se používá většinou 384 kbps. Problém může nastat v případě, kdy Váš zvuk není samplovaný frekvencí 48 kHz nebo má špatné rozlišení. S obojím si ale poradí filtry pro AviSynth (viz. dále) nebo můžete zvuk přesamplovat při kompresi v programu BeSweet. Program BeSweet, který popisuji ve 4. díle návodu na ripování DVD, zvládne kompresi většiny zvukových formátů do MP2 i AC3. Ke grafickému rozhranní BeSweet GUI přibyla lepší alternativa v podobě programu BeLight, který se mi líbí mnohem víc. Ovládání je jedoduché a intuitivní. Tato část postupu by tedy neměla přinést žádné větší problémy.

BeLight

Formát obrazu

S obrazem už bude starostí daleko více. Standard DVD-Video je dost striktní a neumožňuje volit parametry tak volně jako třeba .AVI nebo .MKV (Matroška). Video které chceme zkomprimovat by mělo mít rozlišení 720x576 a 25 snímků za vteřinu (fps). To platí pro normu PAL (Evropa), NTSC (USA, Japonsko) má rozlišení 720x480 a 29.97 fps. Povolená jsou i tato rozlišení: PAL - 704x576, 352x576 a 352x288, NTSC - 704x480, 352x480 a 352x240. Kódování barev musí být ve formátu YV12 a datový tok nesmí překročit 9800 kbps (včetně zvuku). Jak vidíte, těch omezení je poměrně dost a proto jsou většinou MPEG-2 enkodery poměrně složité programy. Existuje řada komerčních produktů jako například CinemaCraft Encoder (CCE), Canopus ProCoder, MainConcept MPEG Encoder nebo TMPGEnc (existuje i verze zdarma). Podle některých testů ale stejnou kvalitu videa nabídnou také dva nově vyvíjené a zdarma dostupné enkodery - QuEnc a HC (návod). Já pro kompresi videa (případně i zvuku) popíši v tomto návodu poměrně jednoduchý QuEnc. Malá komplikace je v tom, že program QuEnc (stejně jako HC) akceptuje jako jediný možný vstup skript programu AviSynth. O tomto frameserveru je podrobněji psáno v tomto článku nebo ve 2. díle návodu na ripování DVD.

Frameserver

Frameserver je program, který posílá nekomprimované video z jednoho programu do druhého a přitom zabírá na disku minimum místa. Frameserver má i program VirtualDub. Aby fungoval, je nutné spustit soubor AuxSetup.exe a poté kliknout na Install Handler, čímž se zaregistrují knihovny frameserveru. Pomocí programu Pluginpac Frameserver lze použít frameserving i ve střihových programech Vegas, Adobe Premiere a Ulead Media Studio. Není samozřejmě problémem zřetězit 2 frameservery za sebe, jak si za chvíli ukážeme.

Jak jsem již zmínil, MPEG encoder QuEnc přijme jako vstup pouze skript AviSynthu. To znamená, že se nám nyní otevírají 2 možnosti jak postupovat. První možností je použít nejdříve frameserver VirtualDubu pro výstup videa upraveného filtry. Frameserver ve VD spustíme příkazem File -> Start frame server. V okně které se objeví klikneme na Start a poté již stačí zadat pouze jméno souboru (nař. video.vdr) a kliknout na Uložit. Potom předáme toto video pomocí skriptu AviSynthu programu QuEnc. Jde o obyčejný textový soubor s příponou .avs na jehož začátku načteme nějaké video, které dále můžeme pomocí filtrů různě upravovat a na výstupu získáme nekomprimované video a zvuk v potřebném formátu. Skript AviSynthu otevře naprostá většina programů, namátkou třeba Windows Media Player a všechny ostatní DirectShow přehrávače, dále například VirtualDubMod nebo MPEG enkodery ProCoder, CCE, HC, QuEnc a další.

Úprava videa v Avisynthu

Předem bych chtěl říci, že AviSynth je jedním z nejlepších a nejkvalitnějších nástrojů na úpravu videa. Jeho ovládání pomocí AVS skriptů je sice dost specifické, ale pokud jej zvládnete, můžete dělat s obrazem téměř divy. Základním úspěchem je vytvoření správného skriptu. Přestože se to na první pohled může zdát složité, až tak těžké to není. Jako první se musíme rozhodnout, zda budeme vytvářet DVD v normě PAL nebo NTSC. Základem pro nás bude snímková frekvence, pokud má video 30 (respektive 29,97 fps), bude většinou vhodnější použít americký formát NTSC. V případě, že bylo NTSC video pořízené z původního progresivního záznamu metodou telecine (viz. prokládání), je vhodné obráceným způsobem (metodou telecide) vytvořit zpět video s 24 fps. Pokud je snímková frekvence zdroje 25 fps, je vhodné vytvořit DVD pro normu PAL. Nadále už se budu zabývat pouze normou PAL, ale postup se dá analogicky odvodit i pro NTSC DVD. Jak by vypadal nejjednodušší možný skript pro AviSynth v případě, že používáme frameserver VD, ukazuje následující zápis:

AviSource("video.vdr")
ConvertToYV12()

Na prvním řádku otevíráme soubor vytvořený frameserverem VirtualDubu, stejným způsobem ale můžeme otevřít i většinu AVI souborů. Pokud příkaz AviSource() nahradíme příkazem DirectShowSource(), můžeme otevřít i soubory typu MP4, WMV, MKV nebo OGM. Pomocí pluginu QTReader můžeme otevřít MOV soubory, plugin DgDecode nám pro změnu umožní otevřít MPEGy. Druhá řádka skriptu je také důležitá, protože video musí být kódované systémem barev YV12, ale náš zdroj bude mít někdy jiné kódování. Takto nám však bude skript stačit pouze v případě, že video a zvuk mají správné parametry, to ale nastane většinou pouze u DV AVI nebo nahrávky z TV karty. Je tedy na čase začít celý případ a skript poněkud komplikovat.

Nejjednodušším případem, který potřebuje další úpravu, je situace, kdy naše video nemá rozměr 720x576, má ale poměr stran 4:3 nebo 16:9. Na správnou úpravu potom stačí obyčejný resize (změna rozlišení) videa. Skript by tedy vypadal následovně:

AviSource("video.avi")
ConvertToYV12()
LanczosResize(720,576)

Nyní ještě ztížím situaci tím, že zvuk nebude mít správnou samplovací frekvenci a rozlišení. Často se vyskytuje samplovací frekvence 44.1 kHz, naopak jiné rozlišení než 16 bitů je poměrně vzácné. Nejčastěji jej najdete u videa z digitálních foťáků. Pro změnu formátu zvuku doplním tedy další 2 řádky, které se postarají o nápravu:

AviSource("video.avi")
ConvertToYV12()
LanczosResize(720,576)
ConvertAudioTo16bit()
SSRC(48000)

V další ukázce již zvuk nebudu řešit a soustředím se na obraz. Zatím se jednalo o triviality, nyní ale nastanou problémy. Budeme mít video s rozlišením 704x300, tedy s poměrem stran přibližně 2,35:1. Před pokračováním je nutné opět vysvětlit kousek nezbytné teorie.

Poměr stran DVD

DVD má rozměr 720x576. TV obrazovka nebo monitor mají poměr stran 16:9 nebo 4:3, jenže 720x576 dává poměr stran 5:4. Informace o správném poměru stran je proto na DVD disku vždy uložená a přehrávač video patřičně roztáhne do šířky při přehrávání. Dostupné jsou poměry stran 16:9 a 4:3. Jako paradox se může jevit fakt, že video v rozlišení 720x576 může mít poměr stran 4:3 i 16:9, ale je to tak. Mluví se zde o takzvaných nečtvercových pixelech a hodnotě pixel aspect ratio (PAR, poměr stran pixelu). Více o poměru stran DVD se dozvíte zde. U AVI je poměr stran pixelu téměř vždy 1:1, kromě DV AVI nebo nahrávky z TV karty v rozlišení 720x576. Ty mají stejný PAR jako DVD-Video. DVD přehrávač při zobrazení na TV navíc zahodí 9 krajních pixelů, ale tento fakt bych raději zcela ignoroval, abych nezanášel další zmatky do již tak složitého problému. V principu je nutné vědět, že pokud chci film ve formátu AVI s PAR 1,000 uložit na DVD, musím jej předtím natáhnout na výšku. Při přehrávání se totiž video opět roztáhne do šířky. A nyní si ukážeme, jak tedy postupovat v našem ukázkovém případě.

Video je v rozlišení 704x300, což je přibližně 2,35:1. Jelikož DVD takovýto poměr stran (aspect ratio - AR) nezná, musíme si dopomoci přidáním černých pruhů. DVD s poměrem stran 16:9 má PAR 1024/720 = 1,422, u poměru stran 4:3 by to bylo 768/720 = 1,066. Tato čísla platí v případě, že ignoruji dříve zmíněný ořez 9 pixelů po stranách. Potřebujeme tedy video o rozlišení 704x304 roztáhnout tak, aby splňovalo normu DVD. Vodorovný rozměr je jasný, bude 720. S vertikálním to bude složitější, spočítá se jako (původní výška)x720xPAR/(původní šířka). Tedy 300x720x1,422/704 = 436. Je logické, že pokud je video širokoúhlejší než 16:9, použíjeme poměr stran 16:9 a doplníme vertiklání černé pruhy. Do rozměru 576 nám tím pádem zbývá po 70px nahoře a dole. Toto místo zaplníme černými pruhy. Můžeme také provést zpětný kontrolní výpočet poměru stran: Při přehrávání se video 720x576 roztáhne na 16:9 tedy 1024x576. Samotný obraz bez černých pruhů má tedy 1024x436, což dává cca 2,35:1. Máme tedy stejný poměr stran jako u zdrojového videa. Skript tedy bude vypadat takto:

AviSource("video.avi")
ConvertToYV12()
LanczosResize(720,436)
AddBorders(0,70,0,70)

Snímková frekvence

Dalším problémem na který můžeme narazit je snímková frekvence (fps). Filmy v kině mají 24 (přesněji 23,976) fps, zatímco televizní technika v Evropě používá 25 fps. Nejlepší metoda konverze je zrychlení filmu, čehož docílíme následujícím skriptem:

AviSource("video.avi")
ConvertToYV12()
LanczosResize(720,436)
AddBorders(0,70,0,70)
AssumeFPS(25)

Touto úpravou se nám ale rozsynchronizuje zvuk, který zůstane nezměněný, zatímco obraz se zrychlí. Změna fps videa je tedy spíš problémem zvuku. Musíme zvuk o něco zrychlit, ale zároveň je podle mě vhodné zachovat původní výšku tónu. K tomu slouží flitr AviSynthu TimeStretch(). Změna rychlosti zvuku při zachování výšky tónu je značně komplikovaná operace (pro program) a je to ztrátový proces. Podle některých lidí je proto menším zlem změnit zároveň i výšku tónu, což je mnohem jednodušší přepočet. Zvuk se při zrychlení o 1/25 zvýší o necelý půltón. Ukážeme si tedy oba způsoby. Nejdříve bude příklad se změnou výšky tónu. Pokud k filtru AssumeFPS() přidám parametr "true", zrychlí se kromě obrazu i zvuk. Jelikož se zrychlení provede změnou samplovací frekvence, musím ji poté převést zpátky na 48 kHz. Skript tedy bude vypadat následovně:

AviSource("video.avi")
AssumeFPS(25, yes)
SSRC(48000)

Pokud má zvuk rozlišení menší než 16 bitů, provedl bych konverzi na tento formát před natažením, v opačném případě až po natažení. Pokud má zvuk 16 bitů, žádnou konverzi samozřejmě porovádět nebudeme. Stejně tak je vhodnější upsamplovat (zvýšit samplovací frekvenci) na 48 kHz ještě před natažením. Zvuk s frekvencí vyšší než 48 kHz se vyskytuje poměrně vzácně, třeba na DVD-Audio discích. Nyní tedy opět ukázka skriptu:

AviSource("video.avi")
AssumeFPS(25)
TimeStretch(tempo = (100.0*25.0)/23.976)

Shrnutí

Na závěr předvedu extrémně složitý, ale poměrně reálný případ, kdy má video 24 fps, rozlišení 704x304 a zvuk je ve formátu MP3, 22kHz/8bit. Je to asi nejhorší situace, jaká může nastat. Skoro všechno je špatně. Komerční programy, které pracují automaticky, by si s podobným zdrojem těžko poradily. V AviSynthu ale lze problém bez větší námahy vyřešit. Navíc použité filtry dosahují špičkové kvality, lepší než Vám nabídne většina komerčních programů. Že ale nutně dojde k jisté ztrátě kvality je snad jasné. Skript pro tento případ by vypadal takto:

AviSource("video.avi")
ConvertToYV12()
LanczosResize(720,436)
AddBorders(0,70,0,70)
AssumeFPS(25,yes)
ConvertAudioTo16bit()
SSRC(48000)

Celý skript pro zopakování ještě jednou rozeberu. Na prvním řádku načtu AVI soubor "video.avi". Nemusím snad podotýkat, že je nutné mít nainstalované kodeky pro jeho dekódování. Na druhém řádku převedu video do kódování barev YV12. Třetí řádek roztáhne video podle předem spočítaných parametrů. Ve čtvrtém řádku přidám pruhy nahoru a dolů na výšku 576px. Další příkaz zrychlý obraz i zvuk. Na posledních dvou řádcích zvuk převedu na šestnáctibitové rozlišení a samplovací frekvenci 48 kHz.

Pokud si tedy tento skript zkopírujete, jeho jednoduchou úpravou si připravíte téměř jakékoliv video pro DVD. Je snad jasné, že použijeme pouze ty filtry, které jsou nutné. Jinak by docházelo ke zbytečné degradaci kvality. Ke zde zmíněným filtrům je samozřejmě ještě možné doplnit další, které například potlačí šum, zvýrazní barvy nebo sestříhají video. Podrobnosti najdete v článku o Avisynthu. Nyní se tedy můžeme ve 2. díle návodu pustit do vlastní komprese.




Pokud máte nějaký dotaz nebo přípomínku, neváhejte mě kontaktovat.