[Flug] DVD-Video da linea di comando

Matteo Bini matteobin@tiepi.it
Sab 17 Feb 2024 12:55:20 CET


Cari amici,
visto che Flavio si è lamentato del fatto che non usiamo questa lista
per diffondere la nostra sconfinata conoscenza in materia di software
libero, vi racconterò cosa ho fatto tutto mercoledì e giovedì mattina.

In quei giorni avevo il raffreddore, che non mi è ancora passato del
tutto, e avevo voglia di fare qualcosa al computer non troppo
impegnativo ma nuovo. Avevo bisogno di uno stimolo facile per sopportare
l'uggia della malattia.

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!

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 6000k con picchi di
9000k, 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 192k 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 vi 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 al lettore 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 è lo standard video usato negli
Stati Uniti d'America e in qualche paese dell'Asia e dell'Oceania; PAL è
l'equivalente dei paesi civilizzati, tra cui l'Italia. Ci sono due modi:

- scrivere un file in $HOME/.config/video_format col testo NTSC o PAL;
- esportare la variabile di ambiente VIDEO_FORMAT col valore NTSC o PAL.

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

$ 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 [7] 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.

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

$ 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 [9]. 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 [10], 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.

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 blocchi.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 in bellezza, consigliandovi la pagina della wiki di Debian
dedicata alla scrittura di CD, DVD e Blu-ray [11]. Troverete
informazioni pure sui CD audio e sui programmi dotati d'interfaccia
grafica.

Un saluto testuale e da linea di comando dal vostro.

--
Matteo Bini


[1] https://it.wikipedia.org/wiki/DVD-Video#Specifiche_tecniche
[2] https://ffmpeg.org/
[3] https://ffmpeg.org/ffmpeg-all.html#Main-options
[4] https://ffmpeg.org/ffmpeg-filters.html#crop
[5] https://ffmpeg.org/ffmpeg-all.html#Video-Options
[6] https://dvdauthor.sourceforge.net/
[7] https://gballabio.github.io/dvdauthor-howto/
[8] https://dev.lovelyhq.com/libburnia/web/wiki/Cdrskin
[9] https://dev.lovelyhq.com/libburnia/web/wiki
[10] https://www.gnu.org/software/xorriso/
[11] https://wiki.debian.org/it/BurnCd


Maggiori informazioni sulla lista flug