7.2. Come trattare telecine e interlacciamento nei DVD NTSC

7.2.1. Introduzione

Cos'è telecine?  Se non comprendi molto quello che è scritto in questo documento, leggi la definizione di telecine su Wikipedia (pagina inglese). E' una descrizione comprensibile e ragionevolmente completa di cosa si indichi con telecine.

Una nota riguardo i numeri.  Molti documenti, inclusa la guida su indicata, fanno riferimento al valore dei campi per secondo del video NTSC come 59.94 e i valori corrispondenti di fotogrammi al secondo come 29.97 (con telecine e interlacciamento) e 23.976 (per il progressivo). Per semplicità alcune documentazioni arrotondano tali cifre a 60, 30 e 24.

Strettamente parlando, tutti questi numeri sono approssimati. Il video NTSC in bianco e nero era esattamente 60 campi al secondo, ma successivamente venne scelto 60000/1001 per incastrare i dati del colore e rimanere compatibili con le televisioni bianco e nero contemporanee. Anche il video NTSC digitale (come quello sui DVD) è a 60000/1001 campi al secondo. Da ciò discende che il video interlacciato e telecine è 30000/1001 fotogrammi al secondo; il video progressivo è 24000/1001 fotogrammi al secondo.

Precedenti versioni della documentazioni di MEncoder a molti post archiviati della mailig list fanno riferimento a 59.94, 29.97 e 23.976. Tutta la documentazioni di MEncoder è stata aggiornata per usare i valori in frazione, e anche tu dovresti usare questi.

-ofps 23.976 è sbagliato. -ofps 24000/1001 dovrebbe invece essere usato.

Come viene usato telecine.  Tutto il video pensato per essere riprodotto su televisione NTSC deve essere a 60000/1001 campi al secondo. I film per la TV e gli spettacoli sono spesso registrati direttamente a 60000/1001 campi al secondo, ma la stragrande maggioranzna dei film per cinema è filmata a 24 o 24000/1001 fotogrammi al secondo. Quando i film da cinema vengono masterizzati su DVD, il video viene quindi convertito per la televisione usando un processo chiamato telecine (o telecinema).

Su un DVD il video non è praticamente mai memorizzato con 60000/1001 campi al secondo. Per un video che originariamente era 60000/1001, ogni coppia di campi viene combinata in un fotogramma, risultando in 30000/1001 fotogrammi al secondo. I lettori DVD hardware leggono quindi un parametro codificato nel flusso video pe rdeterminare se le linee pari o quelle dispari debbano formare il primo campo.

Solitamente il contenuto a 24000/1001 fotogrammi per secondi resta così com'è quando viene codificato per un DVD, e il lettore DVD deve eseguire il telecine al momento. Alcune volte invece, il video subisce il telecine prima di essere scritto su DVD; anche se in origine era a 24000/1001 fotogrammi al secondi, diventa 60000/1001 campi al secondo. Quando viene memorizzato su DVD, le coppie di campi vengono assemblate per formare 30000/1001 fotogrammi al secondo.

Guardando i singoli fotogrammi generati da video a 60000/1001 campi al secondo, che sia telecine o no, l'interlacciamento è chiaramente visibile ovunque vi sia del movimento, dato che un campo (diciamo le linee pari) rappresenta un istante nel tempo 1/(60000/1001) secondi dopo l'altro. Riprodurre video interlacciato su un computer risulta brutto sia perché il monitor ha una risoluzione maggiore sia perché il video viene mostrato un fotogramma dopo l'altro invece che un campo dopo l'altro.

Note:

  • Questa sezione si applica solo ai DVD NTSC, e non a quelli PAL.

  • Le righe di esempio per MEncoder proposte nella documentazione non sono pensate per un utilizzo reale. Sono solo quelle minimali richieste per codificare la relativa categoria di video. Come fare buoni rip di DVD o configurare bene libavcodec per la massima qualità non è lo scopo di questa documentazione.

  • Ci sono alcune note a piè di pagina specifiche di questa guida, così indicate: [1]

7.2.2. Come scoprire il tipo di video che possiedi

7.2.2.1. Progressivo

Il video progressivo è stato originariamente filmato a 24000/1001 fps, e memorizzato sul DVD senza modifica alcuna.

Quando riproduci un DVD progressivo con MPlayer, MPlayer emette la riga seguente appena il video inizia la riproduzione:

demux_mpg: 24000/1001 fps progressive NTSC content detected, switching framerate.

Da qui in poi, demux_mpg non dovrebbe mai comunicare di aver trovato "30000/1001 fps NTSC content" (contenuto NTSC a 30000/1001 fps).

Quando guardi video progressivo, non dovresti mai vedere alcuna interlacciatura. Fai tuttavia attenzione, poiché alcune volte c'è una piccola parte in telecine infilata dove non te la aspetteresti. Ho trovato alcuni DVD di spettacoli televisivi che hanno un secondo di telecine ad ogni cambio di scena, o anche in momenti casuali. Una volta ho guardato un DVD che aveva una prima parte progressiva e la seconda in telecine. Se vuoi esserne davvero certo, devi controllare tutto il video:

mplayer dvd://1 -nosound -vo null -benchmark

Using -benchmark makes L'utilizzo di -benchmark fa sì che MPlayer riproduca il filmato il più velocemente possibile; tuttavia, in dipendenza dal tuo hardware, può metterci un po'. Ogni volta che demux_mpg segnala un cambio nella frequenza fotogrammi (framerate), la linea immediatamente sopra ti dirà il tempo ove è cambiata.

Alcune volte il video progressivo sui DVD viene indicato come "soft-telecine" perché è fatto in modo che il lettore DVD esegua il telecine.

7.2.2.2. Telecine

Il video in telecine è stato filmato in origine a 24000/1001, ma ha subito il telecine prima di essere scritto sul DVD.

Quando MPlayer riproduce video in telecine non segnala (mai) alcun cambio di framerate.

Guardado un video in telecine, noterai artefatti che sembrano "lampeggiare": appaiono e scompaiono ripetutamente. Puoi notarlo meglio facendo quello che segue

  1. mplayer dvd://1
  2. Ricerca una parte con movimento.

  3. Usa il tasto . per avanzare di un fotogramma per volta.

  4. Guarda il pattern dei fotogrammi che paiono interlacciati e di quelli progressivi. Se il pattern che vedi è PPPII,PPPII,PPPII,... allora il video è in telecine. Se vedi qualche altro pattern, allora il video può aver subito il telecine attraverso qualche metodo strano; MEncoder può effettuare la conversione senza perdita da telecine non standard a progressivo. Se non vedi alcun pattern, allora molto probabilmente è interlacciato.

Alcune volte il video in telecine sui DVD viene indicato come "hard-telecine". Dato che l'hard-telecine è già a 60000/1001 campi al secondi, il lettore DVD riproduce il video senza elaborazione alcuna.

Un altro modo per scoprire se la tua sorgente è in telecine o no è riprodurla con le opzioni -vf pullup e -v da riga comando per vedere come pullup relaziona i fotogrammi. Se la sorgente è in telecine, dovresti vedere sulla console un pattern 3:2 con 0+.1.+2 e 0++1 che si alternano. Questa tecnica ha il vantaggio di evitare di guardare la sorgente per doverla identificare, il che può tornare utile se vuoi automatizzare la procedura di codifica ovvero se vuoi eseguire tale procedura in remoto su una connessione lenta.

7.2.2.3. Interlacciato

Il video interlacciato è stato filmato in origine a 60000/1001 campi al secondo ed è memorizzato sul DVD a 30000/1001 fotogrammi al secondo. L'effetto di interlacciatura (spesso chimato "combing") è un risultato di coppie di campi che vengono combinate in fotogrammi. Ogni campo è spostato di 1/(60000/1001) secondi e quando vengono mostrati contemporaneamente la differenza si nota.

Come per il video in telecine, MPlayer non dovrebbe mai segnalare alcun cambio di framerete, riproducendo contenuto interlacciato.

Quando guardi attentamente un video interlacciato avanzando fotogramma per fotogramma col tasto ., noterai che ogni singolo fotogramma è interlacciato.

7.2.2.4. Progressivo e telecine mescolati

Tutto il contenuto di un video "progressivo e telecine mescolati" è stato in origine filmato a 24000/1001 fotogrammi al secondo, ma alcune parti alla fine hanno subito il telecine.

Quando MPlayer riproduce questa tipologia di video salta (spesso ripetutamente) avanti e indietro tra "30000/1001 fps NTSC" e "24000/1001 fps progressive NTSC". Controlla le ultime righe dell'emissione di MPlayer per vedere questi messaggi.

Dovresti controllare le sezioni "30000/1001 fps NTSC" per assicurarti che siano davvero in telecine e non solamente interlacciate.

7.2.2.5. Progressivo e interlacciato mescolati

Nei contenuti con video "progressivo e interlacciato mescolati", il video progressivo e interlacciato sono mescolati tra loro.

Questa categoria è decisamente simile a "progressivo e telecine mescolati", fino a quando non controlli le parti a 30000/1001 fps e scopri che non hanno il pattern del telecine.

7.2.3. Come codificare ciascuna categoria

Come menzionato all'inizio, le linee di esempio qui sotto per MEncoder non sono pensate per essere usate davvero; dimostrano solamente i parametri minimi per codificare correttamente ciascuna categoria.

7.2.3.1. Progressivo

Il video progressivo non richiede particolari filtri per la codifica. L'unico parametrioche devi assicurarti di usare è -ofps 24000/1001. Se non lo usi, MEncoder cercherà di codificare a 30000/1001 fps e duplicherà i fotogrammi.

mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001

Spesso e volentieri capita che un video che sembra progressivo contenga anche alcune brevi parti di telecine mescolate. A meno che tu non sia sicuro, conviene trattare il video come progressivo e telecine mescolati. Il calo di prestazioni è piccolo [3].

7.2.3.2. Telecine

Il telecine può essere invertito per ricavare il contenuto originario a 24000/1001 usando un processo conosciuto come telecine-inverso. MPlayer include vari filtri per ottenere ciò; il filtro migliore, pullup, è descritto nella sezione progressivo e telecine mescolati.

7.2.3.3. Interlacciato

Nella maggior parte dei casi reali non è possibile ricavare un video progressivo completo da contenuto interlacciato. L'unico modo di farlo senza perdere metà della risoluzione verticale è raddoppiare il framerate e provare ad "indovinare" quello che forma le linee corrispondenti per ogni campo (questo ha delle controindicazioni - vedi il metodo 3).

  1. Codifica il video in forma interlacciata. Normalmente l'interlacciatura fa a pugni con l'abilità del codificatore di comprimere bene, ma libavcodec ha due parametri appositamente per gestire un pochino meglio il video interlacciato: ildct e ilme. Inoltre viene caldamente consigliato l'utilizzo di mbd=2 [2] poiché codificherà i macroblocchi come non interlacciati in posti dove non c'è movimento. Nota che -ofps qui NON serve.

    mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2

  2. Usa un filtro di de-interlacciatura prima della codifica. Ci sono vari filtri disponibili tra cui scegliere, ognuno dei quali con i suoi pro e i suoi contro. Controlla mplayer -pphelp e mplayer -vf help per vedere cosa c'è disponibile (fa in grep per "deint"), leggi il confronto tra filtri di deinterlacciatura (Deinterlacing filters comparison) di Michael Niedermayer, e cerca nelle mailing list di MPlayer per trovare discussioni riguardanti i vari filtri. Di nuovo il framerate non cambia, indi niente -ofps. Inoltre, la deinterlacciatura dovrebbe essere eseguita dopo il ritaglio [1] e prima del ridimensionamento.

    mencoder dvd://1 -oac copy -vf yadif -ovc lavc

  3. Sfortunatamente, quest'opzione non funziona bene con MEncoder; dovrebbe funzionar bene con MEncoder G2, ma ancora non esiste. Puoi subire dei crash. Tuttavia l'obiettivo di -vf tfields è di generare un fotogramma completo da ogni campo, portando il framerate a 60000/1001. Il vantaggio di questo approccio è che non viene mai perso alcun dato; d'altro canto, dato che ogni fotogramma deriva da un solo campo, le righe mancanti devono essere interpolate in qualche modo. Non ci sono metodi veramente validi per ricreare i dati mancanti, quindi il risultato apparirà molto simile a quando vengono usati dei filtri di deinterlacciatura. La generazione delle righe che mancano è foriera di altri problemi, solamente per il fatto che i dati sono raddoppiati. Conseguentemente per mantenere la qualità si rendono necessari bitrate più elevati e viene usata una maggior potenza di CPU sia per la codifica che la decodifica. tfields ha varie opzioni su come generare le righe mancanti di ogni fotogramma. Se usi questo metodo, fai riferimento al manuale, e scegli l'opzione che può andar meglio per il tuo materiale sorgente. Fai attenzione che usando tfields devi specificare sia -fps che -ofps pari al doppio della sorgente originaria.

    mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
        -fps 60000/1001 -ofps 60000/1001

  4. Se conti di ridurre drasticamente le dimensioni puoi estrarre e decodificare sono uno dei due campi. Perderai di sicuro metà della risoluzione verticale, ma se pensi di ridurla almeno a 1/2 dell'originale, la perdità non sarà poi molta. Il risultato sarà un file progressivo a 30000/1001 fotogrammi per secondo. La procedura è utilizzare -vf field, poi crop [1] e scale in modo corretto. Ricorda che dovrai correggere scale per compensare la risoluzione verticale dimezzata.

    mencoder dvd://1 -oac copy -vf field=0 -ovc lavc

7.2.3.4. Progressivo e telecine mescolati

Per poter portare un video progressivo e telecine mescolati in un video completamente progressivo, le parti in telecine devono essere passate in telecine inverso. Ci son tre modi per ottenere ciò, e sono descritti qui sotto. Nota che dovresti sempre effettuare il telecine inverso prima di ogni ridimensionamento; a meno che tu non sappia davvero cosa tu stia facendo, applica il telecine inverso anche prima del ritaglio (crop) [1]. In questo caso serve -ofps 24000/1001 perché il video in uscita sarà a 24000/1001 fotogrammi al secondo.

  • -vf pullup è studiata per togliere il telecine da materiale in telecine lasciando stare le parti in progressivo. Per poter funzionare correttamente, pullup deve essere seguita dal filtro softskip altrimenti MEncoder andrà in crash. pullup è tuttavia il modo migliore e più preciso disponibile per codificare sia telecine che "progressivo e telecine mescolati".

    mencoder dvd://1 -oac copy -vf pullup,softskip
        -ovc lavc -ofps 24000/1001

  • Un metodo più vecchio, invece di togliere il telecine dove c'è, è portare in telecine le parti che non lo sono e dopo invertire il telecine su tutto il video. Sembra incasinato? softpulldown è un filtro che prende tutto il video e lo porta in telecine. Se facciamo seguire a softpulldown detc oppure ivtc, il risultato finale sarà completamente progressivo. Serve -ofps 24000/1001.

    mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
      

  • Non ho usato -vf filmdint, ma questa è l'opinione che ne ha D Richard Felker III:

    E' OK, ma IMO cerca troppo spesso di deinterlacciare piuttosto che invertire il telecine (come molti lettori DVD da tavolo & televisioni progressive), il che porta orrendi sfarfallii e altri artefatti. Se vuoi utilizzarlo devi perlomeno spendere un po' di tempo ad impostare le opzioni e controllare i risultati prima di esser certo che non faccia danni.

7.2.3.5. Progressivo e interlacciato mescolati

Ci sono due opzioni per gestire questa categoria, ognuna delle quali è un compromesso. Dovresti decidere basandoti sulla lunghezza/durata di uno dei due tipi.

  • Trattarlo come progressivo. Le parti interlacciate sembreranno interlacciate, e alcuni dei campi interlacciati dovranno essere scartati, apportando un pelino di saltellamenti impari. Se vuoi puoi utilizzare un filtro di postelaborazione, ma potrebbe leggermente inficiare le parti progressive.

    Questa opzione non sarebbe decisamente da usare se casomai ti interessi riprodurre il video su un dispositivo interlacciato (con una sche da TV, per esempio). Se hai fotogrammi interlacciati in un video a 24000/1001 fotogrammi al secondo, verranno messi in telecine con i fotogrammi progressivi. Metà dei "fotogrammi" interlacciati saranno mostrati per la durata di tre campi (3/(60000/1001) secondi), risultando in un effetto alla "salto indietro nel tempo" che è bruttino. Se solo provi a far in questo modo, devi usare in filtro di deinterlacciamento come lb o l5.

    Può anche essere una brutta idea per un display progressivo. Scarterà coppie di campi interlacciati consecutivi, dando una discontinuità che si vede maggiormente con il secondo metodo, che mostra per due volte alcuni fotogrammi progressivi. Il video interlacciato a 30000/1001 fotogrammi per secondo è di suo un pochino zoppo dato che sarebbe da mostrare a 60000/1001 campi al secondo, quindi i fotogrammi duplicati non si notano così tanto.

    In ogni modo è meglio tenere in considerazione il tuo contenuto e come intendi riprodurlo. Se il tuo video è al 90% progressivo e non pensi di riprodurlo mai su una TV, dovresti propendere per l'approccio progressivo. Se è progressivo solo per metà, probabilmente ti converrà codificarlo come se fosse interlacciato.

  • Trattarlo come interlacciato. Alcuni fotogrammi delle parti progressive verranno duplicati, portando saltelli impari. Ancora, i filtri di deinterlacciamento potrebbero inficiare le parti progressive.

7.2.4. Note a pie' pagina

  1. Riguardo il taglio (crop):  I dati video sui DVD sono memorizzati in un formato conosciuto come YUV 4:2:0. In un video YUV, la luminosità ("luma") e il colore ("chroma") vengono salvati separatamente. Dato che l'occhio umano è in qualche modo meno sensibile al colore che alla luminosità, in un'immagine YUV 4:2:0 c'è solo un pixel chroma ogni quattro pixel luma. In un'immagine progressiva, ogni quadrato di quattro pixel luma (due per lato) ha in comune un pixel chroma. Devi prima ridimensionare lo YUV 4:2:0 progressivo a una risoluzione pari, e anche utilizzare lo scostamento. Per esempio, crop=716:380:2:26 è OK ma crop=716:380:3:26 non lo è.

    Quando gestisci YUV 4:2:0 interlacciato, la situazione è un pelo più complessa. Invece di avere quattro pixel luma nel fotogramma che condividono un pixel chroma, quattro pixel in ogni campo condividono un pixel chroma. Quando i campi vengono interlacciati per formare un fotogramma, ogni "scanline" è alta un pixel. Ora, invece di avere tutti i quattro pixel luma in un quadrato, ci sono due pixel affiancati, e gli altri due pixel sono affiancati due scanline più sotto. I due pixel luma nella scanline di mezzo sono di un altro campo, e quindi condividono un pixel chroma differente con due pixel due scanline dopo. Tutta questa confusione rende necessario avere dimensione verticale pari e lo scostamento deve essere un multiplo di quattro. La dimensione orizzontale può rimanere dispari.

    Per video in telecine, si consiglia di effettuare il taglio dopo l'inversione del telecine. Una volta che il video è progressivo ti serve solo tagliare di numeri dispari. Se davvero vuoi ottenere il piccolo aumento di velocità che puoi avere tagliando prima, devi prima tagliare in verticale di multipli di quattro, altrimenti il filtro di telecine inverso non riceverà dati corretti.

    Per video interlacciato (non in telecine), devi sempre tagliare verticalmente di multipli di quattro a meno che tu non stia usando -vf field prima del taglio.

  2. Riguardo i parameti di codifica e la qualità:  Il fatto che qui venga cosigliata mbd=2 non significa che non si debba usare altrimenti. Insieme con trell, mbd=2 è una delle due opzioni di libavcodec che ottimizzano al meglio la qualità e sarebbero sempre da utilizzare entrambe a meno che l'aumento della velocità di codifica sua proibitivo (ad es. per la codifica in tempo reale (realtime)). Ci sono molte altre opzioni di libavcodec che aumentano la qualità (e rallentano la codifica), ma questo non è l'obiettivo di questa documentaziione.

  3. About the performance of pullup:  It is safe to use pullup (along with softskip ) on progressive video, and is usually a good idea unless the source has been definitively verified to be entirely progressive. The performace loss is small for most cases. On a bare-minimum encode, pullup causes MEncoder to be 50% slower. Adding sound processing and advanced lavcopts overshadows that difference, bringing the performance decrease of using pullup down to 2%.