7. Codificare con MEncoder

Per la lista completa delle opzioni disponibili per Mencoder e gli esempi, vedi la pagina di man. Per una serie di esempi pratici ed una guida dettagliata sull'uso dei parametri di codifica, leggi i consigli per la codifica raccolti da varie discussioni avvenute sulla mailing list mplayer-users. Cerca negli archivi le discussioni sui dettagli ed i problemi relativi alla codifica con MEncoder.

7.1 Codificare in MPEG-4 ("DivX") in 2 o 3 passaggii

codifica a 2 passaggi : il nome deriva dal fatto che questo metodo codifica il file due volte. La prima codifica (passaggio doppiato) crea dei file temporanei (*.log) con una grandezza di pochi megabyte, non cancellarli ancora (puoi cancellare l' AVI). Nel secondo passaggio, viene creato il file di output, usando i dati sul bitrate dei file temporanei. Il file risultante avrà una migliore qualità d'immagine. Se questa è la prima volta che ne senti parlare, dovresti consultare alcune guide disponibili in rete.

Questo esempio mostra come codificare un DVD in un AVI MPEG-4 ("DivX") a 2 passaggi. Bisogna dare solo due comandi :
    rm frameno.avi - rimuovi questo file che può essere rimasto da una precedente codifica a 3 passaggi (interferisce col processo attuale)
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

codifica a 3 passaggi : questa è un' estensione della codifica a 2 passaggi, dove la codifica audio avviene in un passaggio separato. Questo metodo abilita la stima del bitrate video raccomandato per far stare il file risultante in un CD. In più, l'audio è codificato solo una volta, diversamente dalla modalità in 2 passaggi. Schema :

  1. Rimuovi il file temporaneo che va in conflitto:

    rm frameno.avi

  2. Primo passaggio:

    mencoder <file/DVD> -ovc frameno -oac mp3lame -lameopts vbr=3 -o frameno.avi

    Sarà creato un file avi di solo audio, contenente SOLO il flusso audio richiesto. Non dimenticare -lameopts, se ne hai bisogno. Se stai codificando un filmato lungo, MEncoder da i valori di bitrate consigliati per dimensioni di destinazione di 650Mb, 700Mb, e 800Mb, dopo la fine di questo passaggio.

  3. Secondo passaggio:

    mencoder <file/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=<bitrate>

    Questo è il primo passaggio della codifica video. Puoi specificare il bitrate video dato da MEncoder alla fine del precedente passaggio.

  4. Terzo passaggio:

    mencoder <file/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=<bitrate>

    Questo è il secondo passaggio della codifica video. Specifica lo stesso bitrate del passo precedente a meno che tu sappia veramente cosa stai facendo. In questo passaggio, l'audio preso da frameno.avi sarà inserito nel file di destinazione.. ed è tutto pronto!

Esempio di codifica a 3 passaggi :

    rm frameno.avi - rimuovi questo file, che può essere rimasto da una precedente codifica a 3 passaggi (interferisce con quella attuale)
    mencoder dvd://2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

7.2 Codificare in formato MPEG

MEncoder può creare file in formato MPEG (MPEG-PS). Ciò è probabilmente utile solo con il codec mpeg1video di libavcodec, poiché i programmi - tranne MPlayer - si aspettano solo video MPEG1 ed audio MPEG1 layer 2 (MP2) nei file MPEG.

Questa funzione non è molto utile al momento, oltre ad avere probabilmente molti bug, soprattutto perchè al momento MEncoder non può codificare l'audio MPEG1 layer 2 (MP2), che tutti gli altri player si aspetano di trovare nei file MPEG.

Per modificare il formato d'uscita di MEncoder, usare l'opzione -of mpeg.

Esempio:
  mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy <other options> media.avi -o output.mpg

7.3 Ridimensionare i filmati

Spesso emerge l'esigenza di ridimensionare le immagini del filmato. Le ragioni possono essere molte: diminuire la dimensione del file, la larghezza di banda della rete, ecc. Molte persone usano il ridimensionamento anche quando convertono DVD o SVCD in AVI DivX. Questo è male. Invece di fare così, leggete la sezione Conservare le proporzioni.

Il processo di ridimensionamento è gestito dal filtro video 'scale': -vf scale=larghezza:altezza. La qualità può essere impostata tramite l'opzione -sws. Se non specificata, MEncoder userà il valore 0 : bilineare veloce.

Utilizzo :

    mencoder input.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=640:480 -oac copy -o output.avi

7.4 Copia da stream

MEncoder può gestire i flussi in entrata in due modi : codificandoli o copiandoli. Questa sezione tratta la copia.

7.5 Correggere gli AVI con indice o intervallo malformati

E' semplicissimo. Copiamo semplicemente i flussi audio e video, e MEncoder genera l'indice. Naturalmente questo non può correggere possibili bug nei flussi video e/o audio. Corregge anche i file mal intervallati, così non sarà più necessaria l'opzione -ni per leggerli.

Comando : mencoder -idx input.avi -ovc copy -oac copy -o output.avi

7.5.1 Unire file AVI

Un utile effetto collaterale della funzione di riparazione dei file AVI è la possibilità di usare MEncored per unire 2 (o più) file AVI:

Comando: cat 1.avi 3.avi | mencoder -noidx -ovc copy -oac copy -o output.avi -

Nota:MEncoder si aspetta che 1.avi e 2.avi utilizzino gli stessi codec, risoluzione, stream rate, ecc, ed almeno 1.avi non deve avere errori. Se necessario, puoi riparare i file prima di unirli, come descritto sopra.

7.6 Codificare con le famiglia di codec libavcodec

Libavcodec fornisce una semplice codifica in molti interessanti formati video e audio (al momento i suoi codec audio non sono supportati). Puoi codificare i seguenti codec :

La prima colonna contiene i nomi dei codec che devono essere passati dopo l'opzione vcodec, come : -lavcopts vcodec=msmpeg4

Un esempio, con la compressione MJPEG :
    mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

7.7 Codificare da file di immagine multipli (JPEG, PNG o TGA)

MEncoder è in grado di creare filmati a partire da uno o più file JPEG, PNG o TGA. Con un semplice framecopy può creare file MJPEG (Motion JPEG) o MPNG (Motion PNG).

Spiegazione del processo

MEncoder decodifica le immagini in input con un codec video MJPEG disponibile (per i PNG, usa libpng).

MEncoder quindi passa l' immagine decodificata al compressore video scelto (DivX4, Xvid, ffmpeg msmpeg4, ecc...).

Esempi

La spiegazione dell'opzione -mf si trova nella pagina di man.

Creare un file DivX4 da tutti i file JPEG presenti nella directory attuale :
  mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi \*.jpg

Creare un file DivX4 da alcuni dei file JPEG presenti nella directory attuale :
  mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi frame001.jpg,frame002.jpg

Creare un file Motion JPEG (MJPEG) da tutti i file JPEG presenti nella directory attuale :
  mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o output.avi \*.jpg

Creare un file non compresso da tutti i file PNG presenti nella directory attuale :
  mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb -o output.avi \*.png

Nota: La larghezza deve essere un multiplo intero di 4, è una limitazione del formato RAW RGB dei file AVI.

Creare un file Motion PNG (MPNG) da tutti i file PNG presenti nella directory attuale :
  mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy -o output.avi \*.png

Creare un file Motion TGA (MTGA) da tutti i file TGA presenti nella directory attuale:
  mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o output.avi \*.tga

7.8 Estrarre i sottotitoli dei DVD in un file Vobsub

MEncoder è in grado di estrarre i sottotitoli dei DVD e codificarli nel formato file Vobsub. Questi consistono in un paio di file con estensione .idx e .sub e sono generalmente impacchettati in un unico archivio .rar. MPlayer può leggerli usando le opzioni -vobsub e -vobsubid.

Devi specificare il nome di base (cioè senza le estensioni .idx o .sub) dei file di output con -vobsubout e l'indice per questo sottotitolo nei file risultanti con -vobsuboutindex.

Se l'input non viene da un DVD dovresti usare -ifo per indicare il file .ifo necessario per costruire il file .idx risultante.

Se l'input non viene da un DVD e non hai il file .ifo devi usare l'opzione -vobsubid per fargli sapere quale identificativo di lingua mettere nel file .idx.

Ogni esecuzione aggiungerà l'attuale sottotitolo ai file .idx e .sub se questi esistono già. Quindi dovresti rimuoverli prima di ogni nuova esecuzione.

Esempi

Copiare due sottotitoli da un DVD usando la codifica a tre passaggi
  rm sottotitoli.idx sottotitoli.sub
  mencoder dvd://1 -vobsubout sottotitoli -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno -oac mp3lame -lameopts vbr=3
  mencoder dvd://1 -oac copy -ovc divx4 -divx4opts pass=1
  mencoder dvd://1 -oac copy -ovc divx4 -divx4opts pass=2 -vobsubout subtitles -vobsuboutindex 1 -sid 5

Copiare un sottotitolo francese da un file MPEG
  rm sottotitoli.idx sottotitoli.sub
  mencoder movie.mpg -ifo movie.ifo -vobsubout subtitles -vobsuboutindex 0 -vobsuboutid fr -sid 1

7.9 Conservare le proporzioni

I file dei DVD e dei SVCD (cioè MPEG1/2) contengono un valore di proporzione, che descrive come il lettore dovrebbe ridimensionare il flusso video, così che le persone non abbiano teste a uovo (es.: 480x480 + 4:3 = 640x480). Comunque quando si codificano file AVI (DivX), bisogna considerare che le intestazioni degli AVI non salvano questo valore. Ridimensionare il filmato è disgustoso e spreca tempo, deve esserci un modo migliore!

C'è.

L'MPEG4 ha una caratteristica unica: il flusso video può contenere le proporzioni che gli servono. Si, proprio come i file MPEG1/2 (DVD, SVCD). Purtroppo, non ci sono lettori video la fuori che supportino questa possibilità. Eccetto MPlayer.

Si può usare questa caratteristica solo con il codec mpeg4 di libavcodec. Ricorda: anche se MPlayer riproducerà correttamente il file creato, gli altri lettori useranno le proporzioni sbagliate.

Dovresti considerare seriamente la possibilità di tagliare le bande nere sopra e sotto al filmato. Vedi la pagina di man per l'utilizzo dei filtri cropdetect e crop.

Utilizzo:

$ mencoder sample-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4:aspect=16.0/9.0 -vf crop=714:548:0:14 -oac copy -o output.avi