Portál AbcLinuxu, 2. května 2025 23:06
V minulém díle jsme dokončili hlavní obsah DVD. V tom dnešním se zaměříme na tvorbu navigačního menu, jeho složení s hlavním obsahem disku a ostatní dokončovací činnosti.
I když budeme chtít jenom statický obrázek, bude tento na našem DVD representován krátkou videosekvencí formátu MPEG2, do které vmultiplexujeme doprovodný zvuk a mapu navigačních tlačítek.
Pro přímočarost příkladu si vytvoříme jednoduché menu s jedním tlačítkem po jehož stisknutí začne hrát hlavní video kapitola.
V Gimpu otevřeme podkladový obrázek. Převzorkujeme ho na velikost 720x576 pixelů (PAL) a vytvoříme alespoň tři vrstvy.
Spodní vrstva bude vlastní obrázek (obr. 1), druhá vrstva třeba texty tlačítek v neoznačeném stavu (obr. 2) a třetí vrstva pak navigační boxy tlačítek. Navigační boxy (obr. 3) jsou zobrazeny přehrávačem, když je vybráno odpovídající tlačítko.
Jestliže chcete, aby text při výběru měnil např. barvu, doporučuji
raději vrstev víc.. Šetřit v Gimpu opravdu nemusíte .
![]() Obr. 1 |
![]() Obr. 2 |
![]() Obr. 3 |
Když si v Gimpu necháte zobrazit všechny vrstvy, mohlo by naše dílko
vypadat třeba takhle.
Jako první vyexportujte z Gimpu pozadí našeho budoucího menu. Uložíme ho jako obrázek formátu JPG. Pokud možno ve slušné kvalitě a rozměru 720x576 pixelů. (Vypnout zobrazení vrstvy s navigačními boxy a zvolím "Uložit soubor jako". Výstupní formát vybereme JPG)
Masku tlačítek a jejich texty zobrazené při výběru tlačítka převedeme nyní do režimu indexovaných barev s maximálním počtem barev 16 (!důležité!).
Následně vytvořenou masku (obr. 3) vyexportujeme včetně všech barev a
průhlednosti do obrázku formátu PNG. My použijeme například název
navigation.png
.
Nyní si statický obrázek pozadí ve formátu JPEG převedeme na 1 sekundu videa formátu MPEG2. 1 sekunda bohatě stačí, protože přehrávač bude hrát klip v nekonečné smyčce.
jpeg2yuv -n 25 -I p -f 25 -j pozadi.jpg \
|
Prográmek jpeg2yuv
nám ze statického obrázku formátu
JPEG vytvoří 25 snímků vídea (par. -n
) o 25 snímcích/s
(par. -f
) formátu YUV. Náš starý známý
mpeg2enc
pak video překóduje do MPEG2-ES.
I když my teď nechceme ozvučené menu, výsledný VOB nějaký zvuk mít musí. Nevím, proč to tak je, ale je to tak.
Abychom tedy "nějaký" zvuk mohli do menu vložit, vytvoříme si 1 sekundu dlouhé "ticho", které budeme multiplexovat dohromady s MPEG streamem pozadí.
Ticho kódované jako mp2 vytvoříme třeba takhle:
arecord -f dat -twav -d 1 ticho.wav
|
arecord
"nahraje" 1 sekundu dlouhé ticho a uloží ho do
souboru ticho.wav
. mp2enc
pak toto 1 sekundu
dlouhé ticho ticho.wav
převede ho do formátu mp2.
Stejně tak jako u hlavního obsahu, multiplexujeme video a audio dohromady.
mplex -f 8 -o /dev/stdout menu_tmp.m2v \
|
Parametr -f 8
opět říká, že výsledné video se má
multiplexovat v souladu s požadavky na DVD disk.
Pro spojení právě vytvořenho MPEG2-PS videa s navigační mapou uloženou zatím ve formátu PNG použiváme program spumux z balíku dvdauathor.
spumux defmenu.xml <menu_raw.mpg> menu.mpg
|
Prográmek spumux
čte námi připravený MPEG2-PS stream
menu_raw.mpg
a podle pokynu uložených v XML souboru
defmenu.xml
(definice menu) ho multiplexuje s navigační
maskou. Výsledek je ze standardního výstupu přesměrován do
souboru menu.mpg
.
Soubor defmenu.xml
vám nemusí nahánět žádnou
hrůzu. Je to XML definice navigačního menu a pro náš účel stačí, pokud
bude jeho obsah vypadat takhle:
<subpictures>
|
Naše menu je nyní hotové a připravené k použití .
Pokud by váš navigační systém DVD disku měl obsahovat víceúrovňové menu (např. výběry jednotlivých scén filmu), je třeba výše uvedeným postupem vytvořit pro každé submenu samostaný MPEG stream s vlastní navigační mapou.
Nyní už máme připraven smíchaný video a audio program do formy, která
prakticky odpovídá VOBům DVD disku. Máme také připraven mpg
soubor
úvodního menu.
Ještě ale potřebujeme trošku trpělivosti, neboť nestačí jen tyto multiplexované soubory vzít, přejmenovat jako VOB a vypálit na DVD. Existují jistá další pravidla popisující stukturu souborů na DVD disku, která musí být dodržena, aby náš DVD disk byl přehratelný na běžném stolním přehrávači.
My se ale naštěstí těmito problémy nemusím zabývat (tedy pokud sami nechcete). I pro tento úkol totiž již existuje šikovná utilitka, která nám kompletně a správně strukturu DVD disku vytvoří.
Překvapivě se tato utilitka jmenuje dvdauthor a používá se následujícím způsobem:
dvdauthor -o cil_adr -x dvd_struct.xml
|
-o cil_adr
specifikuje jméno adresáře, do kterého
hodláme vytvořit strukturu našeho DVD.-x dvd_struct.xml
udává jméno XML souboru popisujícího strukturu námi vytvářeného DVD disku.Nelekejte se, stejně jako v případě menu se ani teď nejedná o nic
hrozného. Jen pro informaci, starší verze programu dvdauthor
ještě nepoužívaly definiční soubor XML a všechno se definovalo pomocí
parametrů na příkazovém řádku. Pokud na webu naražíte na starší
dokumentaci/tutoriály k programu dvdauthor, jistě budete
souhlasit, že to nebylo zrovna nejpřehlednější.
Dnes používané XML definiční soubory jsou mnohem přehlednější a logicky
uspořádané. Hloubavým doporučuji přečíst manuálové stranky k
dvdauthor
, kde je XML struktura pěkně popsána.
Pro náš příklad použijeme jednoduchý soubor dvd_struct.xml
, který popisuje strukturu DVD disku s jedním menu a jednou video
kapitolou. Tento disk má hlavní menu s jedním tlačítkem, po jehož stisknutí
je přehrána jediná kapitola našeho DVD disku.
<dvdauthor>
|
V našem XML definičním souboru jsou nejdůležitější řádky vyznačené červeně.
První z nich říká programu dvdauthor
, kde
má hledat multiplexovaný mpg
soubor, ze kterého vytvoří navigační menu a druhý zase určuje, odkud se má načít vlastní obsah DVD disku.
Teď bychom už v adresáři "cil_adr"
měli mít vytvořenou
kompletní strukturu našeho kýženého DVD. Pokud chcete, můžete si už teď
vyzkoušet (např. pomocí XINE, Kaffeine, MPlayeru), jak nám naše DVD hraje a
jak funguje navigační menu. Stačí adresář cil_adr
nastavit
jako dvd-device
.
Pokud je zde vše v pořádku, je čas vytvořit ISO image DVD disku a vypálit jej na medium.
mkisofs -dvd-video -o moje_dvd.iso /cesta/k/cil_addr
|
-dvd-video
řekne programu mkisofs
, jak
chceme, aby výstupní iso vypadalo.-o moje_dvd.iso
definuje jméno, pod kterým chceme hotový iso image uložit./cesta/k/cil_addr
parametr říká přesně to, co říká... Tj. ukazuje cestu k adresáři, ve kterém mamé vytvořenu strukturu DVD.Jak jsem již naznačil o pár řádků výše, pokud čerstvě vytvořené ISO
nastavíte jako dvd-device v XINE nebo KAFFEINE, můžete ověřit
jeho funkčnost dokonce včetně menu. Je třeba ale patřičně upgradovat XINE,
aby podporoval funkci DVD navigačního menu (dvdnav plugin
).
Vypalování DVD+/-R(W) disků v Linuxu je u moderních distribucí už
rutinní záležitostí. Pokud máte třeba správně nainstalováný program K3b,
stačí v menu Nástroje
vybrat položky DVD
,
Zapsat DVD ISO image
.
V nabídce naklikáme námi právě vytvořené ISO image a můžeme vesele vypalovat...
Vytváření DVD v Linuxu se může na první pohled zdát, oproti některým jiným OS, těžkopádné. Zkuste a zjistíte, že spíš opak je pravdou.
Napsáním dvou primitivních skriptů (jeden pro tvorbu menu a druhý pro výtvoření A/V obsahu) se mi celá činnost tvorby DVD kompletně zautomatizovala a omezila na několik jednoduchých kroků:
mkdvd
, který sám provede přepočítání a multiplexování kapitol.mkmenu
, který za mě udělá zbytek práce týkající se menu.Spustím následující zřetězený příkaz:
rm -r cil && \
|
Jehož výsledkem je hotové ISO image DVD disku, které se mi navíc ihned začne přehrávat v Kaffeine. Hned můžu ověřit, zda je budoucí disk v pořádku.
Pokud jsem spokojen, mohu přejít rovnou k pálení na médium. Pokud spokojen nejsem, stačí udělat změnu, spustit znovu patřičný scriptík a nechat "sestavit" DVD image.
Zmiňované skripty (viz přílohy) zcela určitě nejsou vrcholem programátorského umění. Napsal jsem je jen tak nahrubo, abych si zjednodušil život.
Přeji vám tedy také mnoho zábavy při tvorbě vlastních DVD s tučnákem.
dvd1.xml
- XML definice obsahující
jednoduchou strukturu DVD disku. Toto DVD obsahuje hlavní menu s jedním
tlačítkem pro zahájení přehrávání jediné kapitoly na tomto DVD.dvd2.xml
- XML definice pro DVD s 12 odstavci, hlavním menu a dvěma dvoustránkovými podmenu. Podmenu
umožňují přímý výběr jednotlivých kapitol DVD disku.dvd-menu.xml
- XML definiční soubor pro
multiplexování menu streamů s navigačními mapami.DVDAuthor::spumux, version 0.6.10. Build options: gnugetopt iconv freetype Send bugs to dvdauthor-users@lists.sourceforge.net INFO: Locale=sk_SK INFO: Converting filenames to ISO-8859-2 INFO: PNG had 2 colors INFO: PNG had 2 colors INFO: PNG had 2 colors INFO: Autodetect 0 = 60x138-149x200 INFO: Autodetect 1 = 224x138-313x200 INFO: Autodetect 2 = 380x138-469x200 INFO: Autodetect 3 = 535x138-624x200 INFO: Autodetect 4 = 60x226-149x288 INFO: Autodetect 5 = 224x226-313x288 INFO: Autodetect 6 = 380x226-469x288 INFO: Autodetect 7 = 535x226-624x288 INFO: Autodetect 8 = 60x316-149x378 INFO: Autodetect 9 = 224x316-313x378 INFO: Autodetect 10 = 380x316-469x378 INFO: Autodetect 11 = 535x316-624x378 INFO: Autodetect 12 = 224x415-313x477 INFO: Autodetect 13 = 380x415-469x477 INFO: Autodetect 14 = 18x503-130x560 INFO: Autodetect 15 = 591x503-703x560 INFO: Pickbuttongroups, success with 1 groups, useimg=1 INFO: Found EOF in .sub file. INFO: Max_sub_size=7520 WARN: Read 0, expected 4 INFO: 1 subtitles added, 0 subtitles skipped, stream: 32, offset: 0.18 Statistics: - Processed 0 subtitles. - The longest display line had -1 characters. - The maximum number of displayed lines was 0. - The normal display height of the font arial.ttf was 0. - The bottom display height of the font arial.ttf was 0. - The biggest subtitle box had 7520 bytes.stále nemôžem prísť na to kde robím chybu, že sa nepridajú podtituly do menu. Prešiel som snaď všetky konfery ale dostal som sa len k vyšie uvedenému výstupu. Som už bezradný, vie mi niekto poradiť aspoň linkom? Ďakujem.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.