DVD-Video da linea di comando

Cose che faccio quando sono malato

Questo scritto deriva da un messaggio che inviai sulla lista pubblica del Firenze Linux User Group (FLUG), , <https://lists.linux.it/pipermail/flug/2024-February/026648.html> ed è pubblicato con la licenza CC BY-SA 4.0 di Creative Commons. <https://creativecommons.org/licenses/by-sa/4.0/legalcode.it>


Di recente ho avuto il raffreddore. Quando sono "malato" ho spesso voglia di fare qualcosa al computer di non troppo impegnativo ma nuovo, come quando da piccolo mi baloccavo con mio padre, coi videogiochi su DOS. Avevo bisogno di uno stimolo facile per sopportare l'uggia del moccio.

Tempo fa la nonna della mia ragazza mi aveva chiesto di acquisirle una videocassetta, cosa che ho fatto attraverso un amico che ha l'attrezzatura adatta. Mi mancava da trasferire i video acquisiti in MP4 in un formato che la nonna potesse utilizzare. A casa lei ha un lettore DVD, quindi ho deciso di scoprire come fare un DVD-Video da GNU/Linux con la sempreverde linea di comando. Preparatevi a un viaggio alla scoperta di un dispositivo di archiviazione recentemente obsoleto, però tuttora molto diffuso!

Codifica

In realtà è stato piuttosto semplice. Il primo passaggio è convertire gli MP4 in una codifica video supportata dai DVD: l'MPEG-2 [1]. A casa avevo un DVD da 4,7 GB (4,37 GiB) che contiene fino a due ore. La videocassetta superava di quaranta minuti la capienza massima con la normale densità di bit. Perciò ho dimezzato il bitrate, trattandosi di una conversione da un formato qualitativamente inferiore non si sarebbe notata la differenza, ottenendo il doppio, quattro ore. Di seguito il comando che ho utilizzato per convertire l'MP4 in MPG, col mitico FFmpeg [2].

$ ffmpeg -i "video.mp4" \
-pass 1 \
-vf crop=960:720:160:0 \
-f dvd -muxrate 10080k -packetsize 2048 \
-s 720x576 -pix_fmt yuv420p -r 25 \
-codec:v mpeg2video -g 15 -b:v 3000k -maxrate:v 4500k -minrate:v 0 \
-bufsize:v 1835008 \
-ar 48000 \
-codec:a ac3 -b:a 192k \
"video.mpg"

Quanto leggete di sopra non è altro che una leggera personalizzazione dell'opzione principale di FFmpeg target, con valore pal-dvd. Ho modificato il bitrate, che normalmente sarebbe di 6000 kb/s con picchi di 9000 kb/s, dimezzandolo. Trovate la spiegazione di questa opzione nella pagina man ffmpeg-all, alla voce -target, nel capitolo dedicato alle Main options (opzioni principali) [3]. Inoltre ho diminuito il bitrate dell'audio, che non superava mai i 192 kb/s nel file MP4.

I più attenti avranno notato il filtro crop [4], dovuto all'acquisizione della videocassetta, originariamente in 4/3, in 16/9 in HD (1280x720). Se fate i conti tornerà tutto. Il filtro crop ritaglia un rettangolo di 960x720 (4/3 in HD), a partire dal pixel 160 delle ascisse e da quello 0 delle ordinate (lo zero si trova in alto a sinistra).

Infine l'opzione video pass [5], che serve per salvare il filmato in due passaggi per una codifica più efficiente in termini di spazio, in rapporto alla qualità. Dovete eseguire il comando due volte, modificando l'argomento di pass da 1 a 2. Ovviamente richiede il doppio del tempo. Per video a questa risoluzione e con questa codifica, non è una quantità di tempo significativa.

Convertiti i video nella codifica dei DVD, dobbiamo creare la struttura dei file propria di questo mezzo. I DVD hanno uno specifico albero di documenti e cartelle che permette ai lettori di riprodurli. Per fare ciò ho usato il programma DVDAuthor [6].

Prima di tutto dobbiamo comunicare al programma il formato del DVD che vogliamo realizzare, se NTSC o PAL. NTSC [7] era lo standard video usato negli Stati Uniti d'America e in qualche paese dell'Asia e dell'Oceania per le trasmissioni analogiche; PAL [8] era l'equivalente dei paesi civilizzati, tra cui l'Italia. Ci sono due modi:

Adesso usiamo DVDAuthor per creare la struttura del DVD in base alle nostre esigenze. Questi i comandi che mi sono serviti.

$ export VIDEO_FORMAT=PAL
$ dvdauthor -o "dvd" -t "capitolo1.mpg" "capitolo2.mpg" -a ac3+it+2ch
$ dvdauthor -o "dvd" -T

Il primo comando crea i file VOB necessari e l'albero principale del DVD dagli MPG elencati, suddividendoli in capitoli. Non è necessario spezzare il video nel numero dei capitoli desiderati, si può specificare i capitoli in secondi con l'opzione -c o --chapters. Per approfondimenti consiglio la lettura di dvdauthor HOWTO di gballabio [9] o il README del pacchetto Debian, in /usr/share/doc/dvdauthor. L'opzione -a o --audio= informa della codifica, della lingua e della configurazione dei canali della traccia audio. In questo caso: un unico audio in italiano, codificato in AC3, su due canali. Per specificare più di una traccia, usate una virgola e ripetete la sintassi nell'ordine delle tracce audio del file MPG.

Il secondo comando finalizza il DVD creando la tabella dei contenuti. In entrambi i casi il risultato risiede nella cartella dvd.

Scrittura

Adesso giungiamo al succo dell'argomento: masterizzare il DVD. Trasformiamo quella cartella in un ISO e scriviamolo con cdrskin [10].

$ genisoimage -dvd-video -V "Titolo" -o "dvd.iso" "dvd"
$ cdrskin -v dev=/dev/sr0 -dao "dvd.iso"

Non ho capito se genisoimage sarà dismesso in futuro poiché fa parte del pacchetto cdrkit, che non credo sia più sviluppato e che dovrebbe aver passato il testimone al progetto libburnia [11]. In teoria l'equivalente di genisoimage del progetto libburnia dovrebbe essere GNU xorriso, il quale però afferma di non produrre la struttura dati dei DVD-Video (vedere la sezione Special features del sito dedicato [12], o l'appunto nella pagina man alla voce Overview of features). È un problema che non mi sono ancora posto e che per il momento lascerò irrisolto.

Verifica

Infine potete verificare il buon esito della scrittura coi seguenti comandi.

$ blocchi=$(expr $(ls -l "dvd.iso" | awk '{print $5}') / 2048)
$ dd if=/dev/sr0 bs=2048 count=$blocchi | md5sum
$ md5sum "dvd.iso"

Le due somme di controllo MD5 devono combaciare. Io ho dovuto prima espellere e rimettere il disco affinché la procedura funzionasse, perché altrimenti dd non leggeva i byte dal dispositivo del lettore DVD.

Concludo consigliando la pagina della wiki di Debian dedicata alla scrittura di CD, DVD e Blu-ray [13]. Troverete informazioni pure sui CD audio e sui programmi dotati d'interfaccia grafica.

Così è come passo il tempo quando non sto abbastanza bene per occuparmi delle cose serie, o non ne ho voglia. Così e finendo Zelda per sbaglio, ma quella è un'altra storia.


Sitografia

 1 DVD-Video su Wikipedia <https://it.wikipedia.org/wiki/DVD-Video#Specifiche_tecniche>

 2 About FFmpeg <https://ffmpeg.org/about.html>

 3 FFmpeg main options <https://ffmpeg.org/ffmpeg-all.html#Main-options>

 4 FFmpeg crop filter <https://ffmpeg.org/ffmpeg-filters.html#crop>

 5 FFmpeg video options <https://ffmpeg.org/ffmpeg-all.html#Video-Options>

 6 DVDAuthor <https://dvdauthor.sourceforge.net/>

 7 NTSC Tutorials <https://www.ntsc-tv.com/>

 8 PAL su World Analogue Television Standards and Waveforms (Wayback Machine) <https://web.archive.org/web/20190709033551/http://www.radios-tv.co.uk/Pembers/World-TV-Standards/Colour-Standards.html#PAL>

 9 dvdauthor HOWTO <https://gballabio.github.io/dvdauthor-howto/>

10 cdrskin <https://dev.lovelyhq.com/libburnia/web/wiki/Cdrskin>

11 libburnia <https://dev.lovelyhq.com/libburnia/web/wiki>

12 GNU xorriso <https://www.gnu.org/software/xorriso/>

13 BurnCD <https://wiki.debian.org/it/BurnCd>