Appunti sul DVD Ripping in Linux
Questa non è proprio una guida. Si tratta più che altro di una raccolta di appunti che ho accumulato nel tempo durante i miei vari tentativi di realizzare un rip di qualità anche su Linux. La struttura del testo è piuttosto lineare e se seguita vi può aiutare a raggiungere un buon risultato. Purtroppo su Linux mancano alcuni strumenti con interfaccia grafica quindi alcune operazioni richiedono più impegno rispetto a quando si è su Windows.
Link
Prima di cominciare oltre a questa guida potete leggere anche queste due guide.
Raccolta informazioni
Questa parte del processo è piuttosto noiosa ma anche molto importante. Più avanti vi serviranno alcune informazioni sulla sorgente che state trattando quindi è meglio raccogliere tutte le informazioni che vi servono prima di cominciare.
Come prima cosa dovete capire in quale titolo è presente il film. Ogni DVD è diviso in quello che in gergo vengono chiamati title. Questi sono usati per separare il film dai contenuti extra come i trailer e i menù. In genere il film si trova nel primo ma alcuni distributori si divertono a complicarsi la vita cambiando ogni volta il numero. Visto che il film sarà quasi sicuramente il titolo più lungo presente sul DVD non dovrete far altro che usare lsdvd in questo modo.
$ lsdvd 2>&1 | grep 'Longest track'
Riceverete in output una singola linea che vi indicherà il numero del titolo più lungo. Come in questo esempio.
Longest track: 01
Controllare se il titolo è proprio quello del film è molto semplice. Non dovete far altro che lanciare mplayer dvd:// e specificare il title da leggere.
$ mplayer dvd://1
Se il titolo non dovesse contenere il film usate il comando lsdvd da solo. Controllate quali altri titoli sono abbastanza lunghi da contenere il film e riprovate. Da questo punto in poi negli esempi userò sempre il titolo numero uno come esempio quindi quando dovrò accedere al disco userò dvd://1 o -T 1. Se il vostro disco contiene il film in un title diverso cambiate i numeri in maniera appropriata.
Ora che sapete dove si trova il film potete usare mplayer per scoprire la durata totale del film, il numero di frame per secondo e l'aspect ratio. Sono tutti e tre valori molto importanti che vi serviranno per calcolare il bitrate e scegliere la risoluzione giusta. Per sapere i frame per secondo usate questo comando.
$ mplayer dvd://1 -identify -frames 0 2>&1 | grep 'ID_VIDEO_FPS'
L'output che otterrete sarà quindi simile a questo.
ID_VIDEO_FPS=25.000
La riga contiene la variabile ID_VIDEO_FPS che rappresenta il numero di frame per secondo e come potete vedere in questo esempio ha assunto il valore 25. Specialmente se avete a che fare con DVD provenienti da altre regioni o materiale interlacciato il valore può assumere altri valori come 23.976 e 29.970.
Per estrarre l'aspect ratio del filmato dovrete usare il seguente comando.
$ mplayer dvd://1 -identify -frames 1 2>&1 | grep 'ID_VIDEO_ASPECT' | tail -1
E riceverete un output simile a questo.
ID_VIDEO_ASPECT=1.3333
Questa riga contiene, invece, la variabile ID_VIDEO_ASPECT che vi indica l'aspect ratio del film. In questo caso il DVD ha un rapporto tra larghezza e altezza di 1.3333 ovvero di 4/3 che non è altro quello dei normali televisori. Quando si lavora con film però il valore più comune è senza dubbio 1.7778 che rappresenta i normali schermi panoramici 16/9.
Ora per scoprire la lunghezza del film in secondi dovrete usare mplayer e grep per ottenere solo la riga che contiene ID_LENGTH. Ricordate di specificare il title giusto quando usate dvd:// altrimenti avrete una lunghezza errata.
$ mplayer dvd://1 -identify -frames 0 2>&1 | grep 'ID_LENGTH'
Come per il comando precedente otterrete una singola riga che contiene la variabile e il suo valore. Ecco un output di esempio.
ID_LENGTH=6851.48
Come potete vedere questo film è lungo ben 6850 secondi cioè circa due ore di film. Segnatevi questo e gli altri valori che avete trovato e proseguite.
Copiare il DVD su HD
Copiare il contenuto del DVD sul hard disc non è un passaggio obbligatorio ma caldamente consigliato. I passaggi successivi, infatti, mostrano come effettuare il rip leggendo direttamente dal disco. Ricordate però che il lettore di DVD ha tempi di risposta molto alti e una velocità massima non paragonabile a quella di un disco rigido quindi impiegherete molto più tempo. Come se non bastasse i continui spostamenti del carrello e l'utilizzo prolungato per ore potrebbero danneggiare le meccaniche interne e portare ad un guasto.
Esistono molti modi e programmi ma il migliore è senza dubbio dvdbackup. Questo programma vi permette di copiare su hard disc il contenuto del DVD mantenendo una struttura identica a quella originale. Il comando per copiare l'intero disco è molto semplice.
$ dvdbackup -i /dev/dvd -M -o $HOME
Una volta terminato il programma avrete nella vostra home una nuova cartella a cui è stato dato lo stesso nome del film contenuto sul DVD. Per usare questa cartella come se fosse il disco originale non dovrete far altro che usare l'opzione -dvd-device di mplayer a cui dovrete passare il percorso completo della cartella. Quindi se volete vedere il film dal disco rigido dovrete usare il comando.
$ mplayer -dvd-device ~/ATTACK_OF_THE_CLONES_IT1/ dvd://1
Estrazione dell'audio
Per molti film l'audio è una parte fondamentale quindi porre molta attenzione a questa fase è di vitale importanza se si vuole raggiungere un ottimo risultato. Prima di cominciare però un po' di teoria.
Sui DVD l'audio può essere compresso con due codec diversi. Il primo è AC3, basato sulle trasformate di Fourier, è discretamente efficiente e può comprimere le 6 tracce audio usando 448 kbit/s. Il numero di canali audio presente all'interno di uno stream AC3 è variabile ma i più comuni sono flussi 5.1 oppure stereo. Il secondo codec è DTS che si basa sul sub-band coding. Come per AC3 i flussi più comuni sono il 5.1 oppure lo stereo. L'algoritmo usato nel DTS è meno efficiente quindi richiede un bitrate molto più elevato per comprimere alla stessa qualità uno stream audio.
Il tipo di codifica di DTS però esegue un numero minore di operazioni sul segnale originale durante il processo di compressione, quindi in alcune rarissime occasioni la qualità di uno stream DTS può risultare migliore. Sono entrambi codec di tipo lossy perciò ricordate che se deciderete di ricomprimerli perderete comunque in qualità.
Se sul DVD sono presenti tracce compresse con entrambi i codec e siete indecisi su quale scegliere non dovrete far altro che provarle entrambe sul vostro impianto surround e decidere con le vostre orecchie. Purtroppo non è possibile escludere a priori l'uno o l'altro codec.
Dopo questa piccola introduzione teorica sui vari formati audio dei DVD passiamo a qualcosa di più concreto. Come prima cosa dovete trovare quali tracce audio avete a disposizione. Quindi lanciare mplayer in questo modo.
$ mplayer dvd://1 -frames 0 -v 2>&1 | grep '^audio stream'
Quello che otterrete è la lista degli stream audio presenti sul disco e le caratteristiche di ogni singolo stream. Quello che vi interessa sapere è il codec usato, la lingua dello stream e il parametro da usare con l'opzione -aid più avanti. Ecco un piccolo esempio di quello che riceverete in output.
audio stream: 0 format: ac3 (5.1) language: en aid: 128. audio stream: 1 format: ac3 (5.1) language: it aid: 129. audio stream: 2 format: ac3 (stereo) language: en aid: 130.
In questo caso ci sono 3 stream audio. I primi due sono i flussi 5.1 dell'audio inglese ed italiano del film in formato ac3. Il secondo è sempre in formato ac3 ma questa volta i canali sono stero e contengono il commento del regista.
Ora procedete con l'estrazione dello stream audio che ci interessa da DVD. Anche in questo caso è possibile usare mplayer. Ecco un esempio che copia il secondo stream del disco.
$ mplayer dvd://1 -aid 129 -dumpaudio -dumpfile audio.it.ac3
Questo comando non fa altro che copiare lo stream AC3 dal dvd e copiarlo su hard disc. Se volete avere il massimo della qualità audio e lo spazio non è un problema allora potete saltare al prossimo capitolo. In genere i 448 kbit/s di AC3 sono un buon compromesso. Se invece avete copiato uno stream DTS, oppure lo spazio occupato da AC3 non è accettabile, continuate con il resto dei passaggi che mostra come comprimere uno stream usando vari codec come AAC o MP3.
Se avete deciso di proseguire usando lo stream AC3 controllate per scrupolo con quale bitrate è stato compresso lo stream. Questo numero vi servirà più avanti per calcolare il bitrate. Il comando da dare è molto semplice.
$ mplayer dvd://1 -aid 129 -frames 0 -v 2>&1 | grep 'AC3.*kbit/s'
Otterrete quindi uno output simile a quello riportato qui sotto. E come potete vedere in questo caso il bitrate usato è più basso dei normali 448 kbit/s che si trova normalmente nei DVD.
AC3: 5.1 (3f+2r+lfe) 48000 Hz 384.0 kbit/s
Compressione dell'audio
La prima cosa da fare se volete comprimere in uno dei tre formati citati prima è decomprimere lo stream AC3 in Wav. Anche in questo caso mplayer vi viene in aiuto.
$ mplayer audio.it.ac3 -ao pcm:fast:file=audio-stereo.wav -vo null -vc null
Con questo comando mplayer creerà un file .wav ed eseguirà quello che viene chiamato down mix. Il file risultante conterrà quindi solo due canali in cui verranno mixati i 6 originali. Se volete mantenere intatti tutti i canali per potere realizzare un file da usare con il vostro impianto surround allora dovrete aggiungere al comando qui sopra l'opzione -channels 6 come nel esempio seguente.
$ mplayer audio.it.ac3 -ao pcm:fast:file=audio-surround.wav -vo null -vc null -channels 6
Per evitare fastidiosi effetti di clipping le tracce audio AC3 sono sempre registrate con un volume molto basso. Sta poi al decoder aumentare il volume durante la fase di decodifica. Purtroppo MPlayer non effettua questa modifica al segnale decodificato quindi i file .wav avranno un volume molto basso. Il modo più sicuro e veloce è usare normalize-audio nella seguente maniera.
$ normalize-audio audio-stereo.wav
Questo programma legge tutto il file .wav e trova il massimo valore in decibel che è possibile aggiungere al segnale senza provocare clipping. L'operazione di normalizzazione alza il volume mantenendo inalterata le proprietà dinamiche del segnale quindi non ci sono problemi di perdita di informazione.
I codec che è possibile usare per comprime il file audio wav sono principalmente tre. Cercherò quindi di fornire più informazioni possibili sulle caratteristiche dei vari codec, quale encoder usare, quali versioni danno risultati migliori e i parametri per raggiungere dei buoni risultati.
Il più usato è senza dubbio MP3 il cui encoder di riferimento è LAME. Questo codec produce ottimi risultati quando il bitrate disponibile è nel range 128-256 kbit/s. LAME supporta sia la codifica CBR che VBR ed inoltre introduce una modalità detta ABR che prende il meglio dei due mondi e cerca di fonderlo. Il codec è supportato da praticamente tutti i lettori di DivX da tavolo e quindi se state creando un video che andrà riprodotto su uno di questi dispositivi allora MP3 è senza dubbio il codec giusto da scegliere. Però fate attenzione perché MP3 non supporta più di due canali quindi non è possibile comprimere file .wav creati con l'opzione -channels 6.
Come ho già detto l'encoder migliore è LAME e la versione che consiglio di usare per ora è la 3.98. In questa particolare versione è stato finalmente reso stabile il nuovo algoritmo VBR che permette di ottenere risultati migliori e comprime molto più velocemente di quelli precedenti. Il pacchetto da installare per questa particolare versione è lame-3.98.
La modalità CBR non è ottimale quindi evitate di usarla. Scegliete ABR se avete bisogno di raggiungere un bitrate specifico e il vostro margine di errore è ampio solo pochi byte. Ecco un esempio che imposta 128kbit/s come limite.
$ lame --preset 128 -h --noreplaygain audio-stereo.wav
Per raggiungere la maggiore qualità possibile però dovrete usare VBR che purtroppo non vi consente di impostare un bitrate esatto di riferimento. Questa è la configurazione che consiglio di usare. Il bitrate si aggira attorno ai 190-200kbit/s.
$ lame -V 2 -h --noreplaygain audio-stereo.wav
Se volete scendere ed avere risultati simili a 110-130kbit/s dovrete usare -V 4.
Passiamo ora ad Ogg. Codec completamente open source e privo di brevetti. Non è ancora maturo come MP3 quindi ci sono ampi margini di miglioramento. Alcune delle tecniche di cui fa uso gli permettono di essere più efficiente di MP3 ed inoltre è possibile comprimere stream con più di due canali audio. Purtroppo la decodifica richiede più potenza per essere decodificato ma il vero problema è che uno stream Ogg può anche contenere blocchi di lunghezza nulla. Questa piccola caratteristica ci impedisce di usare Ogg all'interno di un file avi che non supporta codec con questa caratteristica. In realtà è possibile ma tutto il procedimento è un immenso hack che aumenta a dismisura lo spazio richiesto. Se volete usare Ogg scegliete piuttosto dei container come Ogm e Matroska. Se il vostro target sono i player da tavolo allora evitate questo codec.
L'encoder di riferimento in questo momento è aoTuV 5.5 scritto da Aoyumi e basato a sua volta su oggenc2.8. Potete scaricare i sorgenti dal sito del autore.
Ogg è un codec che supporta solo la modalità VBR quindi l'unico modo per decidere il bitrate è variare il valore della qualità. A differenza di altri encoder aoTuV permette di usare anche valori negativi per avere bitrate molto bassi. Inoltre è in grado di capire numeri con la virgola come 4,52 per rifinire la dimensione finale del file. Potete usare fino a due numeri decimali ma fate attenzione ad usare la , come separatore invece del punto.
Se state comprimendo uno stream stereo il valore per la qualità che vi suggerisco di usare è 6 uno stream di circa 192 kbit/s.
oggenc -q 6 audio-stereo.wav
Se invece volete arrivare a circa 128 kbit/s usate pure 4.
oggenc -q 4 audio-stereo.wav
Se state comprimendo uno stream 5.1 allora non superate mai 4,5 come valore. Oltre 5 il bitrate del file finale supererà quasi sempre quello dello stream AC3 originale rendendo vani tutti i vostri sforzi di ottenere un file più piccolo. Un ottimo compromesso tra qualità e dimensioni è 3,8
oggenc -q 3,8 audio-surround.wav
Come ultimo ma non perciò meno importante c'è AAC. Si tratta di un codec di ultima generazione che fa uso di tutte le ultime tecniche per cercare di comprimere il suono. Il codec nelle sue ultime evoluzioni è semplicemente imbattibile a bassi bitrate e con 256kbit/s si ottengono file assolutamente indistinguibili dall'originale. È possibile comprimere gli stream sia in modalità CBR che in VBR. Si tratta del codec ufficiale per l'audio multicanale della prossima generazione di DVD ad alta definizione quindi in futuro sarà possibile usarlo per creare video da riprodurre con questi nuovi lettori da tavolo. Purtroppo per ora non è riconosciuto da nessun dispositivo. Se siete in possesso di un iPod Video, invece, potete tranquillamente creare filmati facendo però attenzione ad usare il profilo a bassa complessità.
Il miglior encoder in circolazione in questo momento è quello distribuito gratuitamente insieme a iTunes e QuickTime della Apple. Se volete ottenere il miglior risultato possibile vi consiglio di usare proprio questo. Visto che non è disponibile su Linux dovrete ingegnarvi per comprimere lo stream audio da remoto oppure spostare il file .wav su una macchina con Windows. In alternativa è possibile usare FAAC che è un progetto open source disponibile anche su Linux. La versione che consiglio di usare è la 1.26 che è possibile scaricare da audioconding.com.
Anche con FAAC il modo per ottenere la miglior qualità possibile è usare l'encoding VBR e giocare con il parametro della qualità. Per comprimere uno stream surround 120 è un buon valore però si deve fare attenzione perché FAAC si aspetta di ricevere i canali in un ordine diverso da quello con cui li scrive mplayer, perciò dovrete usare l'opzione -I 5,6. Ecco un piccolo esempio.
$ faac --mpeg-vers 4 --obj-type LC -q 120 -I 5,6 audio-surround.wav
Per uno stream stero invece potete orientarvi anche su 100 come valore e ottenere un ottima qualità con bitrate di circa 120 kbit/s.
$ faac --mpeg-vers 4 --obj-type LC -q 100 audio-stereo.wav
Attenzione. Se avete scelto di comprimere lo stream audio usando la modalità VBR i tre encoder, una volta terminata la compressione, vi diranno il bitrate esatto con cui è stato compresso il file. Segnatevi quel valore perché vi servirà fra pochi istanti.
Calcolare il bitrate
Se avete deciso di eseguire un rip a qualità costante potete tranquillamente saltare questa parte della guida.
Calcolare il bitrate da usare per il flusso video è molto semplice. Il programma che consiglio di usare si chiama divxcomp che vi risparmia di risolvere complesse equazioni matematiche. Una volta lanciato comparirà una finestra in cui dovrete inserire 3 variabili che influiscono sul risultato finale.
La prima variabile da inserire è la dimensione del file finale che desiderate ottenere. I valori più comuni sono 700, se volete il film su un singolo CD, e 1400 per averlo su due CD. In alcuni rari casi se la durata supera le tre ore si può anche usare 2100 in modo da avere 3 CD.
Le ultime due variabili sono due valori di cui siete già in possesso. Il primo è la durata in minuti del film. Prendete il valore che avete trovato con mplayer, dividetelo per 60 ed inseritelo nella seconda casella. La terza e ultima variabile contiene, invece, il bitrate dello stream audio. Se avete intenzione di usare due o più stream all'interno del file finale dovete sommare il valore dei due stream ed inserire il risultato nella casella.
Cliccate su Calculate e segnatevi il bitrate per il flusso video.
Cropping
Il cropping è molto importante perché vi permette di risparmiare tantissimo bitrate se state comprimendo un film che ha quelle fastidiose bande nere orizzontali. Queste strisce non sono altro che un riempimento per portare le dimensioni dell'immagine a quelle richieste dallo standard DVD quindi sono per voi completamente inutili. Per ritagliare il filmato durante la codifica mencoder mette a disposizione un filtro di nome crop. Prima di tutto però dovete rilevare le coordinate da usare con questo filtro. Il modo più sicuro e veloce per rilevare questi valori è usare il filtro cropdetect di mplayer. Prendete questo come esempio.
$ mplayer dvd://1 -vf cropdetect -frames 25 -ss 00:10:00 2>&1 | grep 'Crop area'
Il comando qui sopra non fa altro che riprodurre 5 frame dal decimo minuto in poi e rilevare a quali coordinate è presente l'immagine video e vi dirà inoltre quali opzioni passare al filtro crop. L'output sarà simile a questo.
[Crop] Crop area: X: 0..719 Y: 77..499 (-vf crop=720:416:0:80)??,?% 8 0 3% [Crop] Crop area: X: 0..719 Y: 77..499 (-vf crop=720:416:0:80)??,?% 8 0 3% [Crop] Crop area: X: 0..719 Y: 77..499 (-vf crop=720:416:0:80)??,?% 8 0 3% ...
Ora potete vedere un'anteprima di quello che farà il filtro crop usando rectangle e le coordinate per il crop. Rectangle disegna sopra al video quattro linee bianche che formano il perimetro del rettangolo che formerà il video una volta tagliato dal filtro crop.
$ mplayer dvd://1 -vf rectangle=720:416:0:80
La maggior parte dei codec video richiede che le dimensioni del flusso video in ingresso siano divisibili per 16 ma purtroppo non sempre l'area che contiene il filmato ha queste caratteristiche. Questa limitazione dei codec costringe spesso cropdetect a tagliare alcuni pixel dal filmato originale quindi non preoccupatevi se vedete che il rettangolo non corrisponde esattamente a quello che vedete sullo schermo.
Una volta trovate le giuste coordinate segnatevele e proseguite.
Scaling
Una volta ritagliato il video dovete decidere se riscalarlo o meno. Alcuni affermano che per ottenere un risultato di alta qualità si deve eseguire il numero minore di operazioni sul filmato sorgente. Una delle operazioni più distruttive è la riscalatura, cioè il cambiamento di dimensioni del filmato. Questo tipo di rip in cui il filmato non viene mai riscalato è detto anamorfico. In effetti quello che dicono i sostenitori dei rip anamorfici è vero ma non vi dicono anche che questo tipo di rip richiede molto più bitrate. Inoltre si assume che chi riproduce questi filmati abbia una macchina abbastanza potente da poter eseguire la riscalatura durante la riproduzione e che il container usato possa specificare quello che è detto aspect ratio al suo interno.
Personalmente consiglio di eseguire un rip anamorfico solo se si ha a disposizione molto spazio e il filmato andrà riprodotto solo su un PC. Se siete tra questi pioniere del multimedia saltate tranquillamente questa parte.
Ma come potete capire qual è la risoluzione migliore a cui portare il vostro film? La risposta vi viene data da un tool sviluppato dagli autori di mplayer. Si tratta di uno script di nome calcbpp.pl che purtroppo è disponibile solo sul CVS di mplayer. Per comodità mi sono permesso di creare un piccolo mirror cosi potrete scaricarlo dal mio sito.
calcbpp.pl 474e3eba2c9981074d5c02d9bb50f984204acb3f
L'utilizzo dello script è molto semplice. Dovete passare come argomenti: la larghezza e l'altezza che avete trovato durante la fase di cropping, l'aspect ratio del DVD, il bitrate e il numero di frame per secondo. Visto che siete già in possesso di tutte queste informazioni potete procedere e lanciare lo script. Prendete come esempio questo.
$ calcbpp.pl 720x416 16/9 1032 25
Ora riceverete in output una lunga lista di possibilità come questa. In realtà riceverete molte più righe ma per chiarezza riporterò solo le prime 9.
Prescaled picture: 1023x416, AR 2.46 720x288, diff 5, new AR 2.50, AR error 1.54% scale=720:288 bpp: 0.199 704x288, diff -2, new AR 2.44, AR error 0.70% scale=704:288 bpp: 0.204 688x272, diff 8, new AR 2.53, AR error 2.68% scale=688:272 bpp: 0.221 672x272, diff 1, new AR 2.47, AR error 0.37% scale=672:272 bpp: 0.226 656x272, diff -5, new AR 2.41, AR error 2.06% scale=656:272 bpp: 0.231 640x256, diff 4, new AR 2.50, AR error 1.54% scale=640:256 bpp: 0.252 624x256, diff -2, new AR 2.44, AR error 0.99% scale=624:256 bpp: 0.258 608x240, diff 7, new AR 2.53, AR error 2.83% scale=608:240 bpp: 0.283 ...
Per scegliere bene la risoluzione dovete porre attenzione a due variabili. La prima è l'AR error che vi indica il rapporto tra l'aspect ratio originale e quello dopo la riscalatura. Idealmente questa dovrebbe essere zero ma valori sotto l'1% sono assolutamente indistinguibili ad un occhio umano. Scorrendo la lista potete notare come la seconda e la quarta alternativa hanno valori molto buoni.
Come seconda variabile dovete guardare il valore di bpp. Questa indica quanti bit ha a disposizione ogni pixel durante la codifica. Per avere un video di buona qualità dovete cercare sempre risoluzioni con un bpp tra 0.20 e 0.25.
La seconda alternativa è troppo vicina al limite inferiore quindi la quarta risulta essere la scelta migliore. Segnatevi quindi i valori da passare al filtro scale.
Ora un piccolo avvertimento. Se state lavorando con un film con frame interlacciati allora dovete aggiungere un :1 alle opzioni del filtro scale. Se non lo indicate esplicitamente scale assume che l'immagine sia di tipo progressivo. Cercare di ridimensionare un immagine interlacciata con gli algoritmi per quelle progressive non farà altro che creare un infinità di artefatti di aliasing e ghosting per tutto il film.
Prima di procedere però dovete decidere quale algoritmo usare per riscalare l'immagine. Mencoder permette di scegliere tra 10 diversi algoritmi ma solo 3 sono realmente utili. Il filtro bilineare, si attiva con -sws 1, è molto veloce ma ha la brutta abitudine di eliminare alcuni particolari dall'immagine. Usatelo solo se avete fretta. Tramite -sws 2 abilitate il filtro bi-cubico. È un ottimo compromesso tra velocità e dettagli. Nella maggior parte dei casi è una buona idea affidarsi a questo algoritmo. Come ultimo c'è Lanczos che potete usare tramite -sws 9. Questo filtro è il più avido di CPU ma è quello che mantiene più dettagli quando l'immagine sorgente è molto nitida. Se volete il massimo provate a usare questo al posto del bi-cubico.
Filtri
Filtrare l'immagine sorgente per cercare di migliorarla può essere a volte un passaggio fondamentale per ottenere un ottimo risultato. MEncoder mette a disposizione decine di filtri capaci di modificare il filmato ogni suo aspetto ma i due più importanti quando si crea un rip sono hddn3d e pp=ci.
Il primo è un denoiser. Si preoccupa di eliminare il rumore di fondo presente nei componenti ad alta frequenza. Questo rende le immagini più pulite aumentando la compressibilità dell'immagine. Per usarlo non si deve far altro che aggiungere il suo nome in coda alla lista dei vari filtri di -vf.
mencoder dvd://1 -vf scale=640:480,hqdn3d
I valori di default del filtro sono forse un po' troppo alti per film recenti che sono registrati in digitale e che quindi non hanno grandi disturbi. Con questo tipo di sorgenti potete decidere di omettere completamente il filtro oppure usare valori più rilassati come 2,2,4.
mencoder dvd://1 -vf scale=640:480,hqdn3d=2:2:4
Il secondo filtro invece vi servirà soltanto con sorgenti di tipo interlacciato quindi nel novantacinque percento dei casi non ne avrebbe bisogno. Questo filtro fonde due frame consecutivi per produce una immagine progressiva e quindi molto più facile da comprimere per i normali codec. Se avete intenzione di usare questo filtro ricordate di posizionarlo tra i filtri crop e scale.
$ mplayer dvd://1 -vf crop=688:560:16:8,pp=ci,scale=640:480
Esistono molti modi per deinterlacciare un video ma questo per ora mi è sembrato il migliore sui pochi video su cui l'ho provato. Non produce quei fastidiosi effetti di ghosting come lb o l5 e l'ho trovato ottimo per i normali film. Purtroppo questo film tende a creare degli artefatti di aliasing lungo i contorni dei disegni dei film di animazione. Se questo difetto diventa troppo fastidioso provate con il filtro lavcdeint e se neanche questo produce buoni risultati passate ai due filtri già citati.
Compressione del video
La compressione del video è senza dubbio la parte di tutta la procedura che prende più tempo. Come nell'audio esistono due modalità in cui è possibile comprimere lo stream video.
La prima modalità consiste nel dire al encoder quale valore di quantizzazione deve essere usato per ogni macro blocco dell'immagine. Viene chiamata normalmente codifica a qualità costante e permette di avere un ottima qualità finale in un singolo passaggio. Purtroppo però non permette di scegliere la dimensione finale quindi è utile solo se si desidera archiviare il film per un backup. Usate questa modalità solo se avete fretta o non siete interessati alla dimensione finale del filmato.
La seconda consiste nel comprimere due o più volte il film. Durante la prima passata l'encoder colleziona tutta una serie di statistiche riguardanti il bitrate necessario per comprimere tutti frame del film. Grazie a queste informazioni l'encoder è in grado di prevedere il futuro e può quindi distribuire in modo migliore il bitrate tra le scene. In genere si fanno solo due passate ma codec come XviD e x264 possono fare un numero arbitrario di passaggi. Anche se la qualità aumenta ad ogni passaggio in genere dopo il quarto i guadagni sono talmente bassi da non valere minimamente la candela. Questa modalità permette di avere una qualità ottima anche a bassi bitrate e di controllare esattamente la dimensione finale del file. Tutta questa qualità e controllo si pagano visto che è necessario quasi il doppio del tempo rispetto ad una codifica a qualità costante.
Dopo aver scelto la modalità con cui comprimere il filmato dovete scegliere il codec usare. Esistono decine se non centinaia di algoritmi diversi per comprimere un filmato ma gli unici due degni di nota sono MPEG4 e H.264.
Del primo algoritmo che è conosciuto anche come DivX ne esistono svariate implementazioni di cui alcune anche open source. Quella che da migliori risultati qualitativi è XviD. Si riescono ad ottenere riproduzioni quasi perfette con 1200/1400 kbit/s ed è possibile usarla per creare filmati da vedere su lettori da tavolo se questi sono certificati DivX. La versione che consiglio di usare è la 1.1 che è uscita da pochi mesi e che rispetto alla 1.0 ha portato diverse migliorie riguardanti ai B-Frames. Il miglior rapporto tra qualità e velocità di compressione se si vuole comprimere il film in due passate lo si ottiene usando queste opzioni.
-ovc xvid -xvidencopts pass=1:turbo:quant_type=mpeg:chroma_opt:qpel:gmc -ovc xvid -xvidencopts pass=2:bitrate=$BITRATE:quant_type=mpeg:chroma_opt:qpel:gmc
La prima riga contiene le opzioni da passare durante il prima passaggio mentre la seconda quelle da usare nel secondo. Durante il primo passo il valore del bitrate è ignorato quindi è inutile passarlo. Nel secondo invece dovrete sostituire $BITRATE con il valore che avete calcolato nel passaggio precedente.
Se volete usare la modalità a qualità costante di XviD dovrete usare queste opzione.
-ovc xvid -xvidencopts fixed_quant=$QUANT:quant_type=mpeg:chroma_opt:qpel:gmc
I valori che potete usare al posto di $QUANT vanno da 1 a 32. Per usare numeri con la virgola dovrete inserire delle frazioni. Se ad esempio volete ottenere 2.25 dovrete usare 9/4. Gli unici valori che vale la pena usare sono quelli compresi tra 2 e 5. Usando 2 come valore di quantizzazione si ottengono immagini identiche a quelle originale risulta quindi uno spreco di bitrate usare valori inferiori. Mentre con una superiore a 5 si cominciano a notare fastidiosi artefatti in quasi tute le scene del film.
Se volete creare un filmato in grado di essere riprodotto su un lettore da tavolo dovrete togliere le opzioni gmc e qpel. Purtroppo il novanta percento dei chip di decodifica non le supporta e quando incontrano un filmato compresso con queste due opzioni si rifiutano di riprodurlo.
Il secondo algoritmo, H.264, è stato completato solo da qualche anno e quindi lo sviluppo è cominciato soltanto ultimamente. Si tratta del codec ufficiale dei nuovi DVD ad alta definizione ed è probabilmente l'algoritmo più complesso in circolazione. Grazie a questo algoritmo si riescono ad ottenere risultati perfetti anche con bitrate di molto inferiori a quelli usati con XviD. Purtroppo tutta questa potenza ha i suoi svantaggi. Il codec open source più promettente in questo momento è x264. Essendo ancora in una fase iniziale dello sviluppo non ne è ancora stata rilasciata una versione ufficiale. L'ultima revisione ritenuta stabile è la 435. Questo codec è talmente complesso che per ora non esistono chip capaci di riprodurlo e quindi non è assolutamente compatibile con i lettori da tavolo. Le opzioni che vi permettono di ottenere il miglior rapporto qualità/tempo sono.
-ovc x264 -x264encopts bitrate=$BITRATE:pass=1:turbo=2:subq=6:4x4mv:8x8dct:brdo:me=3:frameref=5:\ bframes=6:b_pyramid:weight_b:mixed_refs -ovc x264 -x264encopts bitrate=$BITRATE:pass=2:subq=6:4x4mv:8x8dct:brdo:me=3:frameref=5:bframes=6:\ b_pyramid:weight_b:mixed_refs
Come per XviD la prima riga contiene le opzioni per il primo passaggio mentre la seconda per il secondo. Anche in questo caso al posto di $BITRATE dovrete inserire il valore col bitrate che avete calcolato. Se volete effettuare una codifica a qualità costante le opzioni da usare sono.
-ovc x264 -x264encopts qp_constant=$QUANT:subq=6:4x4mv:8x8dct:brdo:me=3:frameref=5:bframes=6:\ b_pyramid:weight_b:mixed_refs
In questo caso dovrete sostituire $QUANT con il valore desiderato peroò fate attenzione perché la gestione della quantizzazione su x264 è differente dagli altri codec. La scala usata è di tipo logaritmico e i valori possibili vanno da 0 a 51. Per ottenere risultati simili a XviD con una quantizzazione a 2 si deve usare 18.
Queste sono invece opzioni che entrambi i codec hanno in comune e che sono da passare a mencoder sia durante i passaggi della codifica a due passate che durante la codifica a qualità costante. Servono a specificare alcune caratteristiche del file finale come aspect ratio e il nome del file.
-noskip -o $FILE -nosound
Al posto di $FILE dovrete inserire invece il nome del file in cui salvare temporaneamente il flusso video. Durante il primo passaggio potete tranquillamente usare /dev/null come nome di file e risparmiare cosi spazio su disco.
Ora che avete tutto non vi resta che unire le opzioni del codec, i filtri, scaling e il croping in un unico comando da lanciare. Questi due comandi mostrano un esempio di come eseguire un rip a due passate usando XviD.
$ mplayer dvd://1 -vf crop=720:416:0:80,scale=672:272,hqdn3d=2:2:4 -sws 9 -ovc xvid -xvidencopts \
pass=1:turbo:quant_type=mpeg:chroma_opt:qpel:gmc -noskip -o /dev/null -nosound
$ mplayer dvd://1 -vf crop=720:416:0:80,scale=672:272,hqdn3d=2:2:4 -sws 9 -ovc xvid -xvidencopts \
pass=2:bitrate=1243:quant_type=mpeg:chroma_opt:qpel:gmc -noskip -o stream-video.avi -nosound
Estrarre i capitoli per un mkv
Se avete deciso di creare un file .mkv probabilmente vi sarete accorti che c'è la possibilità di inserire al suo interno le informazioni riguardanti i capitoli che sono presenti sul DVD. Questo permette di saltare alle scene che vi interessano in maniera istantanea. Il programma usato per estrarre queste informazioni è dvdxchap che si trova all'interno del pacchetto ogmtools. L'utilizzo è banale. Non dovrete far altro che specificare il dispositivo su cui si trova il disco e quale titolo volete analizzare. Ecco un esempio.
$ dvdxchap -t 1 /dev/dvd > attacco-dei-cloni-capitoli.txt
Ora se aprite il file .txt avrete una lista di tutti i capitoli all'interno del DVD. Purtroppo sui vari dischi non sono presenti i titoli quindi il programma non può fare altro che inserire un valore generico. Aprite la custodia del DVD e guardate sul booklet per trovare i titoli giusti ed inseriteli a mano con un qualsiasi editor di testo. Questo per esempio è il pezzo che descrive i primi tre capitoli dei Episodio 2 una volta modificato.
CHAPTER01=00:00:00.000 CHAPTER01NAME=Titoli di testa CHAPTER02=00:00:21.720 CHAPTER02NAME=L'attacco dei cloni CHAPTER03=00:03:08.200 CHAPTER03NAME=Il ritorno a Coruscant
Il formato qui sopra è creato appositamente per essere usato con i programmi presenti all'interno di ogmtools e quindi per i file .ogm. Se volete usarlo per creare dei file .mkv ma dovrete impiegare mmg presente nel pacchetto mkvtoolnix come intermediario.
Se sul booklet non sono presenti i titoli potete sempre cercare sui siti Barnes & Noble, Blockbuster oppure Allmovie. Spesso nelle informazioni dei vari film è possibile trovare la lista dei capitoli.
Estrarre i sottotitoli dal DVD
Prima di partire a rippare è meglio capire quali sottotitoli ci sono sul DVD. Un modo molto veloce è usare mplayer in questo modo.
$ mplayer dvd://1 -frames 0 -v 2>&1 | grep sid
Una volta lanciato otterrete una lista di tutti gli stream che contengono sottotitoli all'interno del DVD. Per ognuno di questi stream vi verrà detto il suo numero identificativo, il sid, e la lingua del sottotitolo. In questo esempio ci sono quattro flussi di cui uno inglese mentre gli altri sono tutti italiani.
[open] subtitle ( sid ): 0 language: en [open] subtitle ( sid ): 1 language: it [open] subtitle ( sid ): 2 language: it [open] subtitle ( sid ): 3 language: it
Ora sta a voi decidere quali vi interessano. Io in genere copio tutti gli stream anche se questo mi porta via più tempo.
Decidere la lingua da rippare non è che il primo passo. Ora dovete scegliere quale formato volete adottare per i sottotitoli. Potete copiarli direttamente dal DVD usando quindi Vobsub oppure convertire questi sottotitoli in un formato testuale come srt. Io personalmente preferisco il secondo visto che è di gran lunga superiore. I sottotitoli in Vobsub sono composti da immagini bmp non compresse immagazzinate all'interno del film. Quando il lettore DVD le trova non fa altro che mostrarle sopra la scena corrente per un certo numero di secondi. Essendo immagini non è possibile cambiare il font, la dimensione e il colore delle varie lettere. Inoltre richiedono uno spazio su disco molto maggiore rispetto ad un semplice file di testo.
Per completezza riporto entrambi i procedimenti. Cominciamo quindi col capire come copiarci i flussi Vobsub su hardisk usando mplayer. Purtroppo Non si può avere uno stream vobsub direttamente da mplayer ma usando mencoder in questo modo si ottiene velocemente sia il file .sub che quello .idx.
$ mencoder dvd://1 -vobsubout i-fantastici-quattro -sid 1 -o /dev/null -ovc frameno -nosound
Nell'esempio qui sopra si suppone che abbiate deciso di copiare su hardisk il primo stream in lingua italiana quindi l'opzione per selezionare il sottotitolo è -sid 1. Per quello inglese il comando sarebbe diventato semplicemente -sid 0. Per riprodurre i vobsub avrete bisogno di entrambi i file quindi fate attenzione a non cancellare niente.
Per convertire i sottotitoli in srt c'è da fare un po' di lavoro in più e purtroppo si devono usare alcuni programmi che non fanno parte di mplayer. Vi serviranno i pacchetti ispell, gocr, subtitleripper e transcode. Una volta terminata l'installazione dei pacchetti potete proseguire con il rip dello stream dei sottotitoli, questa volta però usate tccat e non mplayer. Prendete come esempio questo.
$ tccat -i /dev/dvd -T 1 -L | tcextract -x ps1 -t vob -a 0x21 > sottotitoli-italiani
Transcode gestisce in maniera diversa la numerazione degli stream quindi dovrete fare attenzione a non sbagliarvi. In questo esempio il parametro per selezionare lo stream è -a 0x21. Come avrete già capito il numero più basso non è più 0 ma 20. Quindi per ricavare il parametro dovrete aggiungere a 20 il valore del sid trovato con mplayer.
Ora dovete estrarre le singole immagini dallo stream per poterle usare con gocr. Per fare questo usate subtitle2pgm in questo modo.
$ subtitle2pgm -o italiano -c 255,255,0,255 < sottotitoli-italiani
Per evitare di fare confusione io do questo comando sempre all'interno di una nuova cartella per ogni stream. Questo passaggio crea in genere qualche migliaio di nuovi file quindi potreste avere problemi ad orientarvi una volta finito. Al termine della conversione avrete oltre alle immagini anche un file di controllo .srtx molto importante quindi fate attenzione a non cancellarlo. Ora usate pgm2txt per convertire tutte le immagini in testo usando gocr.
$ pgm2txt italiano
Gli algoritmi usati da gocr per riconoscere le lettere all'interno delle immagini non sono perfetti quindi può capitare che si sbaglino oppure si confondono. In questo ultimo caso gocr chiederà consiglio a voi facendovi vedere il pattern e chiedendovi che lettera deve usare. Rispondete e premete invio. Dopo la conversione in testo viene probabilmente la parte più noiosa di un rip. Come ho già detto gocr non è perfetto quindi dovete controllare l'ortografia di tutti i file .txt. In questo caso ispell vi viene in aiuto. Installate il vocabolario per la lingua dei sottotitoli che state rippando e usate ispell in questo modo.
$ ispell -d italian italiano*.txt
Ora usate srttool per mettere tutto il vostro lavoro in un unico file e poi godetevi i vostri sottotitoli testuali.
$ srttool -s -w < italiano.srtx > italiano.srt
Muxing
Una volta terminata la compressione degli stream audio/video ed eventuali sottotitoli potete passare alla fase finale di muxing per unire i file che avete ottenuto in uno unico. I due formati container principali in questo momento il classico Avi e il Matroska.
Il primo è un classico ormai in circolazione da più di un decennio. Ha molte limitazioni ma è l'unica scelta possibile se volete riprodurre il film anche sui lettori divx da tavolo. I file avi avi non possono essere più grandi di 4 GByte, Vi può essere soltanto una traccia video il cui valore di FPS deve essere costante durante tutto il file. Non è possibile usare più di due tracce audio che non possono essere compresse in formati in cui ci possono essere frame di lunghezza nulla. Infine non ha il supporto per per capitoli e sottotitoli.
Esistono vari programmi per creare un nuovo avi. Il più semplice da usare, se si vuole usare un singolo stream audio, è mencoder. Questo è un esempio che mostra come eseguire il muxing tra una traccia mp3 e un video compresso con xvid.
mencoder -ovc copy -oac copy -mc 0 -noodml -aspect $ASPECT -ffourcc DIVX -audiofile audio-stereo.mp3 \
stream-video.avi -info title="Herbie il maggiolino":genre="Film per famiglie" -o herby-il-maggiolino.avi
Al posto di $ASPECT dovrete inserire la frazione che rappresenta l'aspect ratio finale del film. I due valori più comuni e probabilmente anche gli unici due che vi ritroverete ad usare sono 16/9 e 4/3. Nel esempio qui sopra viene anche mostrato come inserire delle informazioni aggiuntive nel file Avi come titolo e genere. Per sapere quali altre informazioni potete aggiungere usate il comando mencoder -info help.
Se volete muxare più di una traccia audio all'interno dello stesso file allora dovrete usare avidemux. Non dovrete far altro che unire la traccia audio principale al video con mencoder e poi aprire il file risultante con questo programma. Nel menù Audio è possibile specificare il file della seconda traccia audio. Selezionato il file non vi resta che salvare il nuovo file.
Se volete spezzare il avi che avete ottenuto in modo da poterlo salvare su due o più CD dovrete usare il programma avisplit che potete trovare nel pacchetto transcode. Usarlo è molto semplice come mostra questo esempio.
$ avisplit -s 700 -i herbie-doppio-audio.avi
Il secondo formato, Matroska, è incredibilmente più flessibile e potente e come se non bastasse ha strumenti molto più potenti da usare. Esiste infatti una interfaccia grafica di nome mmg che potete usare per eseguire ogni genere di operazione sul file. Potete trovare questo programma all'interno del pacchetto mkvtoolnix-gui. Si tratta di un programma molto intuitivo e spiegarvi come usarlo sarebbe una assurda perdita di tempo.
Ringraziamenti
Rangrazio tutti quelli che mi hanno aiutato e leggendo versioni provvisorie della guida.