I menu formato 16:9

Creiamo automaticamente la doppia struttura per i menu


Abbiamo visto che il meccanismo del letterbox non funziona per i menu (e in generale con i sottotitoli) per cui ci tocca creare delle maschere apposite da mostrare nel caso di riproduzione in letterbox.

La prima soluzione a cui ho pensato è stata quella di generare due set di menu e gestire da codice lo scambio utilizzando l'informazione fornita dal registro s14 per sapere se stiamo utilizzando uno schermo widescreen o uno tradizionale con il letterbox.

Ulteriori ricerche mi hanno fatto trovare una soluzione più semplice: DvdAuthor a partire dalla versione 0.6.12 consente di avere più maschere caricate sugli stessi menu e di specificare in fase di dichiarazione del menu quale usare per la modalità "normale", "letterbox" o anche altre.

La dichiarazione di un siffatto menu avviene in questo modo:


<menus>
  <video format="pal" aspect="16:9" />
  <audio format="ac3" lang="it"/>
  <subpicture>
    <stream id="0" mode="widescreen" />
    <stream id="1" mode="letterbox" />
  </subpicture>
  <pgc entry="root">
    <button>jump vmgm menu 6;</button>
    ...
    <vob file="menu\playmenu.mpg" pause="inf" />
  </pgc>
  <pgc>
  ...
</menus>

La prima cosa da notare è che la dichiarazione delle subpictures (cioè i sottotitoli) è comune a tutti i menu del titleset e questo non dovrebbe sorprenderci in quanto già sappiamo che tutti i filmati verranno concatenati in un unico file e quindi devono obbligatoriamente avere lo stesso formato.

Quello che invece non sta scritto da nessuna parte sono le modalità che si possono utilizzare per gestire i vari casi: quelle utilizzate nell’esempio le ho trovate su un forum e chi ha postato il messaggio ha detto di aver trovato la giusta combinazione per tentativi.

Adesso che sappiamo come affrontare lo scambio delle maschere ci rimane il problema di generarle.

Sappiamo che dobbiamo schiacciarle, ma quanto? Dobbiamo scalare l'immagine in modo che un fotogramma 1024x576 stia all'interno di un rettangolo 768x576 per cui impostiamo la proporzione


1024 : 768 = 576 : y

che risolta ci fa trovare un'altezza pari a 432 pixel. Possiamo anche calcolare l'altezza delle bande nere che si trovano sopra e sotto l'immagine con l'espressione


(576 - 432) / 2

che ci ritorna un valore di 72 pixel per banda.

Notiamo che sullo schermo queste bande appariranno alte circa la metà del valore che abbiamo calcolato a causa dell'overscan del televisore.

Calcolati i valori per le dimensioni possiamo quindi aggiungere al programma maketextmenu.wsf queste poche righe che dapprima generano la maschera “schiacciata” semplicemente modificando le dimensioni del resize finale. Il file intermedio ottenuto viene incollato su un frame standard 720x576 per ottenere l’immagine finale.


arrm[j*4+8] = "720x432!"; 

var cmd = "im.Convert(\"" + arrm.join("\",\"")+"\",\"png8:"+filename+"_page_43_mask.png\")";
eval(cmd);

im.Convert("-type","Palette","-colors","2","xc:transparent","-resize","720x576!",filename+"_page_43_mask.png","-geometry","+0+72","-composite","png8:"+filename+"_43_mask.png")

Qualche altro ritocco è stato necessario per i nomi dei file generati e soprattutto per le dimensioni dell’immagine di partenza che ora è di 1024x576 pixel; il programma modificato completo è visibile nel Listato 11 (Nuova pagina).

Modifiche del tutto analoghe sono necessarie nel programma che monta le immagini con in più la complicazione che le immagini di partenza possono essere con aspect-ratio 4:3 oppure 16:9 su uno sfondo sempre 16:9. Ho aggiunto un parametro con cui dichiarare quale formato si sta usando, inoltre per semplicità non ho gestito il caso misto. Tutto questo perchè con questo tipo di menu non si fa solo la selezione scene, in cui ovviamente tutte le immagini hanno lo stesso aspect-ratio, ma anche le selezioni dei contenuti speciali che possono avere i formati più disparati. (Listato 12 (Nuova pagina))

Infine dobbiamo modificare le righe in cui utilizziamo spumux per inserire le maschere nei filmati: la nostra pipe verrà raddoppiata in questo modo


set name=mainmenu
makespumuxxml /filename:%name%_43 
makespumuxxml /filename:%name%_169 
spumux -s 0 %name%_169.xml < %name%.mpg | spumux -s 1 %name%_43.xml > %name%_menu.mpg

Dapprima creiamo due file di configurazione con l’utility che ci siamo creati e poi facciamo fare due passaggi a spumux specificando ogni volta, con il parametro -s, un diverso id che sarà poi da richiamare nella definizione del menu dentro DvdAuthor.

Da notare che i messaggi a video di spumux appaiono mischiati e questo può rendere difficoltoso capire se un eventuale problema si presenta nel primo o nel secondo passaggio: in tal caso si può dividere la pipe in due utilizzando un file temporaneo.

Ho avuto questa necessità a causa di un problema con le versioni Windows di ImageMagick che in versioni recenti gestiscono male le trasparenze su alcuni PC (tra cui quello che uso per questa attività) e che quindi mi generavano maschere senza bottoni.

Inizio pagina
 
Precedente
Sommario
Successivo