[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 652.   Introduzione ai DVD video

Il DVD video è semplicemente un disco con un file system UDF, contenente directory e file con nomi prestabiliti, inseriti nel file system con un ordine preciso. Anche un CD può contenere un file system di questo tipo ed essere usato per un filmato di breve durata.

Nonostante la semplicità della sua struttura, un DVD video è difficile da realizzare, quando non si dispone di strumenti che fanno tutto da soli (ammesso che lo facciano bene), perché di norma si devono rielaborare i file in modo da adattarli al formato previsto per i DVD stessi.

652.1   Descrizione superficiale dell'organizzazione di un DVD video

Un DVD video è costituito da un file system UDF, contenente le directory AUDIO_TS/ (che dovrebbe risultare vuota) e VIDEO_TS/. Nella directory VIDEO_TS/ vengono inseriti diversi file, di cui i più importanti sono quelli con estensione .VOB, che rappresentano un contenitore particolare per video MPEG-2 e audio (che può essere rappresentato con diversi formati). Le caratteristiche geometriche del formato video variano a seconda degli standard di riferimento.

Tabella 652.1. Caratteristiche standard del formato dei filmati nei vari standard video per CD e per DVD.

Standard di memorizzazione Geometria per NTSC Geometria per PAL/SECAM Frequenza di campionamento audio
VCD 352×240 352×288 44 100 Hz
SVCD 480×480 480×576 44 100 Hz
DVD 720×480 720×576 48 000 Hz

Dal punto di vista dell'utilizzatore, il contenuto del DVD video è organizzato in «titoli», che a loro volta possono essere suddivisi in «capitoli».

I file contenuti nel DVD rispecchiano la suddivisione in «insiemi di titoli» o title set: VTS_mm_n.*. In pratica, le cifre mm corrispondono all'insieme mm-esimo, mentre n rappresenta la n-esima porzione dello stesso. Spesso, gli insiemi di titoli sono singoli, pertanto la suddivisione che qui è stata indicata come mm rappresenta direttamente i titoli

I file che rappresentano un insieme di titoli (VTS_mm_n.*) hanno una numerazione finale che ne rappresenta la porzione n-esima, perché nel DVD video non ci possono essere file più grandi di un gibibyte (simbolo: Gibyte), ovvero 230 byte, pertanto, diventa necessario suddividere i file .VOB in questo modo. Evidentemente, questa suddivisione in porzioni da un gibibyte non può corrispondere a una suddivisione eventuale in capitoli.

Un DVD video contiene normalmente un menù, realizzato in forma di file .VOB speciale: infatti, oltre che contenere un video MPEG-2 con lo sfondo del menù, deve contenere delle immagini che si evidenziano a seconda dell'azione che si compie (con il mouse o con il telecomando del lettore DVD); quindi, deve contenere dei riferimenti a dei titoli, in base alla selezione compiuta. In pratica, questo file .VOB viene eseguito in modo ripetitivo, per dare il tempo all'utilizzatore di fare la selezione che desidera. Si intuisce che un menù può puntare ad altri sottomenù. Un DVD può anche fare a meno di un menù, ma in tal caso la sua esecuzione può essere solo sequenziale.

652.2   Copia di un DVD video normale

La copia di un DVD video che non abbia protezioni particolari, è un procedimento relativamente semplice: si copiano i file che contiene, con la stessa struttura in una directory; si riproduce un file-immagine con il file system UDF, rispettando l'ordine dei file; si incide la copia.

Si ricorda che la copia di un DVD video è un'operazione che deve essere autorizzata espressamente da chi detiene i diritti di autore.

Viene mostrato il procedimento con un esempio, ipotizzando che il DVD sia letto e poi inciso da un lettore-masterizzatore collocato nell'unità del file di dispositivo /dev/sr0:

  1. mkdir /tmp/dvd[Invio]

    viene creata la directory /tmp/dvd/ per fare la copia del contenuto del DVD video;

  2. mount -t auto /dev/sr0 /mnt/sr0[Invio]

    viene innestato il DVD video nella directory /mnt/sr0/ (che si presume essere già esistente);

  3. cp -dpRv /mnt/sr0/* /tmp/dvd[Invio]

    viene copiato il contenuto del DVD video nella directory /mnt/sr0/;

  4. umount /mnt/sr0[Invio]

    viene staccato il DVD video dalla directory /mnt/sr0/ e quindi viene estratto anche dal lettore-masterizzatore;

  5. mkisofs -dvd-video -o /tmp/dvd.img /tmp/dvd[Invio]

    viene creato il file /tmp/dvd.img, contenente l'immagine del file system UDF, rispettando l'ordine necessario per i file di un DVD video;

  6. growisofs -dvd-compat -Z /dev/sr0=/tmp/dvd.img[Invio]

    dopo aver inserito un DVD vergine nel masterizzatore (/dev/sr0), si procede all'incisione;

  7. rm -fr /tmp/dvd.img /tmp/dvd[Invio]

    al termine vengono cancellati i file temporanei che non servono più.

Si osservi che, di solito, i DVD video per cui non viene concessa la facoltà di copia da chi detiene i diritti di autore, contengono più dati rispetto alla capacità standard di un DVD vergine, complicando il procedimento di copia.

652.3   Copia parziale di un DVD video normale

Il passo successivo alla copia pura e semplice di un DVD video consiste nell'estrarre solo alcuni file di proprio interesse, per realizzare con questi un DVD separato.

I file che contano sono quelli con estensione .VOB che si trovano nella directory VIDEO_TS/; con programmi come Xine, Totem o VLC, è possibile eseguirli per poter scegliere ciò che è di proprio interesse:

xine VTS_01_1.VOB[Invio]

Una volta determinati quali sono i file da estrapolare per realizzare un altro DVD video, si deve realizzare una struttura nuova, a partire da questi file, con l'aiuto del programma Dvdauthor; (1) come nell'esempio seguente, dove si suppone che i file in questione si trovino nella directory corrente e che la struttura da creare debba essere collocata nella directory /tmp/dvd/:

dvdauthor -o /tmp/dvd -f VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB[Invio]

dvdauthor -o /tmp/dvd -T[Invio]

Quindi, si passa alla creazione del file-immagine per l'incisione di un disco:

mkisofs -dvd-video -o /tmp/dvd.img /tmp/dvd[Invio]

In questo caso, il disco che si ottiene è privo di menù e la sua esecuzione parte direttamente dal primo dei file indicati.

Si osservi che esistono tecniche di protezione contro la copia non autorizzata, tali da far sì che il procedimento mostrato in questa sezione produca un video di pessima qualità.

652.4   Utilizzo di Dvdbackup

Dvdbackup (2) è un programma che consente di estrapolare il contenuto di un DVD video, con la possibilità di sezionarne i titoli e anche i capitoli in modo preciso.

dvdbackup azione [altre_opzioni_di_azione] -i dispositivo_dvd [-o directory]

Il modello sintattico mostra l'utilizzo normale del programma eseguibile dvdauthor, dove si vede che si usa inizialmente un'opzione che serve a definire l'azione da compiere; successivamente possono essere aggiunte altre opzioni che specificano ulteriormente l'azione da compiere; quindi è obbligatorio l'uso dell'opzione -i per indicare il file di dispositivo corrispondente al lettore contenente il disco da esaminare o da sezionare; infine, quasi sempre, è necessario mettere l'opzione -o con l'indicazione di una directory che deve essere usata, o creata, per inserirvi ciò che viene estrapolato dal disco dell'opzione -i.

Quando si usa l'opzione -o, nella directory indicata viene creata una sottodirectory con il nome corrispondente al titolo del DVD, ammesso che ci sia, oppure un altro nome (per esempio DVDROM/ o CDROM/). In quella sottodirectory viene creata la directory VIDEO_TS/, con i file estrapolati dal DVD video, in base alle altre opzioni usate.

Tabella 652.2. Alcune opzioni.

Opzione Significato mnemonico Descrizione
-I
info Usando questa opzione si ottengono le informazioni disponibili sul disco sotto esame. In questo caso non si usa l'opzione -o.
-n nome
name Permette di fissare il nome del disco, in modo da sapere esattamente in quale sottodirectory vengono collocati i file.
-M
mirror Richiede di estrapolare una copia completa del disco.
-F
feature Richiede di estrapolare l'insieme di titoli principale.
-T nn
title set Richiede di estrapolare l'insieme di titoli n. In pratica fa una copia dei file VTS_nn_*.
-t n [-s x -e y]
title Richiede di estrapolare il titolo n. Se si indicano anche le opzioni -s e -e, si estrapolano solo i capitoli da x a y del titolo indicato.

Segue la descrizione di alcuni esempi.

652.5   Primi esperimenti per realizzare un DVD con contenuti propri

Come si intende dalla lettura della sezione precedente, per predisporre un DVD video con l'aiuto di Dvdauthor, è necessario disporre di file in formato VOB, con le caratteristiche geometriche previste dallo standard prescelto (PAL/SECAM o NTSC) e con una traccia audio stereofonica campionata a 48 000 Hz. Per la precisione, lo standard DVD PAL/SECAM richiede quadri da 720×576 punti grafici, mentre lo standard DVD NTSC richiede quadri da 720×480 punti grafici.

Generalmente, i file multimediali di cui si può disporre facilmente o che si possono produrre attraverso apparecchiature comuni, non dispongono delle caratteristiche richieste dallo standard DVD video e occorre procedere con diversi passaggi di trasformazione. Si suppone di disporre del file filmato.avi, contenente video e audio, assolutamente incompatibili con lo standard DVD video. Si comincia estrapolando la componente video, trasformandola con l'aiuto di FFmpeg:

ffmpeg -i filmato.avi -f mpeg2video -hq -sameq -r 25 \
  \       -s 720x576 video.m2v
[Invio]

In questo modo si ottiene il file video.m2v in formato MPEG-2 (solo video), con dimensioni e frequenza di quadro conformi allo standard PAL, indipendentemente dalle caratteristiche del file originale. Nello stesso modo si estrapola la componente audio, ma in tal caso non viene ancora modificata la campionatura:

ffmpeg -i filmato.avi -f wav audio.wav[Invio]

Si ottiene il file audio.wav, che si suppone avere una campionatura non appropriata, pertanto si rielabora con Sox, specificando anche di volere comunque due canali audio, per la stereofonia:

sox audio.wav -r 48000 -c 2 audio.48.wav resample[Invio]

Si ottiene così il file audio.48.wav che viene usato per generare un file MP2 con l'aiuto di Toolame:

toolame -b 128 audio.48.wav audio.mp2[Invio]

A questo punto, con il programma mplex di Mjpegtools si possono aggregare i file video.m2v e audio.mp2 in un file VOB adatto a Dvdauthor:

mplex -f 8 -V -o filmato.vob video.m2v audio.mp2[Invio]

Si ottiene così il file filmato.vob, che, come già mostrato nella sezione precedente, può essere trattato da Dvdauthor.

Viene mostrata una funzione di uno script di shell compatibile con lo standard POSIX, che ha lo scopo di produrre un file VOB appropriato a partire da un file contenente un filmato, che FFmpeg sia in grado di gestire:

audio_video_transcode () {
    local VIDEO_SRC="$1"
    local VIDEO_DST="$2"
    local VIDEO_FPS="$3"
    local VIDEO_GEOMETRY="$4"
    local TEMPORARY=`tempfile`
    #
    touch $TEMPORARY
    #
    # Get video MPEG-2.
    #
    ffmpeg -i $VIDEO_SRC -f mpeg2video \
                         -hq \
                         -sameq \
                         -r $VIDEO_FPS \
                         -s $VIDEO_GEOMETRY \
                         $TEMPORARY.m2v
    #
    # Get audio WAV if any audio exist.
    #    
    ffmpeg -i $VIDEO_SRC -f wav $TEMPORARY.wav
    #
    if ! [ -s $TEMPORARY.wav ]
    then
        #
        # Create a silent audio track of 1/30 s.
        #
        dd if="/dev/zero" bs=4 count=1600 | \
           sox -t .raw -s -w -c 2 -r 48000 - $TEMPORARY.wav
    fi
    #
    # Resample with Sox, fixing a stereo output.
    #
    if  sox $TEMPORARY.wav -w \
                           -r 48000 \
                           -c 2 \
                           $TEMPORARY.48.wav \
                           resample
    then
        #
        # It worked with resample.
        #
        true
        #
    else
        sox $TEMPORARY.wav -w \
                           -r 48000 \
                           -c 2 \
                           $TEMPORARY.48.wav
    fi
    #
    # Make a new, uniform, MP2 audio file.
    #
    toolame -b 128 $TEMPORARY.48.wav $TEMPORARY.mp2
    #
    # Remultiplex video and audio for DVD.
    #
    mplex -f 8 -V -o $VIDEO_DST \
                     $TEMPORARY.m2v \
                     $TEMPORARY.mp2
    #
    # Remove temporary files.
    #
    rm -f $TEMPORARY*
}

Disponendo del file filmato.avi, volendo generare il file filmato.vob, aderente allo standard PAL, occorrerebbe chiamare la funzione mostrata, nel modo seguente:

...
audio_video_transcode filmato.avi filmato.vob 25 720x576
...

652.6   Inserire delle diapositive in un DVD video

Per inserire delle diapositive in un DVD video, occorre trasformare delle immagini fisse in filmati, contenenti una traccia audio, che eventualmente può essere silenziosa. A titolo di esempio, viene mostrato il procedimento per produrre un file VOB da un'immagine JPG (figura.jpg) che ha già la geometria corretta per lo standard DVD video, con l'aiuto di strumenti contenuti del pacchetto Mjpegtools.

Si può creare un video YUV4MPEG con jpeg2yuv. In questo caso si vuole produrre un video di 10 s; considerato che si intende usare lo standard PAL, che prevede 25 quadri al secondo, occorre che il video contenga 250 quadri totali:

jpeg2yuv -f 25 -I p -L 0 -n 250 -j figura.jpg > video.y4m[Invio]

Si ottiene così il file video.y4m da convertire in formato MPEG-2, creando il file video.m2v:

mpeg2enc -a 2 -n p -f 3 -b 200 -o video.m2v < video.y4m[Invio]

Viene creato un file audio silenzioso, di 10 s, in formato MP2, con una frequenza di campionamento di 48 000 Hz in stereofonia:

dd if=/dev/zero bs=4 count=480000 | \
  \toolame -b 128 -s 48 /dev/stdin audio.mp2
[Invio]

Si ottiene il file audio.mp2 che si può usare assieme a video.m2v per creare un contenitore multimediale MPEG2 (video e audio) con l'aiuto di mplex:

mplex -f 8 -V -o diapositiva.vob video.m2v audio.mp2[Invio]

Si ottiene così il file diapositiva.vob.

Viene mostrato una funzione di uno script di shell compatibile con lo standard POSIX, che ha lo scopo di produrre un file VOB appropriato a partire da un file contenente un'immagine fissa, che ImageMagic sia in grado di gestire:

picture_transcode () {
    local VIDEO_SRC="$1"
    local VIDEO_DST="$2"
    local VIDEO_FPS="$3"
    local VIDEO_GEOMETRY="$4"
    local PICTURE_TIME="$5"
    local CURRENT_DIR=`pwd`
    local PICTURE_EXT=""
    local VIDEO_FRAME_HZ=""
    local MPEG_TO_ENC_N=""
    local PICTURE_X=""
    local PICTURE_Y=""
    local VIDEO_X=""
    local VIDEO_Y=""
    local PICTURE_MOVE_X=""
    local PICTURE_MOVE_Y=""
    local PICTURE_FRAMES=""
    local TEMPORARY=`tempfile`
    #
    touch $TEMPORARY
    #
    if   [ "$VIDEO_FPS" = "25" ]
    then
        MPEG_TO_ENC_N="p"
        PICTURE_FRAMES=$((25 * $PICTURE_TIME))
    else
        MPEG_TO_ENC_N="n"
        PICTURE_FRAMES=$((30 * $PICTURE_TIME))
    fi    
    #
    VIDEO_X=`echo $VIDEO_GEOMETRY | sed "s/x[0-9]*$//"`
    VIDEO_Y=`echo $VIDEO_GEOMETRY | sed "s/^[0-9]*x//"`
    #
    # Convert keeping the aspect ratio.
    #
    convert -scale $VIDEO_GEOMETRY $VIDEO_SRC $TEMPORARY.jpg
    #
    # Get geometry.
    #
    PICTURE_X=`identify $TEMPORARY.jpg | sed "s/^.* JPEG \([0-9]*\)x\([0-9]*\).*$/\1/"`
    PICTURE_Y=`identify $TEMPORARY.jpg | sed "s/^.* JPEG \([0-9]*\)x\([0-9]*\).*$/\2/"`
    #
    # Calculate pixel shift to get a centered image.
    #
    PICTURE_MOVE_X=$((($VIDEO_X - $PICTURE_X) / 2))
    PICTURE_MOVE_Y=$((($VIDEO_Y - $PICTURE_Y) / 2))
    #
    # Create a gray background
    #
    convert -geometry $VIDEO_GEOMETRY! \
            -fill gray \
            -colorize 100% \
            $VIDEO_SRC $TEMPORARY.bg.jpg
    #
    # Put the image on the center.
    #
    composite -geometry +$PICTURE_MOVE_X+$PICTURE_MOVE_Y \
              $TEMPORARY.jpg \
              $TEMPORARY.bg.jpg \
              $TEMPORARY.x.jpg
    #
    # Convert to a YUV4MPEG video.
    #
    jpeg2yuv -n $PICTURE_FRAMES -I p -f $VIDEO_FPS -j $TEMPORARY.x.jpg | \
             mpeg2enc -n $MPEG_TO_ENC_N -f 3 -b 200 -o $TEMPORARY.m2v
    #
    # Create a silent audio track of 1/30 s.
    #
    dd if="/dev/zero" bs=4 count=1600 | \
       toolame -b 128 -s 48 /dev/stdin $TEMPORARY.mp2
    #
    # Multiplex video and audio for DVD.
    #
    mplex -f 8 -V -o $VIDEO_DST \
                     $TEMPORARY.m2v \
                     $TEMPORARY.mp2
    #
    # Remove temporary files.
    #
    rm -f $TEMPORARY*
}

Disponendo del file figura.png, volendo generare il file diapositiva.vob della durata di 15 s, aderente allo standard PAL, occorrerebbe chiamare la funzione mostrata, nel modo seguente:

...
picture_transcode figura.png diapositiva.vob 25 720x576 15
...

652.7   Menù di un DVD video

La realizzazione di un Menù per un DVD video è una fase necessaria per produrre un risultato fruibile dall'utenza comune. Il menù è un file VOB che assomiglia idealmente a quello che si realizza a partire da un'immagine fissa, come nel caso delle diapositive, che però deve contenere delle informazioni aggiuntive. Dopo la realizzazione di un file VOB di questo tipo, occorre utilizzare Dvdauthor in modo leggermente diverso da quanto mostrato fino a questo punto, per collegare il menù agli altri file VOB esistenti.

Si crea inizialmente un disegno, con un programma appropriato, contenente al massimo tre colori, con una geometria approssimativa pari a quella dello standard DVD video che si vuole produrre. L'immagine potrebbe essere simile a quella che si vede nella figura 652.8.

Figura 652.8. Immagine di partenza per un menù.

fondale

Di questa immagine se ne deve preparare una copia, dalla quale va rimosso il titolo e va ridotta a soli due colori: il testo nero e lo sfondo bianco.

Si osservi che è bene circoscrivere le voci del menù con una cornice, come nell'esempio che viene proposto, per consentire successivamente al programma spumux di Dvdauthor di individuarle e distinguerle correttamente.

Figura 652.9. Menù in bianco e nero, con i soli bottoni per accedere ai titoli interni.

bottoni

A questo punto occorre assicurarsi di avere le immagini della geometria esatta e occorre produrre alcune immagini derivate. Il primo file contenente il menù con il titolo sia fondale.jpg; il secondo, senza titolo e solo in bianco e nero, sia pulsanti.jpg. Vengono usati i programmi di ImageMagic per le varie conversioni.

convert -geometry 720x576! -posterize 3 fondale.jpg \
  \        menu.background.jpg
[Invio]

Con questo primo comando viene prodotta l'immagine da usare come fondale del menù; come si vede si impone di adattare il file che si ottiene alla geometria dello standard PAL e di avere solo tre colori.

Successivamente, a partire dal file pulsanti.jpg, si crea un file con soli due colori, dove il bianco deve annullarsi e diventare trasparente. Si ottiene il file menu.black.png:

convert -geometry 720x576! -posterize 2 -transparent white \
  \        pulsanti.jpg menu.black.png
[Invio]

Figura 652.10. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.black.png.

bottoni

Da questo file con la scritta nera e lo sfondo trasparente, si creano altri file, dove la scritta deve apparire con colori differenti:

convert -fill red -colorize 100% menu.black.png menu.red.png[Invio]

convert -fill blue -colorize 100% menu.black.png menu.blue.png[Invio]

convert -fill green -colorize 100% menu.black.png menu.green.png[Invio]

Figura 652.11. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.red.png, dove il testo appare in rosso.

bottoni

Figura 652.12. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.green.png, dove il testo appare in verde.

bottoni

Figura 652.13. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.blue.png, dove il testo appare in blu.

bottoni

Quindi si crea un filmato molto breve, in formato VOB, utilizzando il file menu.background.jpg. In questo caso, però, si preferisce che il file finale (VOB) abbia l'estensione .mpg, perché non si tratta ancora del file VOB definitivo:

jpeg2yuv -n 50 -I p -f 25 -j menu.background.jpg \
  \         | mpeg2enc -n p -f 3 -b 200 -o menu.m2v
[Invio]

dd if="/dev/zero" bs=4 count=1600 \
  \   | toolame -b 128 -s 48 /dev/stdin menu.mp2
[Invio]

mplex -f 8 -o menu.mpg menu.m2v menu.mp2[Invio]

A questo punto si deve usare il programma spumux di Dvdauthor, che però richiede prima la preparazione di un file XML di configurazione, come quello seguente:

<subpictures>
  <stream>
    <spu start="00:00:00.00"
       image="menu.black.png"
       select="menu.green.png"
       highlight="menu.red.png"
       force="yes"
       autooutline="infer"
       outlinewidth="15"
       autoorder="rows">
    </spu>
  </stream>
</subpictures>

In base al contenuto di questo file di configurazione, lo spazio tra i pulsanti deve essere maggiore o uguale a 15 punti grafici; inoltre, l'ordine con cui si intendono disposti i pulsanti è per righe.

Supponendo di avere salvato il file XML di spumux con il nome menu.spumux, si può procedere così:

spumux menu.spumux < menu.mpg > menu.vob[Invio]

Viene mostrata una funzione di uno script di shell compatibile con lo standard POSIX, che ha lo scopo di produrre un menù VOB appropriato a partire da un file contenente un'immagine fissa, unica, che ImageMagic sia in grado di gestire. Questo script produce però un risultato semplificato, in quanto si attende di ricevere una figura in bianco e nero, contenente esclusivamente le voci del menù, bordate in modo appropriato:

dvd_menu () {
    local FILE_SRC="$1"
    local FILE_DST="$2"
    local VIDEO_FPS="$3"
    local VIDEO_GEOMETRY="$4"
    local MPEG_TO_ENC_N=""
    #
    touch $TEMPORARY
    #
    if   [ "$VIDEO_FPS" = "25" ]
    then
        MPEG_TO_ENC_N="p"
    else
        MPEG_TO_ENC_N="n"
    fi    
    #
    # Reduce the source picture to two colors: should be
    # black ink on white background.
    #
    convert -geometry $VIDEO_GEOMETRY! \
            -posterize 2 $FILE_SRC $TEMPORARY.background.jpg
    #
    # Reduce the source picture to two colors and set white to
    # transparent.
    #
    convert -geometry $VIDEO_GEOMETRY! \
            -transparent white \
            -posterize 2 $FILE_SRC $TEMPORARY.black.png
    #
    # Make a copy with blue color (instead of black).
    #
    convert -fill blue \
            -colorize 100% \
            $TEMPORARY.black.png $TEMPORARY.blue.png
    #
    # Make a copy with red color (instead of black).
    #
    convert -fill red \
            -colorize 100% \
            $TEMPORARY.black.png $TEMPORARY.red.png
    #
    # Make a copy with green color (instead of black).
    #
    convert -fill green \
            -colorize 100% \
            $TEMPORARY.black.png $TEMPORARY.green.png
    #
    # Make a movie with the menu.
    #
    jpeg2yuv -n 50 -I p -f $VIDEO_FPS -j $TEMPORARY.background.jpg | \
        mpeg2enc -n $MPEG_TO_ENC_N -f 3 -b 200 -o $TEMPORARY.m2v
    #
    # Make a silent sound track.
    #
    dd if="/dev/zero" bs=4 count=1600 | \
        toolame -b 128 -s 48 /dev/stdin $TEMPORARY.mp2
    #
    # Multiplex
    #
    mplex -f 8 -o $TEMPORARY.vob $TEMPORARY.m2v $TEMPORARY.mp2
    #    
    # Prepare the Spumux XML file.
    #
    echo -n                                              > $TEMPORARY.spumux
    echo "<subpictures>"                                >> $TEMPORARY.spumux
    echo "  <stream>"                                   >> $TEMPORARY.spumux
    echo "    <spu start=\"00:00:00.00\""               >> $TEMPORARY.spumux
    echo "       image=\"$TEMPORARY.black.png\""        >> $TEMPORARY.spumux
    echo "       select=\"$TEMPORARY.green.png\""       >> $TEMPORARY.spumux
    echo "       highlight=\"$TEMPORARY.red.png\""      >> $TEMPORARY.spumux
    echo "       force=\"yes\""                         >> $TEMPORARY.spumux
    echo "       autooutline=\"infer\""                 >> $TEMPORARY.spumux
    echo "       outlinewidth=\"15\""                   >> $TEMPORARY.spumux
    echo "       autoorder=\"rows\">"                   >> $TEMPORARY.spumux
    echo "    </spu>"                                   >> $TEMPORARY.spumux
    echo "  </stream>"                                  >> $TEMPORARY.spumux
    echo "</subpictures>"                               >> $TEMPORARY.spumux
    #
    # Run Spumux.
    #
    spumux $TEMPORARY.spumux < $TEMPORARY.mpg > $TEMPORARY.vob
    #
    # Remove temporary files.
    #
    rm -f $TEMPORARY*
}

Disponendo del file menu.png, volendo generare il file menu.vob aderente allo standard PAL, occorrerebbe chiamare la funzione mostrata, nel modo seguente:

...
dvd_menu menu.png menu.vob 25 720x576
...

Naturalmente, la creazione del file VOB contenente il menù, non esaurisce il problema, dal momento che poi questo menù deve essere collegato ai contenuti del DVD. Nella sezione successiva si vede come usare Dvdauthor a questo fine.

652.8   Creazione di un DVD con menù

Una volta creato il menù del DVD in un file VOB, occorre collegare questo menù al resto del DVD. Per fare questo si può usare Dvdauthor in un modo differente rispetto a quello mostrato fino a questo punto, preparando un file XML di configurazione appropriato.

Come accennato all'inizio del capitolo, il contenuto di un DVD può essere strutturato in «titoli» che a loro volta si articolano in «capitoli». In questa sezione si associa un titolo a ogni contenuto del DVD, facendo sì che ogni titolo contenga soltanto un capitolo. C'è da considerare che è possibile articolare il contenuto di un DVD in un menù principale e in altri menù inferiori, ma questa possibilità non viene descritta qui.

Si presume di avere preparato quattro filmati, già convertiti nel formato VOB. Si tratta dei file filmato-1.vob, filmato-2.vob, filmato-3.vob e filmato-4.vob. Si suppone che dopo la visualizzazione di uno di questi filmati si voglia tornare al menù. Quello che segue è il file XML da fornire poi a Dvdauthor:

<dvdauthor dest="/tmp/dvd" jumppad="0">
  <vmgm>
    <menus>
      <pgc entry="title">
        <vob file="menu.vob" pause="inf"/>
        <button> jump title 1; </button>
        <button> jump title 2; </button>
        <button> jump title 3; </button>
        <button> jump title 4; </button>
        <post> jump vmgm menu 1; </post>
      </pgc>
    </menus>
  </vmgm>
  <titleset>
    <titles>
      <pgc>
        <vob file="filmato-1.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-2.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-3.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-4.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
    </titles>
  </titleset>
</dvdauthor>

Supponendo che il file XML si chiami dvd.xml, si può utilizzare dvdauthor nel modo seguente:

dvdauthor -x dvd.xml[Invio]

In base al contenuto del file dvd.xml, si ottiene la directory /tmp/dvd/, con il contenuto del DVD, da trasformare in file-immagine con mkisofs:

mkisofs -dvd-video -o dvd.img /tmp/dvd[Invio]

Si ottiene così il file dvd.img pronto per l'incisione del DVD.

Eseguendo il DVD con un programma come Xine o con un lettore DVD casalingo, si dovrebbe vedere un menù come quello che si vede nella figura successiva, dove il cursore si trova sopra il pulsante {Titolo 1}.

Figura 652.18. Menù in funzione con il primo titolo evidenziato.

fondale

Volendo fare in modo che dopo l'esecuzione di uno dei primi tre titoli si passi automaticamente al successivo, basta modificare così l'elemento titles del file dvd.xml:

    <titles>
      <pgc>
        <vob file="filmato-1.vob"/>
        <post> jump title 2; </post>
      </pgc>
      <pgc>
        <vob file="filmato-2.vob"/>
        <post> jump title 3; </post>
      </pgc>
      <pgc>
        <vob file="filmato-3.vob"/>
        <post> jump title 4; </post>
      </pgc>
      <pgc>
        <vob file="filmato-4.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
    </titles>

Dvdauthor ha una limitazione che impedisce di gestire più di 36 titoli in un solo menù. Tuttavia, più file VOB possono essere raggruppati in uno stesso titolo. L'esempio seguente mostra un file XML di configurazione di Dvdauthor, con tre titoli che si dividono alcuni file VOB. Si osservi che, in base alla configurazione mostrata, ogni file incluso in un titolo va a costituire un capitolo dello stesso.

<dvdauthor dest="/tmp/dvd" jumppad="0">
  <vmgm>
    <menus>
      <pgc entry="title">
        <vob file="menu.vob" pause="inf"/>
        <button> jump title 1; </button>
        <button> jump title 2; </button>
        <button> jump title 3; </button>
        <post> jump vmgm menu 1; </post>
      </pgc>
    </menus>
  </vmgm>
  <titleset>
    <titles>
      <pgc>
        <vob file="filmato-1.vob"/>
        <vob file="filmato-2.vob"/>
        <vob file="filmato-3.vob"/>
        <vob file="filmato-4.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-5.vob"/>
        <vob file="filmato-6.vob"/>
        <vob file="filmato-7.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-8.vob"/>
        <vob file="filmato-9.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
    </titles>
  </titleset>
</dvdauthor>

652.9   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Dvdauthor   GNU GPL

2) Dvdbackup   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_ai_dvd_video.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!