2024. május 1., szerda

Gyorskeresés

DVD menü 1x1 – Az alapok

  • (f)
  • (p)
Írta: |

Apa, kezdődik! Egy cikksorozatot szeretnék elindítani, ami DVD menü szerkesztéssel foglalkozik,...

[ ÚJ TESZT ]

Apa, kezdődik!

Egy cikksorozatot szeretnék elindítani, ami DVD menü szerkesztéssel foglalkozik, leginkább „programozási” szinten, de lesz szó a menü tartalmi módosításáról is (kép és hang szerkesztése, menü „tömörítése”, stb.). Nem posztoltam még a Logout-on, ezért nézzétek el nekem, ha nem vagyok teljesen tisztában az itt történő publikáció írott vagy íratlan szabályaival.

A DVD menü működése a PGCEdit nevű ingyenes menüszerkesztő programon keresztül lesz bemutatva (innen letölthető), de a leírtak valószínűleg más programban is hasonlóan működnek. A választás azért esett a PGCEditre, mert teljes mértékben a DVD-szabványban lefektetettek szerint működik, mindent meg lehet vele csinálni, és még annál is többet, és nem utolsó sorban ingyenes. Köszönet érte a készítőjének, r0lz-nak!

A DVD

Gondolom a Logout-on jelenlévők nagy többsége látott, fogott, esetleg még szagolt is DVD lemezt. Őszintén szólva én már kóstoltam is, íze, mondhatni, plasztikus.
A DVD-ROM-ra és az azt lejátszó eszközökre vonatkozó szabványt 1995. végén véglegesítették, majd 1996-ban írásos formába rögzítették azt ékes japán nyelven. Ez tartalmazta a DVD-ROM-ra rögzített video tartalomra (DVD-VIDEO) érvényes specifikációkat is. Ezt aztán lefordították angolra, majd az angolt további nyelvekre. Azt mondják a nyelvezete vetekszik a jogszabályokéval. Ezért is van az, hogy a specifikáció értelmezése egyes olvasatokban eltérő lehet. Miért is hozom fel ezt? Azért, mert az egyes DVD-lejátszót gyártó cégek DVD-szabvány implementációja/megvalósítása eltérő lehet. Emiatt vannak viselkedésbeli különbségek az egyes lejátszók között, pl.: Mi történjen, ha egy PGC-ben a tartalom lejátszása után elfogynak a parancsok - vagy nincsenek is, és nincs explicit „befejeztetve” egy EXIT paranccsal? A regiszterek automatikusan inicializálódnak-e, vagy pedig manuálisan meg kell azt tenni, mielőtt hivatkoznánk rá? És ezekhez hasonlók.
Így egy lemez másképp viselkedhet különböző lejátszókban. Ezért szokták a kiadók minden eshetőségre felkészíteni a DVD-iket, nem a különböző lejátszó gyártók szövegértelmezési képességeire hagyatkoznak.

A DVD szerkezeti felépítése

Csak olyan szinten foglalkozok vele, amennyire szükség van a DVD menü működésének megértéséhez. A magyar terminológiát nem ismerem – ha egyáltalán van ilyen -, ezért az angol elnevezéseknél maradok.
Aki megnéz egy dvd-video lemezt (ezentúl kis betűvel írom, mert így kényelmesebb), az láthat rajta egy vagy több könyvtárat, attól függően, hogy milyen extra tartalmak találhatók még a lemezen az adott műsoron kívül Például: egyes lemezeken számítógépen használható tartalmak is találhatók, az adott film témája alapján készített háttérképek, képernyővédők stb.

(Kép)

Ami számunkra fontos, az a VIDEO_TS könyvtárban találhatók (az AUDIO_TS könyvtár a dvd-audio lemezek esetén lényeges, dvd filmek esetén üres, vagy akár nincs is). Ezek pedig az .ifo, .bup, .vob kiterjesztésű fájlok.
Az .ifo fájlok InFOrmációkat tartalmaznak a dvd tartalmára, szerkezetére, lejátszására vonatkozóan. Ezekben a fájlokban vannak például az egyes PGC-k parancsai is.
A .bup kiterjesztésű fájlok az .ifo fájlok BackUP-jai, biztonsági másolatai, ha valamelyik .ifo fájl nem olvasható, akkor a lejátszó az adott .bup fájlt veszi elő. Épp ezért általában fizikailag nem közvetlen az .ifo fájlok után kerülnek a lemezen rögzítésre.
Végül a .vob-ok pedig Video OBject-ek, ezek tartalmazzák a képet, hango(ka)t, felirato(ka)t, navigációs adatokat.
Ha a kiterjesztések mellett megnézzük a fájlneveket is, akkor láthatunk VIDEO_TS.xxx és VTS_xx_x.xxx nevű fájlokat. Az előbbiek a „Video ManaGer”-hez tartoznak, az utóbbiak a „Video Title Set”-ekhez. VMG-ből mindig egy van, itt van eltárolva a „First-play PGC”, és ha van, a „Title menu” is. VTS-ekből minimum 1, maximum 99 található egy dvd-n. Ezek tartalmazzák az egyes műsorrészeket, és ha van, a hozzájuk tartozó menüket.
Kompatibilitási okok miatt az egyes VTS-eket alkotó VOB-ok 1GB-os darabokra vannak osztva, de a darabok valójában (a 0.-at leszámítva, mert az a menünek van fenntartva) összefüggő fájlt alkotnak, logikailag 1 fájlként kezelendők. A dvd tartalma elférne egy VTS-ben is, mert elvileg 9GB-ot lehetne belesűríteni, de tartalmi szempontból fel szokták osztani: egy VTS-ben a film, külön VTS-ben az egyéb tartalmak, extrák. Gyakorlatilag még ezt is tovább szokták bontani, külön VTS-be rakják pl. a törölt jeleneteket, és a filmelőzeteseket, mert könnyebben átlátható struktúrát eredményez a tartalmak ilyetén csoportosítása.

Kép

Az egyes VTS-ek két részre bonthatók, egy „menu” (opcionális) és egy „title domain”-re, a VMG a „First-play PGC”-re és egy menüre, VMGM-Video ManaGer Menu (opcionális). A „menu domain”-ben az adott VTS menüje, a „title domain”-ben pedig egy vagy több title (műsor) található. Pl.: tegyük fel, hogy egy dvd-n a 1db VTS van, aminek van egy menüje és a „title domain”-jében két title található a „title1” filmet tartalmazza, a „title2” pedig a dvd-t kiadó stúdió „intróját”.
A dvd-n található video tartalom cellákra vannak felbontva, a cella a dvd legkisebb hivatkozási egysége, az egyes cellák külön elérhetők, külön lejátszhatók. Egy film a dvd-n logikailag egy vagy több cella sorozataként jelenik meg, a menük videói szintén cellákra vannak bontva. Ez a cellafelosztás a dvd authorizálásakor dől el, ott adhatjuk meg, hogy mi merre hány méter. A cellarendszernek köszönhető az, hogy gombnyomással ugrálhatunk a fejezetek között., vagy, hogy egy-egy jelenetet különböző látószögekből tekinthetünk meg.

A lejátszás folyamata

A dvd lejátszása egy program lefutásához hasonlítható, egy programéhoz, melynek feladata egy bizonyos kép- és hanganyag bemutatása, és a felhasználóval való interakció megteremtése, ami jelen esetben a gombokat nyomkodó dvd nézőt jelenti.
Ennek érdekében a szabvány kitalálói megalkottak egy „primitív” programnyelvet, melynek parancsai a lemezen találhatók, és egy parancsértelmezőt, egy interpretert, amit „Virtuális Gép”-nek kereszteltek, ez egy kis szoftver, ami dvd-lejátszóban fut, és az utasításokat fordítja le a játékos nyelvére (értsd: pl. egy „LINKCN CELL1” utasítás eredményeként az olvasófejet az adott szektor kezdőcímére állítja).

(Kép)

Ez a bizonyos program, ami a lemez lejátszása során lefut, programozási egységekre van bontva, PGC-kre. A PGC a „ProGram Chain” rövidítése. Tehát, maga a program PGC-k együttese, a PGC-k az utasításoknak megfelelő sorrendben történő végrehajtása. Alapvetően két fajta PGC-t különböztetünk meg, a „normál” PGC-t, ami tartalmaz képanyagot, egy vagy több cella áll mögötte, és van az úgynevezett „dummy” PGC, ez egy üres PGC, csak utasításokat tartalmaz.
Egy normál PGC 4 szekcióból áll:
- Van egy „pre commands” szekció, az itt szereplő utasítások hajtódnak végre sorrendjüknek megfelelően.
- Van egy tartalmi szekció, ami kép vagy kép- és hanganyagot tartalmaz, és egy vagy több cellából áll, a cellák lejátszása egymás után történik, hacsak cella parancsokkal felül nem írjuk ezt a sorrendet.

(Kép)

A cellák csoportosíthatók „programokká”, egy „program” egy vagy több cellából állhat. A „programok” segítségével cellacsoportokra tudunk hivatkozni. (Pl. Van egy PGC, ami a hang- és felirat beállítások menüpontja. A menüpont 3 különböző nyelvű menürésszel bír, és 6 cellája van. Az első cella a hangbeállítások magyarul, a második a felirat beállítások magyarul, a köv. kettő mondjuk hang és felirat beállítás angolul, az utolsó kettő pedig oroszul. Úgy adjuk meg a „programokat”, hogy a program1 tartalmazza a cella1-2-t, a program2 a cella 3-4-et, a program3 pedig a cella5-6-ot., ennek segítségével az angol nyelvű menüre egy program2-re való ugrással tudjuk elérni. Hogy miért jó ez? Mert, ha a menü minden menüpontjánál hasonlóan osztjuk fel a cellákat, akkor elérhetjük azt, hogy a program2 mindig az angol nyelvet jelentse, attól függetlenül, hogy mondjuk a jelenetválasztás menüpontnál 12 cella van, csak ott a program2-höz a cella5-8 fog tartozni. Remélem, érthető voltam.)
- Van egy „post commands” szekció, az itt szereplő utasítások a tartalmi rész lejátszása után hajtódnak végre.
- És végül van egy „cell commands” szekció, ahol az úgynevezett cella parancsok szerepelnek. A tartalmi szekcióban lévő cellák „cell command” rubrikájánál megadható egy sorszám, ha ez szerepel, akkor a cella lejátszása után az adott cella parancs hajtódik végre.
Tehát, egy PGC a következőképp hajtódik végre: „pre commands” -> tartalmi szekció (cellák), minden egyes cella után a hozzá tartozó cella parancs, ha van -> „post commands”. Ha bármelyik utasításszekciónál (pre, cell v. post commands) olyan utasítás szerepel, amely felfüggeszti, befejezteti az adott PGC-t, vagy átadja a vezérlést egy másikra, akkor értelemszerűen módosul a fenti sorrend.
Vannak nevesített PGC-k, melyekre általában közvetlenül lehet hivatkozni egy másik domain-ből vagy VTS-ből:
- „First-play PGC”: a lemez elindításakor erre a PGC-re kerül a vezérlés, az itt szereplő utasítások hajtódnak végre először, a VMG része.
- „Title menu”: a VMGM menüjének egyik PGC-je nevesíthető imigyen, általában az első, a távirányító TITLE MENU vagy TOP MENU gombjának megnyomásakor erre a PGC-re ugrik a vezérlés.
- „Root menu”, „Audio menu”, „SubPic menu”, „Scene menu”, „Angle menu”: egy VTS menu domainjének egy-egy PGC-jéhez lehet ezeket a neveket hozzárendelni. Ha egy adott VTS-en van a vezérlés (a title vagy menu domainben), akkor ezen PGC-k közvetlenül elérhetők egy gombnyomással feltéve, ha van ilyen gomb a távirányítón, és van ilyen nevesített PGC az adott VTS menu domainjében.
Mivel a számozott Title-ök is PGC, ezért ezek is tekinthetők nevesített PGC-knek, mivel a nem számozott title-ökre csak az adott VTS-en belül lehet hivatkozni.

A DVD programozási nyelve

A dvd programnyelvének eszköztára nem túl bőséges, de legalább nem kell utasítások tucatjait megjegyezni.

Kép

Az utasítások 5 fő csoportba sorolhatók:

- FLOW CONTROL: egy adott szekción (pre, post v. cell) belüli vezérlő utasítások, mindegyik utasításhoz rendelhető egy feltételvizsgálat az IF ág beikszelésével az utasítás ablakában, ilyenkor csak a feltétel teljesítése esetén hajtódik végre az utasítás, különben a következő sorra ugrik a vezérlés:
• NOP – üres utasítás,
• GOTO – a paraméterként megadott sorszámú sorra ugrik,
• BREAK – befejezteti az adott rész működését, és a vezérlés a következő részre ugrik (pl. ha a „pre commands”-nál adjuk ki ezt az utasítást, akkor a tartalmi részre, az első cellára ugrik a vezérlés),
• SetTmpPML – a szülői felügyeleti jog szintjét állíthatjuk be vele, ha a lejátszó beállításainak megfelelően engedélyezve van az ilyen szintű tartalom lejátszása, vagy, ha jelszóhoz van kötve és a jelszó megadása sikeres volt, akkor a paraméterként megadott sorra ugrik.
• EXIT – abbahagyja a dvd lejátszását

- LINK: PGC-k és PGC szekciók közötti vezérlő utasítások, IF feltétel itt is megadható. Továbbá megadható egy „highlight button” paraméter is, ebben az esetben, ha az adott PGC tartalmi szekciója tartalmaz gombokat, akkor az adott gomb válik aktívvá. (Pl. a „LinkPGCN 2, highlight button 3” parancs hatására 2. PGC-re ugrik a vezérlés, és a tartalmi szekció legelső gombokkal rendelkező cellájának 3. gombja válik aktívvá, ha eljut odáig a vezérlés)
• LinkPGCN: a paraméterként megadott számú PGC-re ugrik a vezérlés
• LinkTopPGC / LinkTailPGC / LinkNextPGC / LinkPreviousPGC / LinkGoUpPGC: ugrás az adott PGC „pre commands” szekcióhoz / ugrás a „post commands” szekcióhoz / ugrás az következő PGC-re, a PGC adatlapján a „NextPGC link” mezőben megadott sorszámú PGC-re ugrik/ ue. csak a „Prev.PGC link” mezőben megadottra ugrik / mint az előzők, csak a „Go Up (Return) link” mezőnél megadottra ugrik, ha megnyomjuk az adott PGC végrehajtása során a távirányítón a RETURN gombot, ue. hajtódik végre. Csak cellaparancsként használhatók!
• LinkPGN: a paraméterként megadott programra ugrik a PGC tartalmi szekciójában. „Program” alatt itt az értendő, amit a PGC tartalmi részénél leírtam.
• LinkgTopPG / LinkNextPG / LinkPrevPG: a tartalmi szekció első programjára ugrik / következő programra ugrik / előzőre ugrik, csak cellaparancsként használhatók.
• LinkCN: a paraméterként megadott cellára ugrik a tartalmi szekcióban.
• LinkTopCell / LinkNextCell / LinkPrevCell: ua. mint a programoknál, csak cellákra.
• LinkPTT: egy title-ön belül ugrik a paraméterként megadott fejezetre. Talán, ha egyszer láttam már ilyet dvd-n.
• LinkNoLink: csak cellaparancsként használható, a paraméterként megadott gomb aktivizálódik. Sosem láttam még használatban.
• RSM (Resume): a menühívás előtti utoljára játszott title-re adódik vissza a vezérlés. VMGM-ben és „menu domain”-ben használható.

- JUMP: VMGM-VTS közötti és egy VTS-en belül menu-title domain közötti ugró utasítások. „VTS title domain”-ben tilos a használata. IF feltétel ezeknél az utasításoknál is megadható.
• JumpSS-FP: VMGM-ben vagy „VTS menu domain”-ben kiadható utasítás, melynek hatására a „First-play PGC”-re adódik át a vezérlés.
• JumpSS-VMGM-menu: „First-play PGC”-ből, VMGM-ből, vagy „VTS menu domain”-ből ugrik a VMGM nevesített PGC-jére a „title menu”-re.
• JumpSS-VMGM-pgc: „First-play PGC”-ből, VMGM-ből, vagy „VTS menu domain”-ből ugrik a VMGM paraméterként megadott számú PGC-jére.
• JumpSS-VTSM: „VTS menu domain” nevesített PGC-jére ugrik (Root, Audio, SubPic, Chapter, Angle), kiadható a „First-play PGC”-ben, VMGM-ben. Az „VTS menu domain”-ek közötti ugrás tiltva van, mégis működik sok lejátszón. Ennek ellenére nem „illik” használni.
• JumpTT: „First-play PGC”-ből, vagy VMGM-ből ugrik a paraméterként megadott nevesített title-re. VTS-en belül nem használható.
• JumpVTS-TT: az előbbi VTS-es belüli változata, „title és menu domain”-ből is kiadható, a paraméterként megadott számú title-re ugrik.
• JumpVTS_PTT: nincs a „by type” felsorolásban, de a jump-ok között megtaláljuk, VTS-en belül az első paraméterként megadott title második paraméterként megadott chapter-ére/fejezetére ugrik. Jelenetválasztó menük kedvelt megoldása.

- CALL: a „jump” utasítások „VTS title domain”-ben használható megfelelői. IF feltétel megadható.
• CallSS-FP: „title domain”-ből ugrik a „First-play PGC-re”, paraméterként megadható, hogy RSM (resume) utasítás után a hívó title melyik cellájára térjen vissza a vezérlés.
• CallSS-VMGM-menu: „title domain”-ből ugrik a VMGM nevesített „title menu”-jére. Itt is megadható, hogy RSM után melyik cellára térjen vissza.
• CallSS-VMGM-pgc: „title domain”-ből a VMGM paraméterként megadott számú PGC-jére ugrik. Itt is megadható, hogy RSM után melyik cellára térjen vissza.
• CallSS-VTSM: VTS-en belül ugrik a „title domain”-ből, a „menu domain” nevesített PGC-jére.

- Set:

a rendszer és általános célú regiszterek beállítását szolgáló utasítások. Itt jön egy kis kitérő. Az dvd programozási eszköztára nem merül ki a fent említett utasításokkal, léteznek adattárolásra alkalmas eszközök, az úgynevezett regiszterek. A regisztereknek két csoportja van, vannak az általános célú regiszterek (GPRM-General PaRaMeter register), 16db van belőle 0-15-ig számozva, azért hívják általános célúnak őket, mert a dvd készítője dönti el, hogy melyik feladatra, melyiket használja, a másik csoport a rendszer regiszterek (SPRM-System PaRaMeter register) ezekből 24 van (0-23), az SPRM-ek a GPRM-ekkel ellentétben nevesített regiszterek, meghatározott célra használhatók, csak egy részük állítható manuálisan, a többit a rendszer kezeli. A nem beállítható SPRM-ek között van olyan, ami azt tárolja, hogy épp melyik VTS-en van a vezérlés, vagy hányadik fejezetnél tart a lejátszás, van olyan, amelyik a lejátszón beállított preferált menü-, hang- és feliratnyelv kódját veszi fel értékül, ezekről most itt nem lesz szó. Ha majd egy adott feladat megoldásakor felmerül a szerepük, akkor előveszem a témát újra.

• SetGPRM: egy legördülő listáról kiválasztható, hogy mely regiszter értékét akarjuk módosítani, egy másik listából pedig kiválasztható az elvégzendő művelet: MOV-egyszerű értékadás, a regiszter a megadott paramétert veszi fel értékéül, ADD-értéknövelés a paraméter értékével, SUB-értékcsökkentés, MUL-szorzás, DIV-egész osztás, MOD-maradékos osztás, RND-kerekítés, és a logikai műveletek: AND-és, OR-vagy, XOR- nem vagy, és végül a SWAP-értékcsere, ennek két regiszter esetén van értelme. Továbbá kiválasztható, hogy a paraméter egy konstans legyen, egy másik GPRM értéke, vagy egy SPRM értéke. IF feltétel is megadható. És utótagként egy opcionálisan egy LINK (a LINK utasításnál leírtak szerint) művelet is elvégezhető, sőt egy aktívgomb-beállítás is (HIGHLIGHT BUTTON). Van még további 4 kibővített GPRM-beállító parancs, de ezekkel nem foglalkozok, mert gyakorlati hasznuk a nullához konvergál, és abban sem vagyok biztos, hogy minden lejátszó megfelelően kezeli őket.
• SetSPRM. AUDIO/SUBPIC/ANGLE: megadhatók külön külön, vagy egy utasításként is. Utóbbi esetben, ha bármelyiknél nem valós sávra hivatkozunk, a következő beállítás nem fog végrehajtódni. Pl. egy SET AUDIO=3/SUBPIC=2; esetén, ha nem létezik 3. hangsáv, akkor a felirat beállítás már nem fog végrehajtódni, ezért szokták külön-külön beállítani őket. Értékként megadhatunk konstanst (hang: 0-15, felirat:0-31, látószög:1-9), vagy általános célú regiszter tartalmát (GPRM). IF feltétel megadható, továbbá hozzákapcsolhatunk a beállító utasításhoz egy LINK parancsot is.
• SetHL_BUTTON: egy PGC-n belül állítható vele, hogy a majd megjelenő menü gombjai közül melyik legyen aktív. Értékadásnál ha konstanst adunk meg arra figyelni kell, hogy a „gomb száma”*1024 értéket kell megadni (PGCEditben ez automatikusan beszorzódik), tehát, ha azt akarjuk, hogy a menü 2. gombja legyen aktív, akkor „SetHL_BUTTON= (mov) 2048” utasítást éri el a kívánt hatást, GPRM értékén is átadhatjuk. IF feltétel megadható, és ehhez az utasításhoz is kapcsolható egy LINK parancs
• Van még további 3 állítható SPRM, de azokkal nem foglalkozok, mert sose fogja senki sem használni őket, hacsak nem karaoke lemezt gyárt.

Itt a vége az első résznek. Ha valami nem tiszta, nyugodtan kérdezzetek, ha valami hibát elírást találtok, azt is jelezzétek bátran. Továbbá, várom a javaslatokat azoktól, akiket érdekel a téma, hogy hogyan tovább, miről szóljanak a következő leírások.

- RRIP

Előzmények

  • .ts .mpg .vob-ból DVD

    A digitális televíziózás nyugdíjba küldi az analóg sugárzást. A felvételek rögzítése és...

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.