I sottotitoli

Creiamo sottotitoli in più lingue.


Tutti sappiamo che nei DVD si possono inserire dei sottotitoli (fino ad un massimo di 32) con le funzioni più disparate: traduzione dei dialoghi in lingue diverse, informazioni per non udenti, commenti del regista, karaoke o anche realizzare funzioni interattive come i menu.

Abbiamo già fatto conoscenza con lo strumento che serve ad inserirli all'interno dei nostri filmati, quali sono le limitazioni a cui devono sottostare e quali problemi ci possono dare.

Ora analizzeremo un meccanismo che ci permetterà di generare più flussi in lingue diverse e di inserirli nel filmato in momenti prefissati.

Nell'esempio specifico saranno generate delle didascalie con l'indicazione dei luoghi visitati in un tipico filmino delle vacanze; inoltre, poichè il tutto è ambientato in Alto Adige ho inserito anche i toponimi in tedesco.

I testi da rappresentare sono inseriti in una struttura come quella del Listato 13 (Nuova pagina).

Questo file inizia, come consuetudine per ogni file XML, con la processing instruction dove si dichiara che è un file XML 1.0 (e altro non può essere), ma soprattutto il tipo di encoding dei caratteri (che nel caso specifico è ISO-8859-1).

È fondamentale dichiarare l'encoding corretto se si intendono utilizzare caratteri al di fuori del set ASCII, come le vocali accentate dell'italiano o le dieresi del tedesco, altrimenti il parser XML si fermerà subito lamentandosi per la presenza di caratteri non ammessi.

Il file è costituito da una sequenza di dichiarazioni come questa:


<caption start="2:02" end="2:12">
  <it>Molini di Tures</it>
  <de>Mühlen in Taufers</de>
</caption>

Si riconoscono gli istanti di inizio e fine della visualizzazione e le stringhe con i testi nelle varie lingue.

Ovviamente il meccanismo può essere utilizzato anche per distinguere sottotitoli di vario tipo (come i commenti del regista), basta inventarsi un tag.

Questo file viene letto dal programma del Listato 14 (Nuova pagina) che si occupa di generare tutte le immagini necessarie nonchè il file XML di controllo per spumux.

Come per tutte le altre utility iniziamo dall'analizzare la lista dei parametri:

  • filename Il nomefile del filmato
  • font Eventuale tipo di carattere (default: verdana)
  • pointsize Eventuale dimensione del carattere (default: 35)
  • vpos Eventuale distanza dal fondo pagina (default: 35)
  • color Eventuale colore del carattere (default: white)
  • language Eventuale lingua (default: it)

Il programma cerca un file di nome filename.xml con il contenuto che abbiamo visto, lo scorre, e per ogni tag caption incontrato inserisce un elemento nel file di controllo che servirà a pilotare spumux; il file che ne risulterà avrà questa struttura:


<subpictures>
  <stream>
    <spu start="0:12" end="0:22" image="temp\taufers_0_it.png"/>
    <spu start="0:55" end="1:05" image="temp\taufers_1_it.png"/>
    ...
  </stream>
</subpictures>

Subito dopo viene richiamato ImageMagick per generare l'immagine con il testo su sfondo trasparente. Da notare che tra i parametri passati al metodo convert c'è anche +antialias che, a dispetto del più, disabilita l'antialias nella generazione del contenuto vettoriale (nel nostro caso i caratteri).

Non dobbiamo infatti dimenticare che abbiamo a disposizione un massimo di quattro colori per i sottotitoli e quindi non ne abbiamo a sufficienza per le sfumature necessarie all'antialias.

L'effetto scaletta che ne risulta, abbastanza evidente su un monitor da PC, viene mitigato durante la visione sul televisore dalla ridotta banda passante di quest'ultimo che rende tutti i contorni più sfumati. Per lo stesso motivo è bene utilizzare caratteri senza grazie (come l'arial) e magari in grassetto.

Il programma elabora una lingua alla volta per cui in questo esempio dovrà girare due volte.

Ottenute tutte le immagini e i file di controllo bisogna realizzare una pipe dove venga richiamato spumux tante volte quante sono le lingue da gestire. Ecco come fare:


set name=taufers
makesottotitoli /filename:%name% /font:hatten.ttf
makesottotitoli /filename:%name% /font:hatten.ttf /language:de
spumux -s 0 temp\%name%_spu_it.xml < ..\montati\%name%.mpg | spumux -s 1 temp\%name%_spu_de.xml > %name%.mpg

Abbiamo dunque aggiunto il sottotitolo in italiano con id 0 e quello in tedesco con id 1. Tutto questo non è ancora sufficiente perchè ora dobbiamo spiegare a DvdAuthor come gestire questi sottotitoli.

Lo facciamo inserendo delle dichiarazioni assieme a quelle sui flussi audio e video all'inizio della parte titoli di ogni titleset in questo modo:


<titles>
  <video format="pal" aspect="16:9" />
  <audio format="ac3" lang="it"/>
  <subpicture lang="it" />
  <subpicture lang="de" />
  <pgc>
...

Se ci limitassimo però a fare questo l'unico modo di vedere i sottotitoli sarebbe quello di impostarli con il menu di configurazione del lettore: decisamente poco comodo e professionale.

Il menu dei sottotitoli.
Figura 13-1
Il menu dei sottotitoli.

Dobbiamo quindi ricorrere a codice da programmare all'interno di un apposito menu. A prima vista si tratta solo di inserire nel registro s2 (magari attraverso l'alias subtitle) il numero dello stream che vogliamo mostrare.

Se facciamo solo così andiamo incontro ad un altro problema: il sottotitolo sarà mostrato solo se in una lingua differente da quella dell'audio. Per forzare la visualizzazione del sottotitolo è necessario mettere a 1 il settimo bit del registro s2 (ovvero sommare 64 al numero dello stream).

Conviene usare sempre questa forzatura ed in effetti tutti i DVD che ho esaminato fanno così. Per disattivare i sottotitoli è sufficiente assegnare il valore 62 a s2.

Ho quindi realizzato un menu come quello di Figura 13-1 e ho associato ai quattro pulsanti questo codice:


<button>subtitle = 0x40; button>
<button>subtitle = 0x41;</button>
<button>subtitle = 62;</button>
<button>jump menu 1;</button>

Quello che non mi sarei mai aspettato è che qualsiasi voce scegliessi, ad eccezione dell'ultima, il lettori si bloccassero irrimediabilmente o, nel caso di PowerDVD, si generasse un GPF.

I sottotitoli in letterbox.
Figura 13-2
I sottotitoli in letterbox.

Dopo vari tentativi ho scoperto che tutti i player si arrabbiano moltissimo se una volta selezionato un bottone di menu non si esce dal menu stesso andando in un filmato o in un altro menu. Dove si vede un menu simile a quello di Figura 13-1 , e sembra che non si esca fino alla selezione della voce di uscita, in realtà ci sono tanti menu quante le possibili scelte. Alla selezione dei vari pulsanti, oltre a settare opportunamente il registro s2 si salta al menu con evidenziata in qualche modo la voce scelta.

La soluzione adottata nel Listato 15 (Nuova pagina) è più sbrigativa: appena fatta una scelta valida si ritorna al menu da cui si era venuti; scegliendo l'uscita non si modifica l'impostazione corrente. Il difetto di questo approccio è che non si ha nessuna informazione sull'impostazione attuale.

Per concludere un accenno alla posizione dei sottotitoli sull'immagine a schermo: questi sono centrati orizzontalmente e si trovano ad una distanza dal fondo del quadro video pari al valore del parametro vpos di makesottotitoli.wsf.

I sottotitoli in 16:9.
Figura 13-3
I sottotitoli in 16:9.

Il valore di default è calcolato in modo che in caso di letterbox i sottotitoli appaiano nella barra nera inferiore ( Figura 13-2 ), mentre su uno schermo widescreen sono nella parte bassa dell'immagine ( Figura 13-3 ).

Se avessimo invece bisogno di un posizionamento esatto sull'immagine, che sia il medesimo sia su schermi widescreen che letterbox, potremmo ricorrere allo stesso sistema del doppio stream visto per i menu.

Inizio pagina
 
Precedente
Sommario
Successivo