Portál AbcLinuxu, 3. května 2024 01:48

Jak vytvořit vlastní DVD pod Linuxem - II

22. 1. 2004 | Ivo Přikryl
Články - Jak vytvořit vlastní DVD pod Linuxem - II  

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.

4. MENU

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 :-).
Podkladový obrázek našeho menu.
Obr. 1
Text neselektovaného tlačítka
Obr. 2
Navigační box selektovaného tlačítka.
Obr. 3

Když si v Gimpu necháte zobrazit všechny vrstvy, mohlo by naše dílko vypadat třeba takhle.

Všechny vrstvy obrázku sloučecné do jediné.

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)

Exportované pozadí menu

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 \
|mpeg2enc -n p-f8 -omenu_tmp.m2v

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
mp2enc -r 48000 -o ticho.mp2 < 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 \
ticho.mp2 > menu_raw.mpg

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>
  <stream>
     <spu start="00:00:00.00" end="00:01:00.00"
       highlight="navigation.png"
       select="navigation.png"

       force="yes"
       autooutline="infer" outlinewidth="1"
       autoorder="rows">
     </spu>
  </stream>
</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.


5. DVD struktura - Skládáme vše dohromady

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

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>
<vmgm>
  <menus>
    <video />
    <audio lang="en" />
    <pgc entry="title" pause="inf">
      <vob file="menu/menu.mpg" />
      <button name="1">jump title 1;</button>
    </pgc>
  </menus>
</vmgm>

<titleset>
<titles>
  <pgc>
    <vob file="tracks/adv2001 1.mpg" />
    <post>call vmgm menu 1;</post>
  </pgc>
</titles>
</titleset>
</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.

6. ISO image

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

7. Ověření ISO image před vypálením

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).

8. Vypalujeme

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...

Co nakonec?

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ů:

  1. Stáhnu video z kamery, nastříhám je a uložím jako DV2.avi.
  2. Spustím script mkdvd, který sám provede přepočítání a multiplexování kapitol.
  3. V Gimpu stvořím nějaký obrázek pro pozadí menu (JPG) a vytvořím navigační mapy tlačítek a jejich textů (PNG v režimu max. 16 indexovaných barev).
  4. Zavolám skript mkmenu, který za mě udělá zbytek práce týkající se menu.
  5. Spustím následující zřetězený příkaz:

    rm -r cil && \
    dvdauthor -o cil -x my2.xml && \
    mkisofs --dvd-video -o dvd2.iso /cesta/k/cil_addr/ && \
    kaffeine -p

    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.

Přílohy

Související články

Jak vytvořit vlastní DVD pod Linuxem - I
Přehrávání DVD pod Linuxem
Ripování DVD
Na co se často ptáme 2: MPlayer
Televizní karta s dálkovým ovládáním

Odkazy a zdroje

dvd+rw-tools
dvdauthor
The Gimp 2
MPlayer
K3b
Kaffeine
Xine

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

Diskuse k tomuto článku

22.1.2004 09:40 Milda
Rozbalit Rozbalit vše motion menu??
Odpovědět | Sbalit | Link | Blokovat | Admin
diky za super clanek... ciste teoreticky bych podle clanku, zvladl staticke nahledy kapitol, ale muze autor doplnit, jak pouzit kratke filmove sekvence v nahledech kapitol?
Louis de Bussy avatar 22.1.2004 09:56 Louis de Bussy | skóre: 28 | Kolín
Rozbalit Rozbalit vše motion menu??
Nabyl jsem dojmu, ze uplne stejne. Jen misto obrazku konvertovaneho v sekundove MPEG-2 video se vlozi rovnou MPEG-2 videosekvence.
-- Help! I'm being held prisoner in chinese laundry!
22.1.2004 12:05 Ivo Prikryl | Brno
Rozbalit Rozbalit vše motion menu??
Ano, je to tak. Jak jste si spravne vsimnul, prvni co delame, prevadime staticky obrazek na 1s videa a to pak multiplexujeme dal. Pokud tedy pouzijete misto naseho 1s "dummy" videa nejaky jiný videoklip (viz. dil 1), muzete k nemu klidne pridat libovolny zvuk a pouzit vysledek jako menu. Jenom je potreba nejak nacpat do tohoto videostreamu obrazky tlacitek v neselektovanem stavu. (ono, kdyz si rozeberete nejake orig DVD,tak to tak presne delaji. Hraji v nekonecnych smyckach ruzne uryvky videa.)
23.1.2004 09:40 Milda
Rozbalit Rozbalit vše motion menu??
me se porad zda, ze tu mluvite videu na pozadi menu, ja spis myslel nahledy kapitol, s kratkou sekvenci (ktere by fungovali jako tlacitko)
23.1.2004 09:56 Ivo Prikryl | Brno
Rozbalit Rozbalit vše motion menu??
Jestli to ted dobre chapu, tak v principu musite nejakym sofistikovanym video editorem reendrovat video z te sceny kterou chcete nahlizet, do oblasti tlacitka. A to pro kazde tlacitko. Vysledkem bude zase jeden hotovy videoklip urceny jako pozadi menu, do kterého se pak uz jenom pridaji masky tlacitek v aktivnim stavu.
23.1.2004 12:35 Milda
Rozbalit Rozbalit vše motion menu??
Ufff, tak tohle vzdavam a zustavam u MS Ulead video studio
23.1.2004 13:01 Pepino
Rozbalit Rozbalit vše motion menu??
Jsem naprosty laik v teto oblasti, ale co takhle udelat pruhledne/neviditelne tlaciko, ktere se prekryva s jednotlivymi framy. Tzn. vytvorit to video ktere bezi na pozadi ze vice ruznych do jednotlivych casti menu.
12.7.2004 02:13 Vláďa
Rozbalit Rozbalit vše Re: motion menu??
Program DVDAuthor GUI (pouze pro Wokna) přesně tohle dělá. Na domovské stránce je ukázka, vypadá moc pěkně. Tak se můžete podívat na command line a AviSynth script, který DVDAuthor GUI vytvoří a stejně to pude i v Linuxu. DVDAuthor GUI pouze napíše .bat soubor, který následně spustí. Menu vytvoří pomocí OpenSource programu AviSynth. Vláďa
Stanislav Brabec avatar 22.1.2004 13:10 Stanislav Brabec | skóre: 45 | Praha
Rozbalit Rozbalit vše Ticho
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud potřebuji ticho, nenahrávám ho ze zvukové karty, ale pomocí dd ... if=/dev/zero of=ticho.raw. Pak ho pomocí sox převedu na formát, který potřebuji. Takové ticho je digitální a neobsahuje šum a pazvuky.
25.1.2004 17:05 Resler
Rozbalit Rozbalit vše xml soubory pro menu
Odpovědět | Sbalit | Link | Blokovat | Admin
Dik za skvely clanek. Bojuji s vytvarenim menu.Mohl by mi nekdo poradit, jak ma spravne vypadat definicni soubor pro spumux a dvdauthor pro jednoduchy pripad jednoho hlavniho menu s nekolika tlacitky odkazujicimi na jednotlive tituly (resp. na jednotlive kapitoly)? Nejak mi to zatim nefunguje. Dik za kazdou radu.
26.1.2004 20:23 Ivo Prikryl | Brno
Rozbalit Rozbalit vše xml soubory pro menu
XML pro Spumux muzes pouzit stejny, jako v prikladu. Dulezity je xml pro dvdauthor. Tam se definuje, co ma ktery tlacitko delat. Na konci za clankem je priklad na menu se dvema podmenu. Dival jsi se ? Budes mit jenom hlavni menu a z jeho jednotlivých tlacitek muzes skakat na jednotlivé odstavce. Menu v Titleset muzes vynechat, z nich pouzijes definici funkce tlacitek.
26.1.2004 22:50 Mirek Bartak
Rozbalit Rozbalit vše xml soubory pro menu
Netrpělivě jsem čekal na druhý díl článku. Nedokázal jsem vložit spumuxem než jedno tlačítko. Kaffeine jsem nedokazal přinutit číst z adresáře a tak jsem výsledek zkoušel vypálením obrazu na CD-RW a tak dokola celou neděli. Editace xml souboru dvdauthora je z vašich příkladů naprosto jasná, ale spumux je pro mě oříšek. Pokud by bylo možné zveřejnit nějaký spumux s více tlačítky jistě bych více užil neděli. Dále bych se rád dozvěděl rozdíl mezi title a chapter a jak se z nich dostat zpět na hlavní menu. Příklad bych podle reakce na článek viděl např.: z hlavního menu volat samostatně nejméně dvě krátká videa (samostatnými tlačítky) a po přehrání každého návrat do hlavního menu. Předem děkuji za třetí díl.
2.2.2004 12:02 Ivo Prikryl | Brno
Rozbalit Rozbalit vše xml soubory pro menu
Kdyz najdu chvilku casu udelam 3 dil kde popisu vytvoreni slozitejsiho Menu-systemu. :-)

Na nize uvedenem linku si muzes stahnout XML pro DVD které ma Hlavni menu + dve podmenu.

V hlavnim menu (2 tlacitka) muzes primo hrat video nebo skocit do podmenu.

Z kazdeho podmenu (kazde 8 tlacitek) muzes primo skocit na 6 odstavcu hlavni kapitoly, zpatky do hlavniho menu a do druheho podmenu.

link je: http://mail.eurosat.cz/dvd/my2.xml.gz

Pokud bude zajem, muzu tam pridat i hotove obrazky + masky v jpg a png.
2.2.2004 13:57 Vladimír
Rozbalit Rozbalit vše spumux padá
Odpovědět | Sbalit | Link | Blokovat | Admin
Zkouším si udělat menu, ale po spuštění spumux mi vypíše hlášku o tom, že tlačítka jsou png a mají 16 barev a pak že umřel a něco o assertion, colorpal a nějakém přiřazení. Hlášku tady nemám, takže jen takhle po paměti...

(debian testing, dvdauthor 0.6.7 (0.6.8 se mi nepodařilo přeložit...))

lze menu udělat i jinak?
14.2.2004 11:35 Lojza Chytil | skóre: 19 | Olomouc
Rozbalit Rozbalit vše spumux padá
Co jsem vyčetl tak v obrázku PNG mohou být použity max 4 barvy.
4.2.2004 18:48 PeZ
Rozbalit Rozbalit vše Titulky
Odpovědět | Sbalit | Link | Blokovat | Admin
Vyborny clanek diky, jedine co by me zajimalo je jak do videa dostat titulky. Kdysi v hystorii jsem se snazil vyrobit si SVCD a titulky sem musel prikodovad primo do videa. Je nejaka moznost jak to udelat regulerni titulky ?
15.10.2004 04:32 RadoR | Bratislava
Rozbalit Rozbalit vše spumux - subtitles addet
Odpovědět | Sbalit | Link | Blokovat | Admin
Ďakujem za článok, pokúšam sa vytvoriť cez spumux podtituly a stále dostávam tento výstup:
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.
9.3.2006 12:02 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Jak vytvořit vlastní DVD pod Linuxem - II
Odpovědět | Sbalit | Link | Blokovat | Admin
Nevíte někdo jak z jednoho obrázku pomocí mencoderu vytvořit 5s statické video v MPEG-4 v kontejneru AVI? Podle odkazu níže umím vyrobit jen video s jedním snímkem. Přece to nebudu dělat tak, že si vyrobím těch snímků 125? http://www.mplayerhq.hu/DOCS/HTML-single/cs/MPlayer.html#menc-feat-enc-images

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.