# MPlayer - Il Visualizzatore di film

## http://www.mplayerhq.hu

Diritto d'autore © 2000-2025 MPlayer team

License

MPlayer is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

MPlayer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with MPlayer; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

# Come leggere questa documentazione

Se installi per la prima volta: assicurati di leggere tutto da qui fino alla fine della sezione sull'installazione e segui i collegamenti che troverai. Se hai altre domande, ritorna alla Tabella dei Contenuti e cerca l'argomento, leggi le FAQ, o prova a ricercare nei file (con grep, per esempio). Molte domande possono avere una risposta qui da qualche parte e le restanti probabilmente sono già state poste nelle nostre mailing list. Controlla gli archivi, ci sono un sacco di valide informazioni da trovare.

# Capitolo 1. Introduzione

MPlayer è un visualizzatore di filmati per Linux (gira su molte altre piattaforme Unix e architetture di CPU non-x86, vedi Ports). Riproduce la maggior parte dei file del tipo MPEG, VOB, AVI, OGG/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, FLI, RM, NuppelVideo, yuv4mpeg, FILM, RoQ, PVA, file Matroska, aiutato da molti codec nativi, di Xanim, RealPlayer, o codec DLL binari di Win32. Puoi guardare VideoCD, SVCD, DVD, 3ivx, RealMedia, Sorenson, Theora, e anche filmati MPEG-4 (DivX). Un'altra importante caratteristica di MPlayer è il supporto per un'ampia gamma di driver di uscita. Funziona con X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, libcaca, DirectFB, ma puoi anche usare GGI e SDL (e in questo modo tutti i loro driver) e pure alcuni driver specifici di basso livello (per Matrox, 3Dfx e Radeon, Mach64, Permedia3)! La maggior parte di essi supporta il ridimensionamento via software o hardware, così puoi gustarti i filmati a schermo intero. MPlayer supporta la riproduzione attraverso alcune schede di decodifica MPEG hardware, come DVB e DXR3/Hollywood+. E cosa dire dei grandi e bei sottotitoli sfumati con antialias (14 tipi supportati) con font europei/ISO 8859-1,2 (ungherese, inglese, ceco, etc), cirillici, coreani, e del visualizzatore su schermo (OnScreen Display, OSD)?

Il riproduttore è decisamente robusto nella riproduzione di file MPEG rovinati (utile per alcuni VCD) e riproduce file AVI imperfetti, che sono illeggibili con il famoso Windows Media Player. Si possono anche leggere gli AVI non indicizzati e puoi ricostruire il loro indice temporaneamente con l'opzione `-idx` o permanentemente con MEncoder, abilitando così la ricerca! Come puoi vedere, la stabilità e la qualità sono lo cose più importanti, ma anche la velocità è impressionante. C'è anche un potente sistema di filtri per la manipolazione audio e video.

MEncoder (MPlayer's Movie Encoder, Codificatore di film di MPlayer) è un semplice codificatore di film, progettato per codificare tutti i filmati visualizzabili da MPlayer (AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA) in altri formati sempre visualizzabili da MPlayer (vedi sotto). Può codificare con vari codec, come MPEG-4 (DivX4) (uno o due passi), `libavcodec`, audio PCM/MP3/VBR MP3.

Caratteristiche di MEncoder

- Codifica da un'ampia gamma di formati e decodificatori di MPlayer

- Codifica in tutti i formati da `libavcodec` di FFmpeg

- Codifica video da sintonizzatori TV compatibili V4L

- Codifica/multiplex in file AVI con interleave con indici corretti

- Creazione di file da flussi audio esterni

- Codifica in 1, 2 o 3 passi

- Audio MP3 VBR

- Audio PCM

- Copia dei flussi

- Sincronizzazione A/V dell'input (basata su PTS, può esser disabilitata con l'opzione `-mc 0`)

- Correzione dei fps con l'opzione `-ofps` (utile codificando VOB a 30000/1001 fps in AVI a 24000/1001 fps)

- Usa il nostro potentissimo sistema di filtri (crop, expand, flip, postprocess, rotate, scale, conversione rgb/yuv)

- Può codificare sottotitoli DVD/VOBsub e sottotitoli testuali nel file di uscita

- Può codificare sottotitoli DVD in formato VOBsub

MPlayer e MEncoder possono esser distribuiti nei termini della GNU General Public License Version 2.

# Capitolo 2. Installazione

Una rapida guida di installazione si può trovare nel file `README`. Per favore leggi prima quello, poi torna qui per il resto dei dettagli scabrosi.

In questa sezione verrai guidato attraverso il processo di compilazione e di configurazione di MPlayer. Non è semplice, ma non sarà necessariamente difficile. Se ti si presenta un'esperienza diversa da quella descritta, per favore cerca in questa documentazione e troverai le risposte.

## 2.1. Prerequisiti Software

- binutils - la versione consigliata è 2.11.x.

- gcc - le versioni consigliate sono la 2.95 e le 3.4+. La 2.96 e le 3.0.x sono conosciute per generare codice bucato, anche la 3.1 e la 3.2 hanno problemi, la 3.3 alcuni piccoli. Su architettura PowerPC, usa le 4.x.

- Xorg/XFree86 - la versione consigliata è 4.3 o successiva. Assicurati che anche i pacchetti di sviluppo (dev) siano installati, altrimenti non funzionerà. Non hai assolutamente bisogno di X, alcuni driver di uscita video funzionano senza.

- GNU make 3.81

- FreeType - per l'OSD e i sottotitoli è richiesta la versione 2.0.9 o successiva.

- ALSA - facoltativo, per il supporto di uscita audio ALSA. Richiesta almeno la 0.9.0rc4.

- libjpeg - richiesto per il driver opzionale di uscita video JPEG.

- libpng - richiesto per il driver opzionale di uscita video PNG.

- directfb - facoltativo, richiesta la versione 0.9.13 o successiva per il driver di uscita video directfb.

- lame - 3.90 o successivo consigliato, necessario per codificare audio MP3 con MEncoder.

- zlib - consigliato, usato da molti codec.

- LIVE555 Streaming Media - facoltativo, necessario per alcuni flussi RTSP/RTP

- cdparanoia - facoltativo, per supporto CDDA

- libxmms - facoltativo, per il supporto del plugin di ingresso XMMS input plugin. Richiesta almeno la 1.2.7.

- libsmb - facoltativo, per il supporto di rete SMB

- libmad - facoltativo, per la decodifica MP3 veloce solo a interi su piattaforme senza FPU

## 2.2. Caratteristiche

- Decidi se ti serve la GUI (interfaccia grafica). Se sì, vedi la sezione GUI prima di compilare.

- Se vuoi installare MEncoder (il nostro grande codificatore per tutte le occasioni), vedi la sezione per MEncoder.

- Se hai un sintonizzatore TV compatibile V4L e desideri vedere/catturare e codificare filmati con MPlayer, leggi la sezione ingresso TV.

- Se hai un sintonizzatore radio compatibile V4L e desideri sentire e registrare il suono con MPlayer, leggi la sezione radio.

- C'è un buon supporto per Menu OSD pronto per l'uso. Controlla la sezione Menu OSD.

Poi compila MPlayer:

    ./configure
    make
    make install

A questo punto, MPlayer è pronto per l'utilizzo. Controlla se hai un file `codecs.conf` nella tua directory utente (`~/.mplayer/codecs.conf`) rimasto da precedenti versioni di MPlayer. Se lo trovi, cancellalo.

Gli utenti Debian possono costruirsi un pacchetto .deb per conto loro, è molto semplice. Basta eseguire

    fakeroot debian/rules binary

nella directory radice di MPlayer. Vedi pacchetti Debian per instruzioni dettagliate.

Controlla sempre l'output di `./configure` e il file `config.log`, essi contengono informazioni su cosa sarà compilato e cosa no. Puoi anche voler guardare i file `config.h` e `config.mak`. Se hai alcune librerie installate, ma non rilevate da `./configure`, allora controlla di avere anche i file header corretti (di solito i pacchetti -dev ) e di versioni corrispondenti. Il file `config.log` solitamente ti dice cosa manca.

Anche se non obbligatorio, i font dovrebbero essere installati, per avere l'OSD e la funzione sottotitoli. Il metodo consigliato è installare un file di font TTF e dire a MPlayer di usarlo. Vedi la sezione Sottotitoli e OSD per i dettagli.

## 2.3. E relativamente alla GUI?

La GUI abbisogna di GTK+ 2 (non è completamente in GTK, ma i pannelli lo sono), per cui le `GTK` (e le controparti di sviluppo, solitamente chiamate `gtk-dev`) devono essere installate. Puoi compilare la GUI specificando `--enable-gui` quando esegui `./configure`. Poi, per girare in modalità GUI, devi lanciare il binario gmplayer.

Siccome MPlayer non ha una skin inclusa, devi scaricarne una se vuoi usare la GUI. Vedi la pagina di download. Dovrebbe essere decompressa nella directory di sistema (`$PREFIX/share/mplayer/skins`) o dell'utente `$HOME/.mplayer/skins`. MPlayer di default cerca in questi percorsi una directory chiamata `default`, ma puoi usare l'opzione `-skin `nomeskin``, o la voce `skin=nomeskin` nel file di configurazione, per utilizzare la skin nella directory `*/skins/nomeskin`.

## 2.4. Font e OSD

Devi dire a MPlayer quale font usare per usufruire dell'OSD e dei sottotitoli. Un qualsiasi font TrueType o basato su bitmap funzionerà. Tuttavia si consigliano i font TrueType in quanto hanno una resa grafica migliore, possono essere ridimensionati correttamente rispetto alla dimensione del filmato e gestiscono meglio differenti codifiche.

### 2.4.1. Font TrueType

Ci sono due modi di far funzionare i font TrueType. Il primo consiste nel passare l'opzione `-font` sulla riga comando per specificare un file di font TrueType. Questa opzione sarà una buona candidata da mettere nel tuo file di configurazione (vedi la pagina di manuale per i dettagli). Il secondo è creare un collegamento simbolico al font di tua scelta, con nome `subfont.ttf`. Sia

    ln -s /percorso/del/font_di_esempio.ttf ~/.mplayer/subfont.ttf

singolarmente per ciascun utente, oppure uno di sistema:

    ln -s /percorso/del/font_di_esempio.ttf $PREFIX/share/mplayer/subfont.ttf

Se MPlayer è compilato con il supporto per `fontconfig`, i metodi precedenti non funzioneranno, piuttosto `-font` si aspetterà un nome di font `fontconfig` e il suo default sarà il font sans-serif. Esempio:

    mplayer -font 'Bitstream Vera Sans' anime.mkv

Per ottenere una lista dei font conosciuti da `fontconfig`, usa il comando fc-list.

### 2.4.2. Font bitmap

Se per qualche ragione desideri o ti serve utilizzare font bitmap, scaricali dal nostro sito. Puoi scegliere tra vari font ISO e qualche font creato dagli utenti in varie codifiche.

Decomprimi il file che hai scaricato, in `~/.mplayer` o `$PREFIX/share/mplayer`. Poi rinomina o crea un collegamento simbolico ad una delle directory `font`, per esempio:

    ln -s ~/.mplayer/arial-24 ~/.mplayer/font

    ln -s $PREFIX/share/mplayer/arial-24 $PREFIX/share/mplayer/font

I font dovrebbero avere un file `font.desc` appropriato che relazioni le posizioni unicode con la pagina di codici corrente dei sottotitoli di testo. Un'altra soluzione sarebbe avere sottotitoli in UTF-8 e usare l'opzione `-utf8` oppure dare al file dei sottotitoli lo stesso nome del tuo file video, con un'estensione `.utf` e posizionarlo nella stessa directory del file video stesso.

### 2.4.3. Menu OSD

MPlayer possiede un'interfaccia per i Menu OSD completamente personalizzabile.

### Nota

il menu Preferenze attualmente NON E' IMPLEMENTATO!

Installazione

1. compila MPlayer passando a `./configure` l'opzione `--enable-menu`

2. assicurati di avere un font OSD installato

3. copia `etc/menu.conf` nella tua directory `.mplayer`

4. copia `etc/input.conf` nella tua directory `.mplayer`, oppure nella directory di configurazione di sistema di MPlayer (default: `/usr/local/etc/mplayer`)

5. controlla e modifica `input.conf` per abilitare i tasti di movimento nel menu (è lì spiegato)

6. avvia MPlayer come nell'esempio seguente:

       mplayer -menu file.avi

7. premi quualcuno dei tasti menu che hai definito

## 2.5. Installazione codec

### 2.5.1. Xvid

Xvid è un codec video libero compatibile MPEG-4 ASP. Nota che Xvid non è necessario per decodificare video codificato in Xvid. Viene usata di default `libavcodec`, dato che è più veloce.

Installare `Xvid`

Come molti software open source, è disponibili in due modi: rilasci ufficiali e la versione in CVS. La versione CVS solitamente è solitamente abbastanza stabile da utilizzare, visto che la maggior parte delle volte include fix per i bachi che esistono nei rilasci. Ecco quello che devi fare per far sì che la versione CVS di `Xvid` funzioni con MEncoder:

1.     cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login

2.     cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore

3.     cd xvidcore/build/generic

4.     ./bootstrap.sh && ./configure

   Puoi dover aggiungere alcune opzioni (controlla quello che emette ./configure --help).

5.     make && make install

6. Ricompila MPlayer.

### 2.5.2. `x264`

`x264` è una libreria per creare flussi video H.264. I sorgenti di MPlayer vengono aggiornati ogniqualvolta ci sia un cambiamento nelle API di `x264`, quindi si consiglia sempre di utilizzare la versione Subversion di MPlayer.

Se hai un client GIT installato, si possono ottenere i sorgenti più recenti di x264 col seguente comando:

    git clone git://git.videolan.org/x264.git

Dopodiché lo si compila e installa nel solito modo:

    ./configure && make && make install

Poi riesegui `./configure` affinché MPlayer rilevi la presenza di `x264`.

### 2.5.3. AMR

Il codec voce Adaptive Multi-Rate è usato nei telefoni cellulari di terza generazione (3G). La referenza per l'implementazione è disponibile da The 3rd Generation Partnership Project (gratuita per uso personale). Per abilitarne il supporto, scarica e installa le librerie per AMR-NB e AMR-WB seguendo le istruzioni da quella pagina. Dopodiché ricompila MPlayer.

### 2.5.4. XMMS

MPlayer può utilizzare i plugin di ingresso di XMMS per riprodurre molti formati file. Ci sono plugin per i suoni dei videgiochi SNES, SID (dal Commodore 64), molti formati Amiga, .xm, .it, VQF, musepack, Bonk, shorten e molti altri. Puoi trovarli sulla pagina dei plugin di ingresso di XMMS.

Per questa caratteristica devi avere XMMS e compilare MPlayer con `./configure --enable-xmms`.

## 2.6. RTC

Ci sono tre metodi di temporizzazione in MPlayer.

- Per utilizzare il vecchio metodo, non devi fare nulla. Utilizza `usleep()` per gestire la sincronizzazione A/V, con una precisione di +/- 10ms. Tuttavia delle volte la sincronizzazione serve che sia ancora più precisa.

- Il nuovo codice per la temporizzazione usa l'RTC (RealTime Clock) per il suo compito, poiché ha timer precisi di 1ms. L'opzione `-rtc` lo abilita, ma è richiesto un kernel adeguatamente preparato. Se stai utilizzando un kernel 2.4.19pre8 o successivo, puoi impostare la frequenza massima dell'RTC per gli utenti normali attraverso il filesystem `/proc` . Usa uno dei comandi seguenti per abilitare l'RTC per gli utenti normali:

      echo 1024 > /proc/sys/dev/rtc/max-user-freq

      sysctl dev/rtc/max-user-freq=1024

  Puoi rendere queste modifiche definitive aggiungendo l'ultimo al file `/etc/sysctl.conf`.

  Puoi verificare l'efficienza del nuovo temporizzatore nella riga di stato. Le funzioni di risparmio energetico dei BIOS di alcuni portatili con CPU speedstep interagiscono male con l'RTC. Audio e video possono perdere di sincronia. Collegare il cavo di alimentazione prima di accendere il portatile pare esser di aiuto. In alcune combinazioni hardware (confermato usando DVD non DMA su una scheda ALi1541) l'utilizzo dell'RTC può portare una riproduzione saltellante. In questi casi si raccomanda di utilizzare il terzo metodo.

- Il terzo codice di temporizzazione viene abilitato tramite l'opzione `-softsleep`. Ha l'efficienza dell'RTC, ma non lo utilizza. D'altro canto, richiede più CPU.

# Capitolo 3. Utilizzo

## 3.1. Riga comando

MPlayer usa una sequenza di riproduzione complessa. Le opzioni passate sulla riga comando possono venir applicate a tutti i file/URL o solo ad alcuni, a seconda della loro posizione. Per esempio

    mplayer -vfm ffmpeg movie1.avi movie2.avi

userà i decodificatori FFmpeg per ambedue i file, mentre

    mplayer -vfm ffmpeg movie1.avi movie2.avi -vfm dmo

riprodurrà il secondo file con un decodificatore DMO.

Puoi raggruppare file/URL insieme usando `{` e `}`. Torna utile con l'opzione `-loop`:

    mplayer { 1.avi -loop 2 2.avi } -loop 3

Il comando precedente riprodurrà i file in quest'ordine: 1, 1, 2, 1, 1, 2, 1, 1, 2.

Riprodurre un file:

    mplayer [opzioni] [percorso/]nomefile

Un altro modo di riprodurre un file:

    mplayer [opzioni] file:///uri-escaped-path

Riprodurre più file:

    mplayer [opzioni di default] [percorso/]nomefile1 [opzioni per nomefile1] nomefile2 [opzioni per nomefile2] ...

Riprodurre VCD:

    mplayer [opzioni] vcd://numerotraccia [-cdrom-device /dev/cdrom]

Riprodurre DVD:

    mplayer [opzioni] dvd://numerotitolo [-dvd-device /dev/dvd]

Riprodurre da WWW:

    mplayer [opzioni] http://sito.com/file.asf

(possono venir usate anche le playlist)

Riprodurre da RTSP:

    mplayer [opzioni] rtsp://server.di.esempio.com/nomeFlusso

Esempi:

    mplayer -vo x11 /mnt/Films/Contact/contact2.mpg
    mplayer vcd://2 -cdrom-device /dev/hdc
    mplayer -afm 3 /mnt/DVDtrailers/alien4.vob
    mplayer dvd://1 -dvd-device /dev/hdc
    mplayer -abs 65536 -delay -0.4 -nobps ~/movies/test.avi

## 3.2. Sottotitoli e OSD

MPlayer può visualizzare sottotitoli insieme con i file video. Attualmente sono supportati i seguenti formati:

- VOBsub

- OGM

- CC (closed caption)

- MicroDVD

- SubRip

- SubViewer

- Sami

- VPlayer

- RT

- SSA

- PJS (Phoenix Japanimation Society)

- MPsub

- AQTitle

- JACOsub

MPlayer può fare il dump dei suddetti formati di sottotitoli (tranne i primi tre) nei formati di destinazione seguenti, con le rispettive opzioni:

- MPsub: `-dumpmpsub`

- SubRip: `-dumpsrtsub`

- MicroDVD: `-dumpmicrodvdsub`

- JACOsub: `-dumpjacosub`

- Sami: `-dumpsami`

MEncoder può fare il dump dei sottotitoli DVD nel formato VOBsub.

Le opzioni da riga comando sono leggermente differenti per i diversi formati:

Sottotitoli VOBsub. I sottotitoli VOBsub consistono in un grande (qualche megabyte) file `.SUB`, e un file `.IDX` e/o `.IFO` facoltativi. Se hai dei file tipo ``esempio.sub``, ``esempio.ifo`` (facoltativo), ``esempio.idx`` - devi passare a MPlayer le opzioni `-vobsub esempio [-vobsubid `id`]` (il percorso completo è facoltativo). L'opzione `-vobsubid` è come `-sid` per i DVD, con essa puoi scegliere tra le tracce (lingue) dei sottotitoli. Nel caso in cui `-vobsubid` sia omessa, MPlayer cercherà di utilizzare la lingua fornita dall'opzione `-slang` e ricadrà sul `langidx` nel file `.IDX` per impostare la lingua dei sottotitoli. Se fallisce, non ci saranno sottotitoli.

Altri sottotitoli. Gli altri formati consistono in un file di testo singolo contenente tempo, posizionamento e informazioni di testo. Utilizzo: se hai un file tipo ``esempio.txt``, devi passare l'opzione `-sub `esempio.txt`` (il percorso completo è facoltativo).

Regolazione tempi e posizionamento dei sottotitoli:

`-subdelay `sec``

  Differisce i sottotitoli di ``sec`` secondi. Può essere un valore negativo. Il valore viene aggiunto al contatore della posizione nel filmato.

`-subfps `FREQUENZA``

  Specifica la frequenza fotogrammi/secondo del file sottotitoli (valore decimale).

`-subpos `0-100``

  Specifica la posizione dei sottotitoli.

Se subisci un ritardo crescente tra il filmato e i sottotitoli quando usi un file sottotitoli MicroDVD, molto facilmente la frequenza del filmato e del file dei sottotitoli sono diverse. Per favore nota che il formato sottotitoli MicroDVD usa numeri assoluti di fotogrammi per la sua temporizzazione, ma non vi è alcuna informazione sugli fps, per cui con tale formato bisognerebbe usare l'opzione `-subfps`. Se vuoi risolvere questo problema permanentemente, devi convertire manualmente la frequenza fotogrammi del file dei sottotitoli. MPlayer può fare questa conversione per te:

    mplayer -dumpmicrodvdsub -fps fps_sottotitoli -subfps fps_avi \
        -sub nomefile_sottotitoli dummy.avi

Riguardo i sottotitoli DVD, leggi la sezione DVD.

## 3.3. Controlli

MPlayer ha un livello di controllo completamente configurabile, guidato da comandi, che ti lascia controllare MPlayer con la tastiera, il mouse, un joystick o un telecomando (usando LIRC). Vedi la pagina man per la lista completa dei controlli da tastiera.

### 3.3.1. Configurazione controlli

MPlayer ti permette di collegare un qualsiasi tasto/bottone ad un qualsiasi comando di MPlayer usando un semplice file di configurazione. La sintassi consiste di un valore chiave seguito da un comando. Il percorso del file di configurazione di default è `$HOME/.mplayer/input.conf`, ma può essere reimpostato usando l'opzione `-input `conf`` (i percorsi sono relativi a `$HOME/.mplayer`).

Puoi ottenere una lista completa dei valori chiave supportati eseguendo mplayer -input keylist e una lista completa dei comandi disponibili eseguendo mplayer -input cmdlist.

Esempio 3.1. Un semplice file di controllo dell'input

    ##
    ## MPlayer input control file
    ##

    RIGHT seek +10
    LEFT seek -10
    - audio_delay 0.100
    + audio_delay -0.100
    q quit
    > pt_step 1
    < pt_step -1
    ENTER pt_step 1 1

### 3.3.2. Controllo da LIRC

Linux Infrared Remote Control - usa un ricevitore IR facile da costruire in casa, un (quasi) qualsiasi telecomando e con esso puoi controllare la tua macchina Linux! Più informazioni su di esso sulla homepage di LIRC.

Se hai il pacchetto LIRC installato, `configure` lo rileverà. Se tutto è andato bene, MPlayer scriverà "`Configurazione del supporto per LIRC...`" (o "`Setting up LIRC support...`") all'avvio. Se ci sarà un errore, te lo dirà. Se non c'è messaggio alcuno circa LIRC, non vi è il supporto compilato. Tutto qua :-)

Il nome dell'applicazione per MPlayer è - sorpresa - `mplayer`. Puoi usare qualsiasi comando di MPlayer e anche passare più di un comando separandoli con `\n`. Non dimenticarti di abilitare l'opzione repeat in `.lircrc` quando ciò abbia senso (ricerca, volume, etc). Qui c'è un estratto di un `.lircrc` di esempio:

    begin
         button = VOLUME_PLUS
         prog = mplayer
         config = volume 1
         repeat = 1
    end

    begin
        button = VOLUME_MINUS
        prog = mplayer
        config = volume -1
        repeat = 1
    end

    begin
        button = CD_PLAY
        prog = mplayer
        config = pause
    end

    begin
        button = CD_STOP
        prog = mplayer
        config = seek 0 1\npause
    end

Se non ti piace il percorso standard del file di configurazione di lirc (`~/.lircrc`) usa l'opzione `-lircconf `nomefile`` per indicare un altro file.

### 3.3.3. Modalità slave

La modalità slave ti permette di costruire semplici frontend per MPlayer. Se eseguito con l'opzione `-slave` MPlayer leggerà comandi separati da un acapo (\n) dalllo standard input (stdin). I comandi sono documentati nel file slave.txt.

## 3.4. Riproduzione (streaming) da rete o da pipe

MPlayer può riprodurre file dalla rete, usando i protocolli HTTP, FTP, MMS o RTSP/RTP.

La riproduzione funziona semplicemente passando l'URL sulla riga comando. MPlayer onora la variabile d'ambiente `http_proxy`, usando un proxy quando disponibile. Si può anche forzare l'uso di un proxy:

    mplayer http_proxy://proxy.micorsops.com:3128/http://micorsops.com:80/stream.asf

MPlayer può leggere dallo standard input (non named pipes). Ciò può essere usato per riprodurre via FTP:

    wget ftp://micorsops.com/qualcosa.avi -O - | mplayer -

### Nota

Si raccomanda inoltre di abilitare `-cache` riproducendo da rete:

    wget ftp://micorsops.com/qualcosa.avi -O - | mplayer -cache 8192 -

### 3.4.1. Salvare il contenuto in streaming

Una volte che riesci nel far riprodurre a MPlayer il tuo flusso internet preferito, puoi usare l'opzione `-dumpstream` per salvare il flusso in un file. Per esempio:

    mplayer http://217.71.208.37:8006 -dumpstream -dumpfile stream.asf

salverà il contenuto riprodotto da `http://217.71.208.37:8006` dentro a `stream.asf`. Ciò funziona con tutti i protocolli supportati da MPlayer, come MMS, RSTP, e così via.

## 3.5. Lettori CD/DVD

I lettori CD-ROM recenti possono raggiungere velocità molto alte, ma molti lettori sono capaci di girare a velocità ridotte. Ci sono diversi motivi che possono farti pensare di cambiare la velocità di un'unità CD-ROM:

- Ci sono state notifiche di errori di lettura ad alte velocità, specialmente con CD-ROM malamente pressati. Ridurre la velocità può prevenire la perdita di dati in queste circostanze.

- Molti lettori CD-ROM sono fastidiosamente rumorosi, una minor velocità può ridurre il rumore.

### 3.5.1. Linux

Puoi diminuire la velocità delle unità CD-ROM IDE con hdparm, setcd o cdctl. Funziona così:

    hdparm -E [velocità] [dispositivo cdrom]

    setcd -x [velocità] [dispositivo cdrom]

    cdctl -bS [velocità]

Se stai usando l'emulazione SCSI, puoi dover applicare le impostazioni al lettore IDE reale, e non al dispositivo emulato come SCSI.

Se hai i privilegi di root può essere di aiuto anche il comando seguente:

    echo file_readahead:2000000 > /proc/ide/[dispositivo cdrom]/settings

    hdparm -d1 -a8 -u1 [dispositivo cdrom]

Ciò imposta la lettura in prefetch dei file a 2MB, che aiuta con CD-ROM graffiati. Se la imposti troppo alta, il lettore continuerà ad aumentare e diminuire la velocità, e le prestazioni diminuiranno drasticamente. Si raccomanda di regolare il tuo lettore CD-ROM anche con hdparm:

    hdparm -d1 -a8 -u1 [dispositivo cdrom]

Questo abilita l'accesso in DMA, la pre-lettura, e la mascheratura IRQ (leggi la pagina man di hdparm per una spiegazione dettagliata).

Per favore fai riferimento a "`/proc/ide/`[dispositivo cdrom]`/settings`" per regolare con precisione il tuo CD-ROM.

I lettori SCSI non hanno un modo uniforme di impostare questi parametri (ne conosci uno? diccelo!). C'è uno strumento che funziona con i lettori SCSI Plextor.

### 3.5.2. FreeBSD

velocità:

    cdcontrol [-f dispositivo] speed [velocità]

DMA:

    sysctl hw.ata.atapi_dma=1

## 3.6. Riproduzione DVD

Per una lista completa delle opzioni disponibili per favore leggi la pagina man. La sintassi per riprodurre un DVD normale è la seguente:

    mplayer dvd://<traccia> [-dvd-device <dispositivo>]

Esempio:

    mplayer dvd://1 -dvd-device /dev/hdc

Se hai compilato MPlayer con il supporto per dvdnav, la sintassi è la stessa, tranne che devi usare dvdnav:// invece di dvd://.

Il dispositivo DVD di default è `/dev/dvd`. Se la tua impostazione è diversa, crea un collegamento simbolico o indica il dispositivo giusto dalla riga comando con l'opzione `-dvd-device`.

MPlayer usa `libdvdread` e `libdvdcss` per la riproduzione e la decrittazione dei DVD. Queste due librerie sono contenute nei sorgenti di MPlayer, non hai bisogno di installarle separatamente. Puoi anche usare le controparti di sistema delle due librerie, ma questa non è la soluzione raccomandata, in quanto può portare a bachi, incompatibilità di librerie e minor velocità.

### Nota

Nel caso di problemi di decodifica di DVD, prova a disabilitare il supermount, o qualsiasi altra utilità. Alcuni lettori RPC-2 possono anche aver bisogno di avere il codice di zona impostato.

Decrittazione DVD. La decrittazione dei DVD viene fatta da `libdvdcss`. La modalità può esser specificata attraverso la variabile d'ambiente `DVDCSS_METHOD`, vedi la pagina di manuale per i dettagli.

### 3.6.1. Codici regionali

I lettori DVD al giorno d'oggi sono venduti con una costrizione senza senso chiamata codice regionale (in inglese). Questa è una strategia per forzare i lettori DVD ad accettare solamente DVD prodotti per una delle sei diverse regioni in cui è stato diviso il mondo. Come un gruppo di persone possano sedersi attorno ad un tavolo, partorire un'idea del genere ed aspettarsi che il mondo del 21° secolo si pieghi ai loro voleri, è aldilà di ogni comprensione.

I lettori che forzano l'impostazione regionale solo via software sono anche conosciuti come lettori RPC-1, quelli che lo gestiscono via hardware come RPC-2. I lettori RPC-2 permettono la modifica della regione per cinque volte, prima che resti bloccata. Sotto Linux puoi usare lo strumento regionset per per impostare il codice regionale del tuo lettore DVD.

Grazie al cielo, è possibile convertire lettori RPC-2 in lettori RPC-1 attraverso un aggiornamento del firmware. Inserisci il modello del tuo lettore DVD nel tuo motore di ricerca preferito oppure dai un'occhiata ai forum e alle sezioni di download di "The firmware page". Anche se si devono applicare le solite precauzioni per l'aggiornamento del firmware, le esperienze relative alla rimozione della forzatura del codice regionale sono generalmente positive.

## 3.7. Riproduzione VCD

Per una lista completa delle opzioni disponibili per favore leggi la pagina man. La sintassi per riprodurre un Video CD (VCD) normale è la seguente:

    mplayer vcd://<traccia> [-cdrom-device <dispositivo>]

Esempio:

    mplayer vcd://2 -cdrom-device /dev/hdc

Il dispositivo VCD di default è `/dev/cdrom`. Se la tua impostazione è diversa, crea un collegamento simbolico o indica il dispositivo giusto dalla riga comando con l'opzione `-cdrom-device`.

### Nota

Perlomeno i lettori CD-ROM Plextor e alcuni Toshiba SCSI hanno prestazioni orribili leggendo i VCD. Questo perché l'`ioctl` CDROMREADRAW non è implementata appieno per questi lettori. Se hai una qualche conoscenza della programmazione SCSI, per favore aiutaci ad implementare un supporto SCSI generico per i VCD.

Nel frattempo puoi estrarre i dati dal VCD con readvcd e riprodurre con MPlayer il file così ricavato.

Struttura VCD. Un Video CD (VCD) è fatto di settori CD-ROM XA, per es. tracce CD-ROM mode 2 form 1 e 2:

- La prima traccia è in formato mode 2 form 2 il che significa che usa una correzione errori L2. La traccia contiene un filesystem ISO-9660 con 2048 byte/settore. Il filesystem contiene delle informazioni metadati VCD, così come fermi-immagine spesso usati nei menu. I segmenti MPEG per i menu possono anche essere salvati nella prima traccia, ma gli MPEG devono essere spezzettati in una serie di blocchi di 150 settori. Il filesystem ISO-9660 può contenere altri file o programmi che non sono essenziali per le operazioni VCD.

- Le seconde e restanti tracce spesso sono tracce MPEG (filmato) di basso livello di 2324 byte/settore, contenenti un pacchetto dati MPEG PS per settore. Queste sono in formato mode 2 form 1, così da poter archiviare più dati per settore con la perdita di qualche correzione di errore. E' anche valido avere tracce CD-DA in un VCD dopo la prima traccia. In alcuni sistemi operativi c'è qualche trucchetto che fa apparire queste tracce non ISO-9660 in un filesystem. In altri sistemi operativi come GNU/Linux non è (ancora) così. Qui i dati MPEG non possono venir montati. Siccome molti film sono dentro questo tipo di tracce, dovresti provare prima `vcd://2`.

- Ci sono dischi VCD senza la prima traccia (traccia singola e proprio nessun filesystem). Essi sono comunque riproducibili, ma non possono essere montati.

- La definizione dello standard VCD viene chiamato il "White Book" Philips, e non è disponibile on-line visto che deve essere acquistato da Philips. Informazioni più dettagliate sui Video CD si possono trovare nella documentazione di vcdimager.

Riguardo i file .DAT. Il file .DAT da ~600MB visibile sulla prima traccia del filsystem VCD montato non è un vero file! Viene anche detto "ISO gateway", creato per permettere a Windows di gestire tali tracce (Windows non permette alle applicazioni alcun accesso di basso livello ai dispositivi). Sotto Linux non puoi copiare o riprodurre questi file (contengono spazzatura). Sotto Windows è possibile che il driver iso9660 emuli la lettura a basso livello delle tracce nel file. Per riprodurre un file .DAT ti serve il driver per il kernel che si può trovare nella versione per Linux di PowerDVD. Esso ha un driver modificato per il filesystem iso9660 (`vcdfs/isofs-2.4.X.o`), che è in grado di emulare le tracce di basso livello attraverso quel file fantasma .DAT. Se monti il disco usando il loro driver, puoi poi copiare e anche riprodurre i file .DAT con MPlayer. Ma non funzionerà col driver iso9660 standard del kernel Linux! Usa invece `vcd://`. Alternative per copiare i VCD sono il nuovo driver del kernel cdfs (non incluso nel kernel ufficiale), che mostra le sessioni dei CD come file immagine, e cdrdao, un'applicazione per copiare/fare il dump di CD bit-per-bit.

## 3.8. Edit Decision Lists (EDL) (liste di decisione di modifica)

Il sistema della lista di decisione di modifica (EDL) ti permette di saltare o di silenziare automaticamente alcune parti dei video durante la riproduzione, basandosi su un file di configurazione EDL specifico per il filmato.

Questo torna utile per colore che vogliono guardare un film in modalità "amichevole per la famiglia". Puoi eliminare violenze, profanità, Jar-Jar Binks... da un filmato, secondo i tuoi gusti personali. Oltre a ciò, ci sono altri utilizzi, come saltare automaticamente le pubblicità nei file video che guardi.

Il formato del file EDL è piuttosto scarno. C'è un comando per ogni riga che indica cosa fare (saltare/silenziare) e quando farlo (usando la posizione in secondi).

### 3.8.1. Usare un file EDL

Includi l'opzione `-edl <nomefile>` quando esegui MPlayer, con il nome del file EDL che vuoi sia applicato al video.

### 3.8.2. Creare un file EDL

Il formato corrente dei file EDL è:

    [secondi inizio] [secondi fine] [azione]

Dove i secondi sono numeri decimali e l'azione è `0` per saltare o `1` per silenziare. Esempio:

    5.3   7.1    0
    15    16.7   1
    420   422    0

Questo farà saltare il video dal secondo 5.3 al secondo 7.1, poi lo silenzierà a 15 secondi, toglierà il muto a 16.7 e salterà dal secondo 420 al 422. Queste azioni saranno eseguite quando il tempo della riproduzione raggiunge i tempi indicati nel file.

Per creare un file EDL da cui partire, usa l'opzione `-edlout <nomefile>`. Durante la riproduzione, premi semplicemente i per segnare l'inizio e la fine di un blocco di salto. Una voce corrispondente sarà scritta nel file per quella posizione. Puoi poi tornare indietro e rifinire il file EDL generato così come cambiare l'operazione di default, che è saltare il blocco indicato da ogni riga.

## 3.9. Audio avanzato

### 3.9.1. Riproduzione Surround/Multicanale

#### 3.9.1.1. DVD

La maggior parte dei DVD e molti altri file includono audio in surround. MPlayer supporta la riproduzione in surround, ma non la abilita di default poiché gli equipaggiamenti audio stereo sono molto più diffusi. Per riprodurre un file che ha più di due canali audio usa `-channels`. Per esempio, per riprodurre un DVD con audio 5.1:

    mplayer dvd://1 -channels 6

Nota che a dispetto del nome "5.1" ci sono attualmente 6 canali discreti. Se possiedi un equipaggiamento audio surround puoi mettere tranquillamente l'opzione `channels` nel tuo file di configurazione di MPlayer `~/.mplayer/config`. Per esempio, per avere una riproduzione quadrifonica di default, aggiungi la riga seguente:

    channels=4

MPlayer riprodurrà l'audio in quattro canali quando tutti e quattro sono disponibili.

#### 3.9.1.2. Riprodurre file stereo su quattro altoparlanti

MPlayer non duplica alcun canale di default, né lo fanno molti driver audio. Se vuoi farlo manualmente:

    mplayer filename -af channels=2:2:0:1:0:0

Vedi la sezione sul copiare i canali per una spiegazione.

#### 3.9.1.3. AC-3/DTS Passthrough

I DVD solitamente hanno un audio surround codificato in formato AC-3 (Dolby Digital) o DTS (Digital Theater System). Alcuni equipaggiamenti audio moderni sono capaci di decodificare internamente questi formati. MPlayer può esser configurato in modo da far passare i dati audio senza decodificarli. Ciò funzionerà solo se hai un connettore S/PDIF (Sony/Philips Digital Interface) sulla tua scheda audio.

Se il tuo equipaggiamento audio può decodificare sua AC-3 che DTS, puoi tranquillamente abilitare il passthrough per ambi i formati. In caso contrario, abilita il passthrough solo per il formato che il tuo equipaggiamento supporta.

Per abilitare il passthrough dalla riga comando:

- Per solo AC-3, usa `-ac hwac3`

- Per solo DTS, usa `-ac hwdts`

- Per AC-3 e DTS, usa `-afm hwac3`

Per abilitare il passthrough nel file di configurazione di MPlayer:

- Per solo AC-3, usa `ac=hwac3,`

- Per solo DTS, usa `ac=hwdts,`

- Per AC-3 e DTS, usa `afm=hwac3`

Nota che c'è una virgola (",") alla fine di `ac=hwac3,` e `ac=hwdts,`. Ciò farà sì che MPlayer ricada sui codec che utilizza di solito quando riproduce un file che non ha audio AC-3 o DTS. Per `afm=hwac3` non serve una virgola; MPlayer gestirà comunque la situazione quando viene specificata una famiglia audio.

#### 3.9.1.4. MPEG audio Passthrough

Le trasimissioni TV digitali (come DVB e ATSC) e alcuni DVD spesso hanno flussi audio MPEG (per esser precisi MP2). Alcuni decodificatori hardware come schede full DVB e adattatori DXR2 possono decodificare nativamente questo formato. MPlayer può esser configurato in modo da far passare i dati audio senza decodificarli.

Per usare questo codec:

     mplayer -ac hwmpa

#### 3.9.1.5. Matrix-encoded audio

***DA FARE***

Questa sezione deve ancora essere scritta e non può esser completata finché qualcuno non ci fornisca audio di esempio da testare. Se hai un qualche file con audio matrix-encoded, sai dove trovarne uno, oppure hai una qualche informazione che possa aiutare, per favore invia un messaggio alla mailing list MPlayer-DOCS. Scrivi "[matrix-encoded audio]" nell'oggetto.

Se nessun file o nessuna informazione arriverà, questa sezione sarà rimossa.

Ottimi link:

- http://electronics.howstuffworks.com/surround-sound5.htm

- http://www.extremetech.com/article2/0,1697,1016875,00.asp

#### 3.9.1.6. Emulazione del surround nelle cuffie

MPlayer include un filtro HRTF (Head Related Transfer Function) basato su un progetto MIT in cui le misurazioni sono prese da microfoni montati su una finta testa umana.

Anche se non è possibile imitare esattamente un sistema surround, il filtro HRTF di MPlayer fornisce un audio con maggior immersione nello spazio attraverso cuffie a due canali. Il solito missaggio semplicemente combina tutti i canali in due; invece combinando i canali, `hrtf` genera leggere eco, aumenta leggermente le separazioni stereo, e altera il volume di alcune frequenze. Se HRTF suoni meglio può dipendere dalla sorgente audio e da una questione di gusto personale, ma è sicuramente il caso di provarlo.

Per riprodurre un DVD con HRTF:

    mplayer dvd://1 -channels 6 -af hrtf

`hrtf` lavora bene solo con 5 o 6 canali. Inoltre, `hrtf` richiede un audio a 48kHz. L'audio dei DVD è già a 48kHz, ma se hai un file con una differente frequenza di campionamento rispetto a quella che vuoi riprodurre con `hrtf` devi ricampionarla:

    mplayer nomefile -channels 6 -af resample=48000,hrtf

#### 3.9.1.7. Risoluzione problemi

Se non senti nessuno suono uscire dai tuoi canali surround, controlla le impostazioni del tuo mixer con un programma apposito come alsamixer; le uscite audio sono spesso silenziate (mute) e il volume impostato a zero di default.

### 3.9.2. Manipolazione dei canali

#### 3.9.2.1. Informazioni generali

Sfortunatamente, non c'è uno standard per come i canali siano ordinati. Gli ordinamenti sotto elencati sono quelli dell'AC-3 e sono abbastanza tipici; provali e vedi se la tua sorgente corrisponde. I canali sono numerati a partire dallo 0.

mono

1. centrale

stereo

1. sinistro

2. destro

quadrifonico

1. sinistro frontale

2. destro frontale

3. sinistro posteriore

4. destro posteriore

surround 4.0

1. sinistro frontale

2. destro frontale

3. centrale posteriore

4. centrale frontale

surround 5.0

1. sinistro frontale

2. destro frontale

3. sinistro posteriore

4. destrale posteriore

5. centrale frontale

surround 5.1

1. sinistro frontale

2. destro frontale

3. sinistro posteriore

4. destro posteriore

5. centrale frontale

6. subwoofer

L'opzione `-channels` viene usata per richiedere il numero di canali al decodificatore audio, Alcuni codec audio usano il numero di canali specificato per decidere se sottomiscelare la sorgente, se necessario. Nota che ciò non sempre influenza il numero dei canali di uscita. Per esempio, usando `-channels 4` per riprodurre un file stereo MP3 porterà comunque ad un'uscita a 2 canali, visto che il codec MP3 non genera i canali extra.

Il filtro audio `channels` può essere usato per creare o rimuovere canali ed è utile per controllare il numero di canali passati alla scheda audio. Vedi le sezioni seguenti per ulteriori informazioni sulla manipolazione dei canali.

#### 3.9.2.2. Riprodurre mono con due altoparlanti

Il mono suona molto meglio quando riprodotto attraverso due altoparlanti - specialmente usando delle cuffie. I file audio che hanno veramente un canale sono riprodotti automaticamente attraverso due altoparlanti; sfortunatamente, molti file con suono in mono sono in verità codificati come stereo con un canale slienziato. Il modo più semplice e a prova di cretino per far sì che entrambi gli altoparlanti emettano lo stesso audio è il filtro `extrastereo`:

    mplayer nomefile -af extrastereo=0

Ciò equilibra ambedue i canali, portando al risultato di entrambi i canali alla metà del volume di quello originario. La sezione seguente ha esempi di altri modi di far ciò senza una riduzione del volume, ma sono molto complessi e richiedono varie opzioni a seconda del canale che vuoi mantenere. Se davvero devi mantenere il volume, potrebbe essere più semplice sperimentare con il filtro `volume` e trovare il valore giusto. Per esempio:

    mplayer nomefile -af extrastereo=0,volume=5

#### 3.9.2.3. Copiare/spostare i canali

Il filtro `channels` può spostare alcuni o tutti i canali. Impostare tutte le sotto-opzioni per il filtro `channels` può essere complicato e richiede un pò di attenzione.

1. Decidi quanti canali di uscita ti servono. Questa è la prima sotto-opzione.

2. Conta quanti spostamenti di canali farai. Questa è la seconda sotto-opzione. Ciascun canale può venir spostato a vari canali diversi allo stesso tempo, ma tieni a mente che quando un canale viene spostato (anche verso una destinazione sola) il canale sorgente resterà vuoto finché un altro canale non verrà spostato su di esso. Per copiare un canale, mantenendo la sorgente intatta, sposta semplicemente il canale sia verso la destinazione che verso la sorgente. Per esempio:

       channel 2 --> channel 3
       channel 2 --> channel 2

3. Scrivi le copiature di canali come paia di sotto-opzioni. Nota che il primo canale è 0, il secondo è 1, etc. L'ordine di queste sotto-opzioni non è importante a patto che esse siano correttamente raggruppate in coppie `sorgente:destinazione`.

##### Esempio: un canale in due altoparlanti

Qui c'è un esempio di un altro modo di riprodurre un canali in entrambi gli altoparlanti. Per questo esempio supponi che il canale sinistro debba essere riprodotto e il canale destro scartato. Seguendo i passaggi suddetti:

1. In modo da fornire un canale di uscita per ognuno dei due altoparlanti, la prima sotto-opzione deve essere "2".

2. Il canale sinistro deve essere spostato al canale destro, e anche spostato su sé stesso cosicché non sia vuoto. Questo è un totale di due spostamenti, facendo sì che anche la seconda sotto-opzione sia "2".

3. Per spostare il canale sinistro (canale 0) nel canale destro (canale 1), la coppia di sotto-opzioni è "0:1", e "0:0" sposta il canale sinistro su sé stesso.

Mettendo tutto insieme si ottiene:

    mplayer nomefile -af channels=2:2:0:1:0:0

Il vantaggio che ha questo esempio rispetto a `extrastereo` è che il volume di ciascun canale di uscita è lo stesso del canale di entrata. Lo svantaggio è che le sotto-opzioni diventano "2:2:1:0:1:1" quando il canale voluto è quello destro. Inoltre, è più difficile da ricordare e da scrivere.

##### Esempio: canale sinistro in due altoparlanti - scorciatoia

Veramente c'è un modo molto più facile di usare il filtro `channels` per riprodurre il canale sinistro in entrambi gli altoparlanti:

    mplayer nomefile -af channels=1

Il secondo canale viene scartato, e, senza ulteriori sotto-opzioni, l'unico canale rimanente resta il solo. I driver della scheda audio automaticamente riproducono un singolo canale in ambedue gli altoparlanti. Ciò funziona sono quando il canale voluto è sulla sinistra.

##### Esempio: duplicare i canali frontali sui posteriori

Un'altra operazione comune è duplicare il canali frontali e riprodurli anche sugli altoparlanti posteriori in un'impostazione quadrifonica.

1. Ci devono essere quattro canali di uscita. La prima sotto-opzione è "4".

2. Ciascuno dei due canali frontali deve essere spostato sul corrispondente posteriore e anche su sé stesso. Quindi sono quattro spostamenti, indi la seconda sotto-opzione è "4".

3. Il canale frontale sinistro (canale 0) deve essere spostato sul posteriore sinistro (canale 2): "0:2". Il sinistro frontale deve anche venir spostato su sé stesso: "0:0". Il canale frontale destro (canale 1) viene spostato sul posteriore destro (canale 3): "1:3", e anche su sé stesso: "1:1".

Combina tutte le sotto-opzioni per ottenere:

    mplayer nomefile -af channels=4:4:0:2:0:0:1:3:1:1

#### 3.9.2.4. Miscelare i canali

Il filtro `pan` può miscelare i canali in proporzione specificate dall'utente. Questo permette di fare tutto quello che può fare il filtro `channels` e oltre. Sfortunatamente, le sotto-opzioni sono molto più complicate.

1. Decidi con quanti canali lavorare. Puoi aver bisogno di indicare ciò con l'opzione `-channels` e/o `-af channels`. Gli esempi seguenti di mostreranno quando usare cosa.

2. Decidi quanti canali passare a `pan` (i canali decodificati oltre questi vengono scartati). Questa è la prima sotto-opzione, e controlla anche quanti canali utilizzare in uscita.

3. Le restanti sotto-opzioni indicano quanto di ogni canale viene miscelato in ciascuno degli altri canali. Questa è la parte difficile. Per diminuire l'impresa, spezza le sotto-opzioni in diversi gruppi, un gruppo per ogni canale di uscita. Ogni sotto-opzione in un gruppo corrisponde ad un canale di ingresso. Il numero che specifichi sarà la percentuale del canale di ingresso che viene miscelata nel canale di uscita.

   `pan` accetta valori da 0 a 512, significando dallo 0% al 51200% del volume originale. Fai attenzione quando usi valori superiori a 1. Ciò non solo ti darà un volume più alto, ma se oltrepassi la scala di campionamento della tua scheda audio puoi sentire terribili pop e click. Se vuoi puoi far seguire `pan` da `,volume` per abilitare il clipping, ma è meglio tenere i valori di `pan` bassi abbastanza affinché il clipping non sia necessario.

##### Esempio: un canale in due altoparlanti

Qui c'è un altro esempio per riprodurre il canale sinistro in due altoparlanti. Segui i passaggi suddetti:

1. `pan` deve uscire con due canali, indi la prima sotto-opzione è "2".

2. Visto che abbiamo due canali di ingresso, ci saranno due gruppi di sotto-opzioni. Visto che ci sono anche due canali di uscita, ci saranno due sotto-opzioni per gruppo. Il canale sinistro dal file dovrà finire con volume pieno sui nuovi canali sinistro e destro. Così il primo gruppo di sotto-opzioni è "1:1". Il canale destro dovrebbe venir scartato, così il secondo sarà "0:0". Un qualsiasi valore di 0 alla fine può essere omesso, ma per facilità di comprensione li lasceremo lì.

Mettendo insieme queste opzioni si ottiene:

    mplayer nomefile -af pan=2:1:1:0:0

Se si vuole il canale destro invece del sinistro, le sotto-opzioni di `pan` saranno "2:0:0:1:1".

##### Esempio: canale sinistro in due altoparlanti - scorciatoia

Come con `channels`, c'è una scorciatoia che funziona solo col canale sinistro:

    mplayer nomefile -af pan=1:1

Visto che `pan` ha solo un canale di ingresso (l'altro canale viene scartato), c'è un solo gruppo con una sola sotto-opzione, che specifica che quel solo canale ottenga il 100% di sé stesso.

##### Esempio: sottomiscelare PCM a 6 canali

Il decodificatore di MPlayer per PCM a 6 canali non è in grado di sottomiscelare. C'è un modo di sottomiscelare PCM usando `pan`:

1. Il numero di canali di uscita è 2, indi la prima sotto-opzione è "2".

2. Con sei canali di ingresso ci saranno sei gruppi di opzioni. Fortunatamente, visto che ci interessa solo l'uscita dei primi due canali, abbiamo solo bisogno di preparere due gruppi; i rimanenti quattro gruppi possono essere omessi. Attenzione che non tutti i file audio multicanale hanno lo stesso ordine dei canali! Questo esempio mostra il sottomissaggio di un file con gli stessi canali di AC-3 5.1:

       0 - frontale sinistro
       1 - frontale destro
       2 - posteriore sinistro
       3 - posteriore destro
       4 - frontale centrale
       5 - subwoofer

   Il primo gruppo di sotto-opzioni elenca le percentuali del volume originario, che, rispettivamente, ogni canale di uscita deve ricevere dal canale frontale sinistro: "1:0". Il canale frontale destro dovrà finire nell'uscita di destra: "0:1". Lo stesso vale per i canali posteriori: "1:0" e "0:1". Il canale centrale va su entrambi i canali con metà del volume: "0.5:0.5", e il subwoofer va in entrambi a volume pieno: "1:1".

Metti tutto insieme, per avere:

    mplayer 6-canali.wav -af pan=2:1:0:0:1:1:0:0:1:0.5:0.5:1:1

Le percentuali suddette sono solo un rozzo esempio. Sentiti libero di modificarle.

##### Esempio: riprodurre audio 5.1 su grossi altoparlanti senza un subwoofer

Se hai un paio di grossi altoparlanti puoi non voler sprecare dei soldi per compare un subwoofer per un sistema audio 5.1 completo. Se usi `-channels 5` per richiedere che liba52 decodifichi audio 5.1 in 5.0, il canale del subwoofer viene semplicemente scartato. Se vuoi distribuire il canale del subwoofer per conto tuo devi sottomiscelarlo a mano con `pan`:

1. Since `pan` needs to examine all six channels, specify `-channels 6` so liba52 decodes them all. Siccome pan ha bisogno di esaminare tutti e sei i canali, specifica -channels 6 così che liba52 li decodifichi tutti quanti.

2. `pan` outputs to only five channels, the first suboption is 5. pan emette solo cinque canali, così la prima sotto-opzione è 5.

3. Sei canali di ingresso e cinque di uscita significano sei gruppi di cinque sotto-opzioni.

   - Il canale sinistro frontale semplicemente si riproduce su sé stesso: "1:0:0:0:0"

   - Lo stesso per il canale frontale destro: "0:1:0:0:0"

   - Lo stesso per il canale posteriore sinistro: "0:0:1:0:0"

   - E anche per il canale posteriore destro: "0:0:0:1:0"

   - Anche quello centrale frontale: "0:0:0:0:1"

   - E ora dobbiamo decidere cosa fare col subwoofer, per es. metà nel frontale destro e metà nel frontale sinistro: "0.5:0.5:0:0:0"

Combina tutte queste opzioni per ottenere:

    mplayer dvd://1 -channels 6 -af pan=5:1:0:0:0:0:0:1:0:0:0:0:0:1:0:0:0:0:0:1:0:0:0:0:0:1:0.5:0.5:0:0:0

### 3.9.3. Regolazione volume via software

Alcune tracce audio sono troppo silenziose per essere ascoltate bene senza amplificazione. Questo diventa un problema quando il tuo equipaggiamento non può amplificare il segnale per te. L'opzione `-softvol` indica a MPlayer di utilizzare un mixer interno. Puoi poi usare i tasti di regolazione volume (di default 9 e 0) per raggiungere livelli di volume molto più alti. Nota che ciò non bypassa il mixer della tua scheda audio; MPlayer amplifica solo il segnale prima di inviarlo alla tua scheda audio. L'esempio che segue è un buon punto di partenza:

    mplayer file-silente -softvol -softvol-max 300

L'opzione `-softvol-max` specifica il massimo volume permesso di uscita come una percentuale del volume originario. Per esempio, `-softvol-max 200` farà sì che il volume sia regolato fino a due volte il valore originale. E' sicuro indicare un valore alto con `-softvol-max`; il volume più alto non sarà usato fino a quando non userai i tasti di regolazione. L'unico svantaggio di un valore alto è che, dato che MPlayer regola il volume come una percentuale del massimo, non avrai un controllo così preciso usando i tasti di regolazione del volume. Usa un valore più basso con `-softvol-max` e/o specifica `-volstep 1` se ti serve maggior precisione.

L'opzione `-softvol` funziona controllando il filtro audio `volume`. Se vuoi riprodurre un file a un dato volume sin dall'avvio puoi specificare `volume` manualmente:

    mplayer file-silente -af volume=10

Questo riprodurrà il file con un guadagno di 10 decibel. Stai attento quando usi il filtro `volume` - puoi facilmente farti male alle orecchie se usi un valore troppo alto. Parti dal basso e sali gradualmente fino a quando capisci quanta regolazione è richiesta. Inoltre, se tu specifichi valori troppo alti, `volume` può aver bisogno di fare il clip del segnale per evitare di mandare alla tua scheda audio dati che siano fuori dalla gamma consentita; ciò risulterà in un audio distorto.

## 3.10. Ingresso TV

Questa sezione tratta di come abilitare la visione/acquisizione da sintonizzatori TV compatibili V4L. Vedi la pagina man per una descrizione delle opzioni e i controlli da tastiera per la TV.

### 3.10.1. Compilazione

1. Per prima cosa, devi ricompilare. `./configure` rileverà gli header del kernel per la roba v4l e l'esistenza delle voci `/dev/video*`. Se ciò esiste, il supporto TV verrà compilato (guarda l'emissione di `./configure`).

2. Assicurati che il tuo sintonizzatore funzioni con altri software TV per Linux, per esempio XawTV.

### 3.10.2. Consigli per l'uso

La lista completa delle opzioni è disponibile nella pagina di manuale. Qui ci sono giusto alcuni consigli:

- Usa l'opzione `channels`. Un esempio:

      -tv channels=26-MTV1,23-TV2

  Spiegazione: con questa opzione, solo i canali 26 e 23 saranno utilizzabili. Ci sarà un simpatico testo OSD quando cambi canale, mostrante il nome del canale stesso. Gli spazi nel nome di canale devono essere sostituiti con il carattere "_".

- Scegli una sana dimensione dell'immagine. Le dimensioni dell'immagine risultante dovrebbero essere divisibili per 16.

- Se catturi il video con una risoluzione verticale maggiore di metà della risoluzione completa (per es. 288 per PAL o 240 per NTSC), allora i 'fotogrammi' che otterrai saranno reali coppie interlacciate di campi. A seconda di quello che vuoi fare con il video puoi lasciarle in questa forma, deinterlacciarle distruttivamente, oppure spezzare le coppie in campi singoli.

  In caso contrario otterrai un filmato che risulta distorto durante le scene ad alto movimento e il controllore della frequenza probabilmente sarà incapace di mantenere la frequenza specificata, visto che gli artefatti dell'interlacciamento producono un alto numero di dettagli e quindi occupano molta banda. Puoi abilitare il deinterlacciamento con `-vf pp=DEINT_TYPE`. Solitamente `pp=lb` fa un buon lavoro, ma può essere oggetto di preferenze personali. Vedi anche gli altri algoritmi di deinterlacciamento nel manuale e provali.

- Taglia via le zone morte. Quando catturi video, le zone sui bordi spesso sono nere o contengono del disturbo. Questo consuma un sacco di banda non necessaria. Per essere precisi non sono le zone nere in sé, ma quel salto tra il nero e la parte chiara dell'immagine video che la sprecano, ma ciò non è importante per adesso. Prima di iniziare l'acquisizione, imposta gli argomenti dell'opzione `crop` affinché tutta la porcheria ai margini venga tagliata via. E ancora, non dimenticarti di mantenere 'sane' le dimensioni dell'immagine risultante.

- Controlla il carico della CPU. Non dovrebbe oltrepassare il 90% nella maggior parte del tempo. Se hai un grosso buffer di cattura, MEncoder può gestire un sovraccarico per pochi secondi, ma non di più. E' meglio disattivare screensaver 3D OpenGL e cose del genere.

- Non pacioccare con il clock di sistema. MEncoder usa il clock di sistema per gestire la sincronizzazione A/V. Se tu modifichi il clock di sistema (specialmente all'indietro nel tempo), MEncoder resta confuso e perderai dei fotogrammi. Questo è un fattore importante se sei collegato alla rete e usi un qualche software di sincronizzazione dell'ora come NTP. Dovresti disabilitare NTP durante il processo di acquisizione se vuoi che la cattura sia affidabile.

- Non modificare `outfmt` (il formato di uscita) a meno che tu non sappia cosa stia facendo oppure la tua scheda/il tuo driver non supportino davvero quello di default (spazio colore YV12). Nelle precedenti versioni di MPlayer/MEncoder era necessario indicare il formato di uscita. Questo problema dovrebbe esser stato risolto nelle versioni correnti e outfmt non è più richiesto, e quello di default va bene la maggior parte delle volte. Per esempio, se stai catturando in DivX con `libavcodec` e specifichi `outfmt=RGB24` per aumentare la qualità delle immagini acquisite, l'immagine stessa verraà comunque convertita di nuovo in YV12, perciò l'unica cosa che otterrai sarà spreco di CPU.

- Ci sono vari modi per la cattura dell'audio. Puoi acquisire il suono sia usando la tua scheda audio attraverso una connessione via cavo esterna tra la scheda video e il line-in, sia usando l'ADC integrato nel chip bt878. Nell'ultimo caso, devi caricare il driver btaudio. Leggi il file `linux/Documentation/sound/btaudio` (nei sorgenti del kernel, non di MPlayer) per alcune istruzioni su come usare tale driver.

- Se MEncoder non può aprire il dispositivo audio, assicurati che sia veramente disponibile. Ci sono alcuni problemi con sound server come aRts (KDE) o ESD (GNOME). Se hai una scheda audio full duplex (quasi tutte le schede decenti lo supportano, ad oggi), e stai usando KDE, prova a controllare l'opzione "full duplex" nel menu preferenze del sound server.

### 3.10.3. Esempi

Uscita fasulla, verso AAlib :)

    mplayer -tv driver=dummy:width=640:height=480 -vo aa tv://

Ingresso da V4L standard:

    mplayer -tv driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv tv://

Un esempio più complesso. Questo fa sì che MEncoder catturi l'immagine PAL completa, tagli i margini, e deinterlacci l'immagine usando un algoritmo di sfumatura lineare. L'audio viene compresso con una frequenza costante di 64kbps, usando il codec LAME. Questa impostazione è utilizzabile per acquisire film.

    mencoder -tv driver=v4l:width=768:height=576 -oac mp3lame -lameopts cbr:br=64\
        -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 \
        -vf crop=720:544:24:16,pp=lb -o uscita.avi tv://

Questo in più ridimensionerà l'immagine a 384x288 e comprimerà il video con una frequenza di 350kbps in modalità ad alta qualità. L'opzione vqmax rilascia il quantizzatore e permette al compressore video di raggiungere davvero una così bassa frequenza anche a spese della qualità. Questo puà essere usato per acquisire lunghe serie TV, dove la qualità video non è così importante.

    mencoder -tv driver=v4l:width=768:height=576 \
        -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350:vhq:vqmax=31:keyint=300 \
        -oac mp3lame -lameopts cbr:br=48 -sws 1 -o uscita.avi\
        -vf crop=720:540:24:18,pp=lb,scale=384:288 tv://

E' anche possibile specificare dimensioni immagine inferiori nell'opzione `-tv` e omettere il ridimensionamento software ma questo approccio usa la massima informazione disponibile ed è un po' più resiliente ai disturbi. I chip bt8x8 possono calcolare la media dei pixel solo sulla direzione orizzontale a causa di una limitazione hardware.

## 3.11. Televideo (teletext)

Il televideo è attualmente disponibile solo in MPlayer per i driver v4l e v4l2.

### 3.11.1. Note sull'implementazione

MPlayer gestisce il testo normale, la grafica e i collegamenti per la navigazione. Sfortunatamente, le pagine colorate non sono ancora decodificate completamente - tutte le pagine vengono mostrate in scala di grigi. Vengono gestite anche le pagine dei sottotitoli (conosciute anche come 'Closed Captions').

MPlayer inizia a memorizzare nella cache tutte le pagine di televideo sin dall'inizio della ricezione dall'ingresso TV, perciò non devi attendere fino a quando si carica la pagina voluta.

Nota: usare il televideo con `-vo xv` genera strani colori.

### 3.11.2. Usare il televideo

Per abilitare la decodifica del televideo devi specificare il dispositivo VBI da cui ottenere i dati televideo (solitamente `/dev/vbi0` per Linux). Puoi fare ciò speificando `tdevice` nel tuo file di configurazione, come mostrato qui sotto:

    tv=tdevice=/dev/vbi0

Potresti voler indicare il codice di lingua del televideo per la tua zona. Per elencare tutti i codici di zona disponibili usa

    tv=tdevice=/dev/vbi0:tlang=-1

Qui c'è un esempio per il russo:

    tv=tdevice=/dev/vbi0:tlang=33

## 3.12. Radio

### 3.12.1. Ingresso radio

Questa sezione tratta di come abilitare l'ascolto della radio da un sintonizzatore compatibile V4L. Guarda la pagina man per una descrizione delle opzioni e dei controlli di tastiera per la radio.

#### 3.12.1.1. Compilazione

1. Per prima cosa devi compilare MPlayer usando `./configure` con `--enable-radio` e (se vuoi il supporto per la cattura) `--enable-radio-capture`.

2. Assicurati che il tuo sintonizzatore funzioni con altri software radio per Linux, per esempio XawTV.

#### 3.12.1.2. Consigli per l'uso

La lista completa delle opzioni è disponibile nella pagina di manuale. Qui ci sono giusto alcuni consigli:

- Usa l'opzione `channels`. Un esempio:

      -radio channels=104.4-Sibir,103.9-Maximum

  Spiegazione: con questa opzione, solo le stazioni radio 104.4 e 103.9 saranno utilizzabili. Ci sarà un simpatico testo OSD quando cambi canale, mostrante il nome del canale stesso. Gli spazi nel nome di canale devono essere sostituiti con il carattere "_".

- Ci sono vari modi per catturare l'audio. Puoi catturare il suono sia usando la tua scheda video attraverso un cavo di connessione esterno tra la scheda video e la line-in, ovvero usare l'ADC integrato nel chip saa7134. Nell'ultimo caso, devi caricare il driver `saa7134-alsa` o `saa7134-oss`.

- MEncoder non può essere utilizzato per la cattura audio, poiché per funzionare richiede un flusso video. Per cui puoi usare o arecord dal progetto ALSA oppure usare l'opzione `-ao pcm:file=file.wav`. Nell'ultimo caso non sentirai suono alcuno (a meno che tu non stia usando un cavo line-in e abbia tolto il mute dal line-in).

#### 3.12.1.3. Esempi

Ingresso da V4L standard (usando un cavo su line-in, cattura disabilitata):

    mplayer radio://104.4

Ingresso da V4L standard (usando un cavo su line-in, cattura disabilitata, interfaccia V4Lv1):

    mplayer -radio driver=v4l radio://104.4

Riprodurre il secondo canale della lista canali:

    mplayer -radio channels=104.4=Sibir,103.9=Maximm radio://2

Ridirigere il suono dall'ADC integrato della scheda radio al bus PCI. In questo esempio il sintonizzatore viene usato come una seconda scheda audio (ALSA device hw:1,0). Per schede basate su saa7134 deve esser caricato il modulo `saa7134-alsa` o `saa7134-oss`.

    mplayer -rawaudio rate=32000 radio://2/capture \
        -radio adevice=hw=1.0:arate=32000:channels=104.4=Sibir,103.9=Maximm

### Nota

Usando i nomi dispositivi ALSA, i due punti devono esser sostituiti con il segno di uguale, le virgole con punti.

# Capitolo 4. Dispositivi di uscita video

## 4.1. Impostare gli MTRR

Si consiglia vivamente di controllare che i registri MTRR siano impostati correttamente, al fine di migliorare molto le prestazioni.

Fai un cat /proc/mtrr:

    --($:~)-- cat /proc/mtrr
    reg00: base=0xe4000000 (3648MB), size=  16MB: write-combining, count=9
    reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1

E' giusto, mostra la mia Matrox G400 con 16MB di memoria. L'ho fatto da XFree 4.x.x, che imposta i registri MTRR automaticamente.

Se non ha funzionato, devi farlo a mano. Per prima cosa, devi trovare l'indirizzo di base. Hai 3 modi per trovarlo:

1. dai messaggi di avvio di X11, per esempio:

       (--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000
       (--) SVGA: Linear framebuffer at 0xD8000000

2. da `/proc/pci` (usa il comando lspci -v):

       01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525
       Memory at d8000000 (32-bit, prefetchable)

3. dai messaggi del driver del kernel mga_vid (usa dmesg):

       mga_mem_base = d8000000

Ora troviamo la dimensione della memoria. Questo è molto facile, converti semplicemente la video RAM in esadecimale, o usa questa tabella:

1 MB | 0x100000
2 MB | 0x200000
4 MB | 0x400000
8 MB | 0x800000
16 MB | 0x1000000
32 MB | 0x2000000

Ora che sai l'indirizzo di base e la dimensione della memoria, impostiamo i registri MTRR! Per esempio, per la scheda Matrox suddetta (`base=0xd8000000`) con 32MB di ram (`size=0x2000000`) esegui semplicemente:

    echo "base=0xd8000000 size=0x2000000 type=write-combining" > /proc/mtrr

Non tutte le CPU hanno gli MTRR. Per esempio le CPU K6-2 più vecchie (intorno ai 266MHz, stepping 0) non hanno degli MTRR, ma gli stepping 12 invece sì (esegui cat /proc/cpuinfo per verificarlo).

## 4.2. Xv

In XFree86 4.0.2 o successivi, puoi utilizzare le funzioni YUV hardware della tua scheda usando l'estensione XVideo. Questo è quello che fa l'opzione `-vo xv`. Inoltre, il driver supporta l'impostazione di luminosità/contrasto/tonalità/etc (a meno che tu non usi il vecchio e lento codec DirectShow DivX, che le supporta ovunque), vedi la pagina man.

In order to make this work, be sure to check the following: Per far sì che funzioni, assicurati di controllare le seguenti:

1. Che tu usi XFree86 4.0.2 o superiore (le versioni precedenti non hanno XVideo)

2. Che la tua scheda supporti l'accelerazione hardware (le schede moderne la supportano)

3. Che X carichi l'estensione XVideo, è un qualcosa del genere:

       (II) Loading extension XVideo

   in `/var/log/XFree86.0.log`

   ### Nota

   Questo carica solo l'estensione per XFree86. In una buona installazione viene sempre caricata, e non significa che il supporto per l'XVideo della scheda sia presente!

4. Che la tua scheda abbia il supporto Xv sotto Linux. Per controllare, prova con xvinfo, è parte della distribuzione di XFree86. Dovrebbe mostrarti un lungo testo, simile al seguente:

       X-Video Extension version 2.2
       screen #0
         Adaptor #0: "Savage Streams Engine"
           number of ports: 1
           port base: 43
           operations supported: PutImage
           supported visuals:
             depth 16, visualID 0x22
             depth 16, visualID 0x23
           number of attributes: 5
       (...)
           Number of image formats: 7
             id: 0x32595559 (YUY2)
               guid: 59555932-0000-0010-8000-00aa00389b71
               bits per pixel: 16
               number of planes: 1
               type: YUV (packed)
             id: 0x32315659 (YV12)
               guid: 59563132-0000-0010-8000-00aa00389b71
               bits per pixel: 12
               number of planes: 3
               type: YUV (planar)
       (...etc...)

   Deve supportare i formati pixel YUY2 packed e YV12 planar per poter essere utilizzabile con MPlayer.

5. E infine, controlla che MPlayer sia stato compilato col supporto per 'xv'. Lancia un mplayer -vo help | grep xv . Se il supporto per 'xv' è compilato, dovrebbe uscire una linea come la seguente:

         xv      X11/Xv

### 4.2.1. Schede 3dfx

I vecchi driver 3dfx avevano notoriamente dei problemi con l'accelerazione XVideo, non erano compatibili con gli spazi colore YV12 e YUY2. Verifica di avere XFree86 4.2.0 o superiore, può gestire YV12 e YUY2, mentre le versioni precedenti, 4.1.0 incluso, vanno in crash con YV12. Se hai degli strani risultati usando `-vo xv`, prova SDL (anch'essa ha XVideo) e vedi se aiuta. Controlla la sezione su SDL per i dettagli.

OPPURE, prova il NUOVO driver `-vo tdfxfb`! Vedi la sezione tdfxfb

### 4.2.2. Schede S3

Le S3 Savage3D dovrebbero funzionare bene, ma per le Savage4, usa XFree86 4.0.3 o superiore (nel caso tu abbia problemi di immagini, prova a 16bpp). Per le S3 Virge invece: c'è il supporto per xv, ma la scheda in sé è molto lenta, per cui ti conviene venderla.

Non c'è un driver framebuffer nativo per le schede S3 Virge simile a tdfxfb. Configura il tuo framebuffer (per es. aggiungi "`vga=792 video=vesa:mtrr`" alla riga di avvio del kernel) e usa `-vo s3fb` (`-vf yuy2` e `-dr` aiutano).

### Nota

Non è ben chiaro il perché i modelli Savage non abbiano il supporto YV12 e facciano la conversione con il driver (lento). Se pensi sia colpa della scheda, cerca un driver più recente, o chiedi gentilmente di un driver abilitato MMX/3DNow! sulla mailing list MPlayer-users.

### 4.2.3. Schede nVidia

nVidia non è sempre una scelta molto buona sotto Linux... Il driver open-source di XFree86 supporta la maggior parte di queste schede, ma in alcuni casi, dovrai usare il driver proprietario a sorgenti chiusi di nVidia, disponibile sul sito nVidia. Ti servirà sempre questo driver anche se vuoi l'accelerazione 3D.

Le schede Riva128 non hanno il supporto XVideo con il driver nVidia di XFree86 :( Lamentati con nVidia.

Tuttavia, MPlayer contiene un driver VIDIX per la maggior parte delle schede nVidia. Attualmente è a livello di sviluppo beta e ha alcuni problemi. Per ulteriori informazioni, vedi la sezione VIDIX nVidia.

### 4.2.4. Schede ATI

Il driver GATOS (che dovresti usare a meno che tu non abbia una Rage128 o una Radeon) di default ha il VSYNC abilitato. Ciò significa che la velocità di decodifica (!) è sincronizzata alla frequenza di aggiornamento del monitor. Se la riproduzione ti pare lenta, prova a disabilitare in qualche modo VSYNC, o ad impostare la frequenza di aggiornamento a n*(fps del film) Hz.

Read the VIDIX section. Radeon VE - se ti serve X, per questa scheda usa XFree86 4.2.0 o superiore. Il TV out non è supportato. Ovviamente con MPlayer puoi felicemente avere un display accelerato, con o senza l'uscita TV, e non servono librerie né X. Leggi la sezione VIDIX.

### 4.2.5. Schede NeoMagic

Queste schede si possono trovare in molti portatili. Devi usare XFree86 4.3.0 o superiore, o alternativamente usare i driver con Xv di Stefan Seyfried. Scegli semplicemente quello che ti serve in base alla tua versione di XFree86.

XFree86 4.3.0 include il supporto per Xv, caomunque Bohdan Horst ha postato una piccola patch ai sorgenti di XFree86 che velocizza fino a quattro volte le operazioni sul framebuffer (quindi XVideo). La patch è stata poi incorporata in XFree86 CVS e dovrebbe esserci nei rilasci successivi al 4.3.0.

Per permettere la riproduzione di contenuti della dimensione DVD, modifica il tuo XF86Config in questo modo:

    Section "Device"
        [...]
        Driver "neomagic"
        Option "OverlayMem" "829440"
        [...]
    EndSection

### 4.2.6. Schede Trident

Se vuoi usare Xv con una scheda Trident, assunto il fatto che con 4.1.0 non funziona, intalla Xfree 4.2.0. Il 4.2.0 aggiunge il supporto per Xv a schermo intero con la scheda Cyberblade XP.

Alternativamente, MPlayer contiene un driver VIDIX per le schede Cyberblade/i1.

### 4.2.7. Schede Kyro/PowerVR

Se vuoi usare Xv con una scheda basata su Kyro (per esempio la Hercules Prophet 4000XT), dovresti scaricare i driver dal sito di PowerVR.

### 4.2.8. Schede Intel

Queste schede si possono trovare in molti portatili. Si consiglia un Xorg recente.

Per permettere la riproduzione di contenuti a dimensione DVD (o superiore) modifica il tuo file di configurazione XF86Config/xorg.conf nel modo seguente:

    Section "Device"
        [...]
        Driver "intel"
        Option "LinearAlloc" "6144"
        [...]
    EndSection

L'assenza di questa opzione di solito porta a un errore del tipo

    X11 error: BadAlloc (insufficient resources for operation)

quando si cerca di usare `-vo xv`.

## 4.3. DGA

PREAMBOLO. Questa documento cerca di spiegare in poche parole cosa sia DGA e cosa possa fare (e cosa no) il driver di uscita video DGA di MPlayer.

COS'E' DGA. DGA è il nome breve di Direct Graphics Access (accesso grafico diretto) ed è un modo per fa sì che un programma scavalchi l'X server e modifichi direttamente la memoria del framebuffer. In termini tecnici la memoria del framebuffer viene rimappata nello spazio di memoria del tuo processo. Questo è permesso dal kernel solo se hai provilegi di superutente. Puoi averli o autenticandoti come `root` o impostando il bit SUID sull'eseguibile di MPlayer (sconsigliato).

Ci sono due versioni di DGA: DGA1 usato da XFree 3.x.x e DGA2 che è stato introdotto con XFree 4.0.1.

DGA1 fornisce solamente accesso diretto al framebuffer come descritto sopra. Per modificare la risoluzione del segnale video devi affidarti all'estensione XVidMode.

DGA2 include le funzionalità dell'estensione XVidMode e inoltre permette la modifica della profondità di colore del display. Così, anche se stai facendo girare un X server con profondità di 32 bit, puoi passare a una di 15 e viceversa.

Tuttavia DGA ha dei punti deboli. Sembra sia in qualche modo dipendente dal chip grafico utilizzato e dall'implementazione del driver video dell'X server che controlla tale chip. Per cui non funziona su tutti i sistemi...

INSTALLARE IL SUPPORTO PER DGA IN MPLAYER. Per prima cosa assicurati che X carichi l'estensione DGA, guarda in `/var/log/XFree86.0.log`:

    (II) Loading extension XFree86-DGA

Attenzione, si consiglia vivamente XFree86 4.0.x o superiore! Il driver DGA di MPlayer viene rilevato automaticamente da `./configure`, ovvero puoi forzarlo con `--enable-dga`.

Se il driver non è riuscito a reimpostare una risoluzione inferiore, fai delle prove con le opzioni `-vm` (solo con X 3.3.x), `-fs`, `-bpp`, `-zoom` per trovare una modalità video in cui ci stia il film. Per ora non c'è un convertitore :(

Diventa `root`. A DGA serve l'accesso da root per essere in grado di scrivere direttamente sulla memoria video. Se vuoi eseguirlo come utente, allora installa MPlayer SUID root:

    chown root /usr/local/bin/mplayer
    chmod 750 /usr/local/bin/mplayer
    chmod +s /usr/local/bin/mplayer

Ora funziona anche da utente normale.

### Rischi di sicurezza

Questo porta un grosso rischio di sicurezza! Non farlo mai su un server o su un computer che può essere utilizzato da altre persone, perché si possono ottenere privilegi di root attraverso MPlayer SUID root.

Ora usa l'opzione `-vo dga`, e sei a cavallo! (speralo:) Potresti anche provare se ti funziona l'opzione `-vo sdl:driver=dga`! E' molto più veloce!

MODIFICARE LA RISOLUZIONE. Il driver DGA permette la modifica della risoluzione del segnale di uscita. Questo evita la necessità di eseguire un (lento) ridimensionamento software e allo stesso tempo fornisce un'immagine a schermo pieno. Idealmente dovrebbe ridimensionarsi alla risoluzione precisa (rispettando il rapporto di aspetto) dei dati video, ma l'X server permette solo di impostare le risoluzioni precedentemente definite in `/etc/X11/XF86Config` (`/etc/X11/XF86Config-4` per XFree 4.X.X). Queste ultime sono conosciute come "modelines" e dipendono dalle potenzialità del tuo hardware video. Il server X legge questo file di configurazione all'avvio e disabilita le modelines incompatibili col tuo hardware. Puoi scoprire quali modalità ti restano attraverso il file di log di X11. Si può trovare qui: `/var/log/XFree86.0.log`.

Queste modalità si sa che funzionano correttamente con un chip Riva128, usando il driver nv.o del server X.

    Section "Modes"
      Identifier "Modes[0]"
      Modeline "800x600"  40     800 840 968 1056  600 601 605 628
      Modeline "712x600"  35.0   712 740 850 900   400 410 412 425
      Modeline "640x480"  25.175 640 664 760 800   480 491 493 525
      Modeline "400x300"  20     400 416 480 528   300 301 303 314 Doublescan
      Modeline "352x288"  25.10  352 368 416 432   288 296 290 310
      Modeline "352x240"  15.750 352 368 416 432   240 244 246 262 Doublescan
      Modeline "320x240"  12.588 320 336 384 400   240 245 246 262 Doublescan
    EndSection

DGA & MPLAYER. DGA is used in two places with MPlayer: The SDL driver can be made to make use of it (`-vo sdl:driver=dga`) and within the DGA driver (`-vo dga`). The above said is true for both; in the following sections I'll explain how the DGA driver for MPlayer works. DGA viene usato con MPlayer in due posti: può essere usato attraverso il driver SDL (`-vo sdl:driver=dga`) e con il driver DGA (`-vo dga`). Quanto detto sopra è valido per entrambi; nei paragrafi seguenti viene spiegato come il driver DGA funziona per MPlayer.

CARATTERISTICHE. Il driver DGA viene utilizzato specificando `-vo dga` sulla riga comando. Il comportamento di default è di passare ad una risoluzione il più vicino possibile a quella originaria del video. Ignora volutamente le opzioni `-vm` e `-fs` (abilitazione ridimensionamento video e schermo intero) - cerca sempre di coprire la più vasta area possibile dello schermo reimpostando la modalità video, evitando così di sprecare cicli della CPU per ridimensionare l'immagine. Se la modalità video selezionata non ti piace, puoi forzarlo a scegliere la modalità più prossima alla risoluzione specificata con `-x` e `-y`. Impostando l'opzione `-v`, il driver DGA emetterà, tra una sacco ci altre cose, un'elenco delle risoluzioni supportate dal tuo file `XF86Config`. Se hai DGA2, puoi anche forzarlo ad utilizzare una data profondità usando l'opzione `-bpp`. Profondità valide sono 15, 16, 24 e 32. Se queste profondità siano supportate nativamente oppure se debba venir effettuata una conversione (eventualmente lenta), dipende dal tuo hardware.

Se dovessi essere abbastanza fortunato da avere sufficiente memoria fuori dalla visualizzazione per poterci far stare un'immagine intera, il driver DGA userà un buffering doppio, fornendo una riproduzione più fluida. Ti dirà quando il doppio buffering sarà abilitato o no.

"Doppio buffering" significa che il fotogramma successivo del video viene disegnato nella memoria fuori dello schermo, mentre il fotogramma corrente viene mostrato. Quando il fotogramma successivo è pronto, il chip grafico rivece solo l'indirizzo in memoria del nuovo fotogramma e semplicemente prende da là i dati da mostrare. Nel frattempo l'altro buffer di memoria viene riempito con altri dati video.

Il doppio buffering può venir abilitato usando l'opzione `-double` e disabilitato con `-nodouble`. L'opzione attuale di default è di disabilitarlo. Usando il driver DGA, la visualizzazione dati su schermo (OSD, onscreen display) funziona solo con il doppio buffering abilitato. In ogni caso, abilitare il doppio buffering può portare una pesante penalizzazione della velocità (sul mio K6-II+ 525 usa un ulteriore 20% di tempo di CPU) in dipendenza dall'implementazione per DGA del tuo hardware.

PROBLEMI DI VELOCITA'. In generale, l'accesso DGA al framebuffer dovrebbe essere almeno veloce quanto utilizzare il driver X11, con il beneficio aggiunto di ottenere un'immagine a schermo intero. I valori di velocità percentuale emessi da MPlayer devono essere interpretati con un po' di attenzione, dato che per esempio con il driver X11 non includono il tempo usato dal server X per il disegno effettivo. Attacca un terminale sulla seriale della tua macchina e lancia top per vedere cosa stia davvero succedendo.

In linea di massima, l'aumento di velocità usando DGA rispetto all'utilizzo 'normale' di X11 dipende fortemente dalla tua scheda video e da quanto bene il relativo modulo del server X sia ottimizzato.

Se hai un sistema lento, è meglio usare una profondità di 15 o 16 bit, visto che richiedono solo la metà della banda di memoria di una visualizzazion a 32 bit.

Usare una profondità di 24 è una buona idea anche se la tua scheda supporta nativamente solo quella a 32 bit, dato che trasferisce il 25% dei dati in meno rispetto alla modalità a 32/32.

Ho visto alcuni file AVI riprodotti su Pentium MMX 266. Le CPU AMD K6-2 possono lavorare a 400 MHz e oltre.

PROBLEMI/BACHI CONOSCIUTI. Bene, secondo gli sviluppatori di XFree, DGA è quasi una bestia. Ti dicono che è meglio non usarla. La sua implementazione non è sempre perfetta con tutti i driver dei chip per XFree che ci sono là fuori.

- Con XFree 4.0.3 e `nv.o` c'è un baco che porta ad avere strani colori.

- I driver ATI hanno bisogno che la modalità sia reimpostata più di una volta dopo aver utilizzato DGA.

- Alcuni driver semplicemente non riescono a tornare alla risoluzione normale (Usa Ctrl+Alt+Keypad + e Ctrl+Alt+Keypad - per cambiarla manualmente).

- Alcuni driver semplicemente mostrano strani colori.

- Alcuni driver mentono riguardo alla memoria che mappano nello spazio indirizzi del processo, perciò vo_dga non usa il doppio buffering (SIS?).

- Alcuni driver sembra che falliscano nel fornire almeno una modalità valida. In questo caso il driver DGA andrà in crash raccontandoti di una modalità senza senso tipo 100000x100000 o qualcosa di simile.

- L'OSD funziona solo col doppio buffering abilitato (altrimenti sfarfalla).

## 4.4. SDL

SDL (Simple Directmedia Layer) è praticamente un'interfaccia unificata audio/video. I programmi che la usano non sanno che driver video o audio SDL usi davvero, ma conoscono solo l'interfaccia. Per esempio un porting di Doom che usi SDL può girara sopra a svgalib, aalib, X, fbdev e altro, devi semplicemente specificare (per esempio) il driver video da usare attraverso la variabile d'ambiente `SDL_VIDEODRIVER`. In teoria, perlomeno.

Con MPlayer, usiamo la sua potenzialità di ridimensionamento via software del driver di X11 per le schede che non gestiscono XVideo, fino a quando non faremo il nostro (più veloce, più bello) ridimensionatore software. Abbiamo anche usato la sua uscita per aalib, ma ora abbiamo la nostra che è più comoda. La sua modalità per DGA era migliore della nostra fino a poco tempo fa. Hai capito, no? :)

Aiuta anche con alcuni driver/schede bacate, se il video è scattoso (non per problemi di sistema lento) oppure l'audio è saltellante.

L'uscita video SDL supporta la visualizzazione dei sottotitoli sotto al filmato ovvero sulla striscia nera (se presente).

## 4.5. SVGAlib

INSTALLAZIONE. Affinché MPlayer compili il suo driver per SVGAlib (autorilevato, ma può essere forzato), devi installare svgalib e il suo pacchetto di sviluppo e non dimenticare di modificare `/etc/vga/libvga.config` in modo che corrisponda alla tua scheda e al tuo monitor.

### Nota

Assicurati di non usare l'opzione `-fs`, dato che attiva l'utilizzo del ridimensionatore software, ed è lento. Se davvero ti serve, usa l'opzione `-sws 4`, che porterà una bassa qualità, ma è in qualche modo più veloce.

SUPPORTO PER EGA (4BPP). SVGAlib include EGAlib, e MPlayer ha la possibilità di mostrare qualsiasi filmato in 16 colori, utilizzabile in queste situazioni:

- Scheda EGA con monitor EGA: 320x200x4bpp, 640x200x4bpp, 640x350x4bpp

- Scheda EGA con monitor CGA: 320x200x4bpp, 640x200x4bpp

Il valore dei bpp (bit per pixel) deve essere impostato a 4 manualmente: `-bpp 4`

Il filmato probabilmente deve essere rimpicciolito per starci nella modalità EGA:

    -vf scale=640:350

or

    -vf scale=320:200

Per questo ci serve una funzione di ridimensionamento veloce ma a bassa qualità:

    -sws 4

Forse la correzione automatica dell'aspetto va disattivata:

    -noaspect

### Nota

Secondo la mia esperienza la qualità migliore dell'immagine su schermi EGA può essere ottenuta diminuendo un pochino la luminosità: `-vf eq=-20:0`. Sul mio sistema ho anche bisogno di abbassare la frequenza audio, dato che era rovinata a 44kHz: `-srate 22050`.

Puoi abilitare l'OSD e i sottotitoli solo con il filtro `expand`, vedi la pagina man per i parametri precisi.

## 4.6. Uscita su framebuffer (FBdev)

Se compilare l'uscita FBdev o no viene rilevato automaticamente da `./configure`. Leggi nei sorgenti del kernel la documentazione sul framebuffer (`Documentation/fb/*`) per ulteriori informazioni.

Se la tua scheda non supporta lo standard VBE 2.0 (vecchie schede ISA/PCI, come la S3 Trio64), ma solo VBE 1.2 (o precedente?): bene, c'è ancora VESAfb, ma ddovrai caricare SciTech Display Doctor (conosciuto precedentemente come UniVBE) prima di avviare Linux. Usa un disco di avvio DOS o qualcosa del genere. E non dimenticare di registrare il tuo UniVBE ;))

L'uscita su FBdev richiede principalmente alcuni parametri addizionali:

`-fb`

  specifica il dispositivo framebuffer da usare (default: `/dev/fb0`)

`-fbmode`

  nome della modalità da usare (come in `/etc/fb.modes`)

`-fbmodeconfig`

  file di configirazione delle modalità (default: `/etc/fb.modes`)

`-monitor-hfreq`, `-monitor-vfreq`, `-monitor-dotclock`

  valori importanti, vedi `example.conf`

Se vuoi passare a una modalità particolare, allora usa

    mplayer -vm -fbmode nome_modalità nomefile

- `-vm` da sola può scegliere la modalità più adatta da `/etc/fb.modes`. Può essere usata anche insieme con le opzioni `-x` e `-y`. L'opzione `-flip` è supportata solo se il formato pixel del film corrisponde al formato pixel della modalità video. Stai attento al valore di bpp, il driver fbdev cerca di usare prima quello corrente, poi quello che indichi tramite l'opzione `-bpp` option.

- l'opzione `-zoom` non è supportata (usa `-vf scale`). Non puoi usare modalità a 8bbp (o meno).

- Probabilmente vuoi disabilitare il cursore:

      echo -e '\033[?25l'

  o

      setterm -cursor off

  e il salvaschermo:

      setterm -blank 0

  Per riabilitare il cursore:

      echo -e '\033[?25h'

  o

      setterm -cursor on

### Nota

La modifica della modalità video di FBdev non funziona con il framebuffer VESA, e non chiederla, visto che non è una limitazione di MPlayer.

## 4.7. Framebuffer Matrox (mga_vid)

`mga_vid` è un'incrocio di un driver di uscita video e di un modulo del kernel, che utilizza il ridimensionatore e l'overlay video delle Matrox G200/G400/G450/G550 per effettuare una conversione dello spazio colore YUV->RGB e un ridimensionamento video arbitrario. `mga_vid` ha un supporto hardware per VSYNC con triplo buffering. Funziona sia in una console su framebuffer che dentro X, ma solo con Linux 2.4.x.

Per una versione del driver per Linux 2.6.x controlla http://attila.kinali.ch/mga/ oppure butta un occhio sul repository Subversion esterno di mga_vid, che si può ottenere tramite

    svn checkout svn://svn.mplayerhq.hu/mga_vid

Installazione:

1. Per usarlo devi innanzitutto compilare `drivers/mga_vid.o`:

       cd drivers
       make drivers

2. Poi esegui (come `root`)

       make install-drivers

   che dovrebbe installare il modulo e creare per te il nodo del dispositivo. Carica il driver con

       insmod mga_vid.o

3. Dovresti verificare il rilevamento della dimensione della memoria usando il comando dmesg. Se è errato, usa l'opzione `mga_ram_size` (prima fai rmmod mga_vid), indicando in MB la dimensione della memoria della scheda:

       insmod mga_vid.o mga_ram_size=16

4. Per far sì che venga caricato/scaricato quando serve, prima inserisci la riga seguente alla fine di `/etc/modules.conf`:

       alias char-major-178 mga_vid

5. Ora devi (ri)compilare MPlayer, ./configure rileverà `/dev/mga_vid` e compilerà il driver 'mga'. Si potrà usare da MPlayer con `-vo mga` se sei su una console matroxfb, oppure `-vo xmga` se sei sotto XFree86 3.x.x o 4.x.x.

Il driver mga_vid collabora con Xv.

Si può leggere il file del dispositivo `/dev/mga_vid` per alcune informazioni, per esempio facendo

    cat /dev/mga_vid

e ci si può scrivere per modificare la luminosità:

    echo "brightness=120" > /dev/mga_vid

Nella stessa directory c'è un'applicazione di test che si chiama mga_vid_test. Se tutto funziona bene, dovrebbe disegnare immagini di 256x256 sullo schermo.

## 4.8. Supporto YUV per 3Dfx

Questo driver usa il driver tdfx del kernel per il framebuffer per riprodurre filmati con accelerazione YUV. Ti serve un kernel con supporto per tdfxfb e ricompilare con

    ./configure --enable-tdfxfb

## 4.9. tdfx_vid

Questo è un'incrocio di un driver di uscita video e di un modulo del kernel, simile a mga_vid. Ti serve un kernel 2.4.x con il driver `agpgart`, visto che `tdfx_vid` usa AGP. Passa `--enable-tdfxfb` a configure per compilare il driver di uscita video e compila il module del kernel con le istruzioni seguenti.

Installare il modulo del kernel tdfx_vid.o:

1. Compila `drivers/tdfx_vid.o`:

       cd drivers
       make drivers

2. Poi esegui (come `root`)

       make install-drivers

   che dovrebbe installare il modulo e creare per te il nodo del dispositivo. Carica il driver con

       insmod tdfx_vid.o

3. Per far sì che venga caricato/scaricato quando serve, prima inserisci la riga seguente alla fine di `/etc/modules.conf`:

       alias char-major-178 tdfx_vid

Nella stessa directory c'è un'applicazione di test che si chiama tdfx_vid_test. Se tutto funziona bene, dovrebbe fornire alcune informazioni utili.

## 4.10. Uscita OpenGL

MPlayer supporta la riproduzione di filmati usando OpenGL, ma se se la tua piattaforma/driver supportano xv come è il caso di un PC con Linux, allora usa xv, le prestazioni OpenGL sono pesantemente peggiori. Se hai un'implementazione di X11 senza xv, OpenGL è una valida alternativa.

Sfortunatamente non tutti i driver supportano questa caratteristica. I driver Utah-GLX (per XFree86 3.3.6) la supportano per tutte le schede. Vedi http://utah-glx.sf.net per dettagli su come installarli.

XFree86(DRI) 4.0.3 or later supports OpenGL with Matrox and Radeon cards, 4.2.0 or later supports Rage128. Vedi http://dri.sf.net for download and installation instructions. XFree86(DRI) 4.0.3 o successivi supportano OpenGL con schede Matrox e Radeon, 4.2.0 o successivi supportano le Rage128. Leggi su http://dri.sf.net le istruzioni per scaricarli ed installare.

Un consiglio per i nostri utenti: l'uscita video GL può essere usata per ottenere un'uscita sincronizzata su vsync. Devi impostare una variabile d'ambiente (perlomeno con nVidia):

export __GL_SYNC_TO_VBLANK=1

## 4.11. AAlib – Visualizzazione in modalità testuale

AAlib è una libreria per mostrare elementi grafici in modalità testuale, usando un potente renderizzatore ASCII. Ci sono valanghe di programmi che la utilizzano, come Doom, Quake, etc. MPlayer ne include un driver facilmente utilizzabile. Se `./configure` trova AAlib installata, il driver di uscita video per aalib verrà compilato.

Puoi usare alcune chiavi nella finestra AA per modificare le opzioni di renderizzazione:

Chiave | Azione
--- | ---
1 | diminuisce il contrasto
2 | aumenta il contrasto
3 | diminuisce la luminosità
4 | aumenta la luminosità
5 | abilita/disabilita il fast rendering
6 | imposta la modalità di dithering (nessuna, distribuzione di errore, Floyd Steinberg)
7 | inverte l'immagine
8 | passa tra i controlli di aa e quelli di MPlayer

Si possono usare le seguenti opzioni sulla riga di comando:

`-aaosdcolor=`V``

  modifica il colore OSD

`-aasubcolor=`V``

  modifica il colore dei sottitoli

  dove `V` può essere: `0` (normale), `1` (scuro), `2` (grassetto), `3` (font grassetto), `4` (invertito), `5` (speciale).

AAlib di suo fornisce un po' di opzioni. Di seguito alcune importanti:

`-aadriver`

  Impostra il driver aa preferito (X11, curses, Linux).

`-aaextended`

  Usa tutti e 256 i caratteri.

`-aaeight`

  Usa ASCII a otto bit.

`-aahelp`

  Lista tutte le opzioni per aalib.

### Nota

La renderizzazione è molto pesante per la CPU, specialmente usando AA-on-X (usando aalib su X), ed è più leggera su una console standard, senza framebuffer. Usa SVGATextMode per impostare una modalità a molti caratteri, poi divertiti! (le schede Hercules con seconda uscita sono mitiche :)) (ma IMHO puoi usare l'opzione `-vf 1bpp` per avere grafica su hgafb:)

Usa l'opzione `-framedrop` se il tuo computer non è abbastanza veloce da renderizzare tutti i fotogrammi!

Riproducendo su un terminale, avrai migliore velocità e qualità usando il driver Linux, non ncurses (`-aadriver linux`). Ma devi anche avere accesso a `/dev/vcsa`<terminale>``! Questo non è rilevato automaticamente da aalib, ma vo_aa cerca di trovare la modalità migliore. Leggi http://aa-project.sf.net/tune per altri consigli di impostazioni.

## 4.12. `libcaca` – Libreria Color ASCII Art

La libreria `libcaca` è una libreria grafica che emette testo al posto di pixel, indi può funzionare su schede video più vecchie o su terminali di testo. Non è dissimile dalla famosa libreria `AAlib`. `libcaca` ha bisogno di un terminale per poter funzionare, perciò dovrebbe funzionare su tutti i sistemi Unix (incluso Mac OS X) usando la libreria `slang` ovvero la libreria `ncurses`, sotto DOS usando la libreria `conio.h`, e nei sistemi Windows usando `slang` o `ncurses` (tramite l'emulazione Cygwin) oppure `conio.h`. Se `./configure` rileva la presenza di `libcaca`, il driver di uscita video per caca verrà compilato.

Le differenze rispetto ad `AAlib` sono le seguenti:

- 16 colori disponibili per l'emissione a caratteri (256 coppie di colori)

- dithering del colore dell'immagine

Ma `libcaca` ha anche le seguenti limitazioni:

- nessun supporto per luminosià, contrasto, gamma

Puoi utilizzare alcuni tasti nella finestra caca per modificare le opzioni di renderizzazione:

Chiave | Azione
--- | ---
d | Attiva/disattiva il metodo di dithering di `libcaca`.
a | Attiva/disattiva l'antialias di `libcaca`.
b | Attiva/disattiva lo sfondo di `libcaca`.

`libcaca` terrà anche conto di alcune variabili d'ambiente:

`CACA_DRIVER`

  Imposta il driver caca richiesto. Per es. ncurses, slang, x11.

`CACA_GEOMETRY (solo X11)`

  Specifica il numero di righe e colonne. Per es. 128x50.

`CACA_FONT (solo X11)`

  Specifica il font da usare. Per es. fixed, nexus.

Usa l'opzione `-framedrop` se il tuo computer non è abbastanza veloce per renderizzare tutti i fotogrammi.

## 4.13. VESA - uscita attraverso il VESA BIOS

Questo driver è stato progettato ed introdotto come un driver generico per qualsiasi scheda video che abbia un BIOS compatibile con VESA VBE 2.0. Un altro vantaggio di questo driver è che cerca di attivare l'uscita TV. La VESA BIOS EXTENSION (VBE) Versione 3.0 Data: 16 settembre 1998 (pagina 70) dice:

> Dual-Controller Designs. VBE 3.0 supports the dual-controller design by assuming that since both controllers are typically provided by the same OEM, under control of a single BIOS ROM on the same graphics card, it is possible to hide the fact that two controllers are indeed present from the application. This has the limitation of preventing simultaneous use of the independent controllers, but allows applications released before VBE 3.0 to operate normally. The VBE Function 00h (Return Controller Information) returns the combined information of both controllers, including the combined list of available modes. When the application selects a mode, the appropriate controller is activated. Each of the remaining VBE functions then operates on the active controller.

Perciò usando questo driver hai qualche possibilità di far funzionare l'uscita TV (si presume che spesso l'uscita TV sia almeno un'uscita a sè stante).

VANTAGGI

- Puoi riuscire a guardare film anche se Linux non riconosce il tuo hardware grafico.

- Non ti serve avere alcuna cosa relativa alla grafica (come X11 (AKA XFree86), fbdev e così via) sul tuo Linux. Questo driver può venir utilizzato dalla modalità testo.

- Hai qualche possibilità di avere l'uscita TV funzionante (per le schede ATI perlomeno è così).

- Questo driver chiama la funzione `int 10h` percui non è un emulatore - fa riferimento a cose reali del BIOS reale in modalità reale (attualmente in modalità vm86).

- Con esso puoi usare VIDIX, potendo ottenere contemporaneamente un'uscita video accelerata e e l'uscita TV! (consigliato per schede ATI)

- Se hai VESA VBE 3.0+ e hai specificato in qualche dove `monitor-hfreq, monitor-vfreq, monitor-dotclock` (nel file di configurazione o dalla riga comando) otterrai la massima frequenza di aggiornamento possibile (usando formule generiche di temporizzazione). Per abilitare questa funzionalità devi specificare tutte le opzioni per il tuo monitor.

SVANTAGGI

- Funziona solo su sistemi x86.

- Può essere usato solo da `root`.

- Attualmente è disponibile solo per Linux.

### Importante

Non usare questo driver con GCC 2.96! Non funzionerà!

OPZIONI DELLA RIGA COMANDO DISPONIBILI PER VESA

`-vo vesa:`opzioni``

  attualmente riconosciute: `dga` per forzare la modalità dga e `nodga` per disabilitarla. In modalità dga puoi abilitare il doppio buffering con l'opzione `-double`. Nota: puoi omettere questi parametri per abilitare l'auto-rilevazione della modalità dga.

PROBLEMI CONOSCIUTI E SOLUZIONI

- Se hai dei font NLS installati sulla tua macchina Linux ed utilizzi il driver VESA in modalità testo, allora dopo essere uscito daMPlayer avrai i font ROM caricati al posto di quelli locali. Puoi ricaricare i font locali usando lo strumento setsysfont per Mandrake/Mandriva, ad esempio (consiglio: lo stesso strumento viene usato per la localizzazione di fbdev).

- Alcuni driver grafici per Linux non modificano nella memoria DOS la modalità BIOS attiva. Per cui se hai questo problema - usa sempre il driver VESA dalla modalità testo. Altrimenti verrà comunque attivata la modalità testo (#03) e dovrai riavviare il tuo computer.

- Spesso dopo aver dismesso il driver VESA ottieni uno schermo nero. Per riportare il tuo schermo allo stato originario - salta semplicemente ad unìaltra console (premendo Alt+F<x>) poi ritorna alla console precedente allo stesso modo.

- Per avere l'uscita TV funzionante devi avere il connettore TV collegato prima di avviare il tuo PC, visto che il BIOS video si inizializza solo una volta durante il passaggio POST.

## 4.14. X11

Da evitare se possibile. Uscita su X11 (utilizza l'estensione della memoria condivisa), senza alcuna accelerazione hardware. Gestisce il ridimensionamento software (accelerato MMX/3DNow/SSE, ma sempre lento), usa le opzioni `-fs -zoom`. La maggior parte delle schede gestisce un ridimensionamento hardware, usa per queste l'uscita `-vo xv`, oppure `-vo xmga` per le schede Matrox.

Il problema è che i driver di molte schede non supportano l'accelerazione hardware sulla seconda uscita o TV. In quei casi, vedi delle finestre blu/verdi al posto del film. In questi casi torna utile questo driver, ma ti serve una CPU potente per effettuare il ridimensionamento software. Non usare il driver di uscita SDL + ridimensionamento software, ha una peggior qualità dell'immagine.

Il ridimensionamento software è molto lento, ti conviene piuttosto cambiare la modalità video. E' molto facile. Guarda le modeline della sezione DGA, e inseriscile nel tuo `XF86Config`.

- Se hai XFree86 4.x.x: usa l'opzione `-vm`. Passerà alla risoluzione che meglio si adatta al tuo film. Se non lo fa:

- With XFree86 3.x.x: you have to cycle through available resolutions Con XFree86 3.x.x: devi passare attraverso le risoluzioni disponibili con i tasti Ctrl+Alt+Keypad + e Ctrl+Alt+Keypad -.

Se non trovi le modalità che hai aggiunto, controlla l'emissione di XFree86. Alcuni driver non possono usare dei pixelclock che servono per modalità a bassa risoluzione.

## 4.15. VIDIX

PREAMBOLO. VIDIX è un nome breve che sta per VIDeo Interface per *niX. VIDIX è stato progettato ed introdotto com un'interfaccia per driver veloci nello spazio utente, fornendo delle prestazioni video come quelle che fornisce mga_vid per le schede Matrox. E' anche molto portabile.

Quest'interfaccia è stata progettata come un tentativo di riunire le interfacce di accelerazione video già esistenti (conosciute come mga_vid, rage128_vid, radeon_vid, pm3_vid) in uno schema fissato. Fornisce un'interfaccia di alto livello a chip conosciuti come BES (BackEnd scalers) o OV (Video Overlays). Non fornisce un'interfaccia a basso livello a cose conosciute come server grafici (non voglio entrare in competizione con il gruppo di X11 per le modifiche alla modalità grafica). Per es. l'obiettivo principale di quest'intarfaccia è quello di velocizzare la riproduzione video.

USO

- Puoi usare un driver di uscita video a sé stante: `-vo xvidix`. Questo driver è stato sviluppato come un front-end tra X11 e la tecnologia VIDIX. Richiede l'X server e può funzionare solo dentro all'X server stesso. Nota che, visto che accede direttamente all'hardware e oltrepassa il driver X, le immagini memorizzate nella memoria della scheda video possono venir corrotte. Puoi evitarlo limitando la dimensione della memoria video usata da X con l'opzine "VideoRam" nella sezione device di XF86Config. Dovresti impostare tale opzione alla quantità di memoria della tua scheda meno 4MB. Se hai meno di 8MB di ram video, puoi usare invece l'opzione "XaaNoPixmapCache" nella sezione screen.

- C'è poi un driver VIDIX per la console: `-vo cvidix`. Questo richiede per la maggior parte delle schede un framebuffer inizializzato e funzionante (altrimenti incasinerai solamente lo schermo), e otterrai un effetto simile a `-vo mga` o `-vo fbdev`. Le schede nVidia tuttavia sono in grado di emettere video completamente grafico su vere console di testo. Vedi la sezione nvidia_vid per ulteriori informazioni. Per evitare il testo sui bordi e il cursore lampeggiante, prova qualcosa tipo

      setterm -cursor off > /dev/tty9

  (presumendo che `tty9` non venga utilizzata) e poi passa a `tty9`. D'altro canto, `-colorkey 0` dovrebbe mostrarti il video sullo "sfondo", anche se questo dipende dal fatto che colorkey funzioni bene o no.

- Puoi usare un sotto-dispositivo VIDIX che sia stato applicato a vari driver di uscita video, così: `-vo vesa:vidix` (solo per Linux) e `-vo fbdev:vidix`.

In verità non conta quale driver di uscita video venga usato con VIDIX.

PREREQUISITI

- La scheda video dovrebbe essere in modalità grafica (tranne le schede nVidia con il driver di uscita `-vo cvidix`).

- Il driver di uscita video di MPlayer dovrebbe conoscere la modalità video attiva ed essere in grado di fornire al sotto-dispositivo VIDIX alcune caratteristiche video del server.

MODI DI UTILIZZO. Quando VIDIX viene usato come un sotto-dispositivo (`-vo vesa:vidix`) allora la configurazione della modalità video viene eseguita dal dispositivo di uscita video (vo_server, in breve). Perciò puoi passare sulla riga comando di MPlayer le stesse chiavi per vo_server. Inoltre accetta `-double` come un parametro globale (si consiglia di usare questa opzione con VIDIX almeno per le schede ATI). Come `-vo xvidix`, attualmente riconosce le seguenti opzioni: `-fs -zoom -x -y -double`.

Poi puoi specificare il driver VIDIX direttamente sulla riga comando come una terza sotto-opzione:

    mplayer -vo xvidix:mga_vid.so -fs -zoom -double file.avi

o

    mplayer -vo vesa:vidix:radeon_vid.so -fs -zoom -double -bpp 32 file.avi

ma è pericoloso e non dovresti farlo. In questo caso il driver indicato verrà forzato e i risultati sono imprevedibili (potrebbe mandarti il computer in freeze). Dovresti farlo SOLO se sei assolutamente sicuro che funzionerà e MPlayer non lo farà automaticamente. Per favore dillo agli sviluppatori. Il modo corretto è utilizzare VIDIX senza argomenti per abilitare la rilevazione automatica del driver.

### 4.15.1. svgalib_helper

Visto che VIDIX richiede un accesso diretto all'hardware puoi sia eseguirlo come root, sia impostare il bit SUID sull'eseguibile di MPlayer. (Attenzione: questo è un rischio di sicurezza!) Alternativamente puoi usare uno modulo del kernel speciale, come questo:

1. Scarica la versione di sviluppo di svgalib (1.9.x).

2. Compila il modulo nella directory `svgalib_helper` (si trova dentro la directory `svgalib-1.9.17/kernel/` se hai scaricato i sorgenti dal sito di svgalib) e caricalo nel kernel.

3. Per creare i dispositivi necessari nella directory `/dev`, esegui, da utente root,

       make device

   nella directory `svgalib_helper`.

4. Poi esegui di nuovo `configure` passando i parametri `--enable-svgalib_helper` e `--extra-cflags=`/percorso/dei/sorgenti/di/svgalib_helper`kernel/svgalib_helper`, dove `/percorso/dei/sorgenti/di/svgalib_helper` deve puntare al percorso dove hai estratto i sorgenti di svgalib_helper.

5. Ricompila.

### 4.15.2. Schede ATI

Attualmente la maggior parte delle schede ATI è supportata nativamente, dalle Mach64 alle più recenti Radeon.

Ci sono due binari compilati: `radeon_vid` per le Radeon e `rage128_vid` per le schede Rage 128. Puoi forzare l'utilizzo di uno dei due, oppure lasciare che il sistema VIDIX provi tutti i driver disponibili.

### 4.15.3. Schede Matrox

Le Matrox G200, G400, G450 and G550 sono state riportate come funzionanti.

Il driver supporta gli equalizzatori video e dovrebbe essere veloce quasi quanto il framebuffer Matrox.

### 4.15.4. Schede Trident

C'è un driver disponibile per il chipset Trident Cyberblade/i1, che si può trovare sulle schede madri VIA Epia.

Il driver è scritto e mantenuto da Alastair M. Robinson.

### 4.15.5. Schede 3DLabs

Anche se esiste un driver per i chip 3DLabs GLINT R3 e Permedia3, nessuno lo ha provato, perciò delle informazioni sono benvenute.

### 4.15.6. Schede nVidia

Una caratteristica unica del driver nvidia_vid è la sua abilità nel mostrare video su di una semplice, pura, console di testo - senza alcun framebuffer o qualche magia di X. Per questo fine, dovremo usare il driver di uscita video `cvidix`, come mostrato nell'esempio che segue:

    mplayer -vo cvidix esempio.avi

### 4.15.7. Schede SiS

Questo codice è davvero sperimentale, proprio come nvidia_vid.

E' stato testato su SiS 650/651/740 (i chipset più diffusi usati nelle versioni SiS dello "Shuttle XPC").

Si attendono resoconti!

## 4.16. DirectFB

> "DirectFB is a graphics library which was designed with embedded systems in mind. It offers maximum hardware accelerated performance at a minimum of resource usage and overhead." - citazione da http://www.directfb.org

Ometterò le caratteristiche di DirectFB da questa sezione.

Anche se MPlayer non è supportato come un "provider video" in DirectFB, questo driver di uscita video abiliterà la riproduzione video tramite DirectFB. Sarà - ovviamente - accelerata, la velocità di DirectFB sulla mia Matrox G400 è la stessa di XVideo.

Cerca sempre di utilizzare la versione più recente di DirectFB. Sulla riga comando puoi usare le opzioni di DirectFB, usando `-dfbopts`. La scelta del livello può essere fatta con il metodo del sotto-dispositivo, per es.: `-vo directfb:2` (il livello -1 è il default: autorilevazione)

## 4.17. DirectFB/Matrox (dfbmga)

Leggi per favore la sezione principale di DirectFB per le informazioni generali.

Questo driver di uscita video abiliterà il CRTC2 (sulla seconda uscita) delle schede Matrox G400/G450/G550, mostrando il video independentemente rispetto alla prima uscita.

Ville Syrjala's ha un README e un HOWTO sul suo sito, che spiegano come far funzionare l'uscita TV DirectFB sulle schede Matrox.

### Nota

La prima versione di DirectFB con cui siamo riusciti a farlo funzionare è la 0.9.17 (ha problemi, gli serve la patch `surfacemanager` dal sito suddetto). Portare il codice per CRTC2 in mga_vid è in progetto da anni, sono benvenute delle patch.

## 4.18. Decodificatori MPEG

### 4.18.1. Uscita e ingresso DVB

MPlayer supporta le schede con chipset DVB Siemens di produttori come Siemens, Technotrend, Galaxis o Hauppauge. I driver DVB più recenti sono disponibili sul sito di Linux TV. Se vuoi eseguire la transcodifica software dovresti avere almeno una CPU a 1GHz.

Configure dovrebbe rilevare la tua scheda DVB. Se non lo fa, forzalo con

    ./configure --enable-dvb

Se hai gli header ost in un percorso non standard, imposta il percorso con

    ./configure --extra-cflags=directory sorgenti DVB/ost/include

Poi compila ed installa come al solito.

USO. La decodifica hardware di flussi contententi video MPEG-1/2 e/o audio MPEG puà essere effettuata con questo comando:

    mplayer -ao mpegpes -vo mpegpes file.mpg|vob

La decodfica di qualsiasi altro tipo di flusso video richiede la transcodifica in MPEG-1, indi è lenta a potrebbe non valerne la pena, specialmente se il tuo computer è lento. Si puà ottenere usando un comando come questo:

    mplayer -ao mpegpes -vo mpegpes tuofile.ext
    mplayer -ao mpegpes -vo mpegpes -vf expand tuofile.ext

Fai attenzione che le schede DVB supportano solo le altezze 288 e 576 per PAL oppure 240 e 480 per NTSC. Devi ridimensionare le altre altezze aggiungendo `scale=larghezza:altezza`, con la larghezza e l'altezza volute, all'opzione `-vf`. Le schede DVB accettano diverse larghezze, come 720, 704, 640, 512, 480, 352 etc. ed effettuano il ridimensionamento hardware sulla direzione orizzontale, perciò nella maggior parte deiu casi non ti serve ridimensionare in orizzontale. Per un MPEG-4 (DivX) a 512x384 (aspetto 4:3), prova:

    mplayer -ao mpegpes -vo mpegpes -vf scale=512:576

Se hai un film in widescreen e non vuoi ridimensionarlo ad altezza piena, puoi usare il filtro `expand=w:h` per aggiungere delle bande nere. Per guardare un MPEG-4 (DivX) a 640x384, prova:

    mplayer -ao mpegpes -vo mpegpes -vf expand=640:576 file.avi

Se la tua CPU è troppo lenta per un MPEG-4 (DivX) intero a 720x576, prova a rimpicciolirlo:

    mplayer -ao mpegpes -vo mpegpes -vf scale=352:576 file.avi

Se la velocità non migliora, prova a rimpicciolirlo anche in verticale:

    mplayer -ao mpegpes -vo mpegpes -vf scale=352:288 file.avi

Per l'OSD e i sottotitoli usa la caratteristica OSD del filtro expand. Quindi, al posto di `expand=w:h` o `expand=w:h:x:y`, usa `expand=w:h:x:y:1` (il quinto parametro `:1` alla fine abiliterà il rendering dell'OSD). Potresti voler spostare leggermente verso l'alto l'immagine per ottenere una banda nera più ampia per i sottotitoli. Potresti anche voler spostare più in alto i sottotitoli, se sono al di fuori dello schermo della tua TV, usa l'opzione `-subpos <0-100>` (`-subpos 80` è una buona scelta).

Per poter riprodurre un film non a 25fps su una TV PAL ovvero con una CPU lenta, aggiungi l'opzione `-framedrop`.

Per mantenere il rapporto di aspetto dei file MPEG-4 (DivX) e ottenere i parametri ottimali per il ridimensionamento (ridimensionamento orizzontale hardware e verticale software mantenendo il giusto rapporto di aspetto), usa il nuovo filtro dvbscale:

    per una TV a  4:3: -vf dvbscale,scale=-1:0,expand=-1:576:-1:-1:1
    per una TV a 16:9: -vf dvbscale=1024,scale=-1:0,expand=-1:576:-1:-1:1

TV Digitale (modulo d'ingresso DVB). Puoi usare la tua scheda TV per guardare la TV Digitale.

Dovresti avere installati i programmi scan e szap/tzap/czap/azap; essi sono inclusi nel pacchetto dei driver.

Verifica che i tuoi driver funzionino correttamente attraverso un programma tipo dvbstream (che è la base del modulo d'ingresso DVB).

Ora dovresti riempire un file `~/.mplayer/channels.conf`, con la sintassi accettata da szap/tzap/czap/azap, o fare in modo che scan lo riempia per te.

Se hai più di un tipo di scheda (per es. Satellitare, Terrestre, Via Cavo e ATSC) puoi salvare i tuoi file dei canali come `~/.mplayer/channels.conf.sat`, `~/.mplayer/channels.conf.ter`, `~/.mplayer/channels.conf.cbl`, e `~/.mplayer/channels.conf.atsc`, rispettivamente, per spingere implicitamente MPlayer ad usare questi file invece che `~/.mplayer/channels.conf`, e devi solamente specificare quale scheda usare.

Assicurati di avere solo canali in chiaro nel tuo file `channels.conf`, altrimenti MPlayer resterà in attesa di una trasmissione non criptata.

Nei tuoi campi audio e video puoi usare una sintassi espansa: `...:pid[+pid]:...` (fino ad un massimo di 6 pid ciascuno); in questo caso MPlayer includerà nel flusso tutti i pid indicati, oltre al pid 0 (che contiene il PAT). Si consiglia di includere in ogni riga i pid PMT e PCR per il canale corrispondente (se conosciuti). Puoi anche specificare 8192, che seleziona tutti i pid su quella frequenza e puoi anche passare con TAB attraverso i programmi. Potrebbe aver bisogno di più banda, anche se le schede economiche passano sempre tutti canali al kernel, per cui non fa molta differenza per queste. Altri utilizzi possibili sono: pid televideo, seconda traccia audio, etc...

Se MPlayer si lamenta frequentemente di

    Troppi pacchetti video/audio nel buffer

oppure noti una desincronizzazione crescente tra l'audio e il video, verifica la presenza del pid PCR nel tuo flusso (serve per adeguarsi alla modalità di buffering del trasmettitore) e/o prova ad usare il demuxer MPEG-TS di libavformat aggiungendo `-demuxer lavf -lavfdopts probesize=128` alla tua riga comando.

Per vedere il primo dei canali presenti nella tua lista, esegui

    mplayer dvb://

Se vuoi guardare un canale in particolare, come R1, esegui

    mplayer dvb://R1

Se hai più di una scheda puoi anche dover specificare il numero della scheda dove il canale si vede (per es. 2) con la sintassi:

    mplayer dvb://2@R1

Per cambiare canale premi i tasti h (successivo) e k (precedente), oppure usa il menu OSD.

Per disabilitare temporaneamente il flusso video o audio, copia quello che segue in `~/.mplayer/input.conf`:

    % set_property  switch_video -2
    & step_property switch_video
    ? set_property  switch_audio -2
    ^ step_property switch_audio

(Reimpostando i comandi da tastiera come si preferisce.) Premendo il tasto corrispondente a switch_x -2, il flusso relativo verrà chiuso; premendo il tasto corrispondente a step_x il flusso verrà riaperto. Nota che quando ci sono più flussi audio e video nel multiplex questo meccanismo non funzionerà nel modo che ci si aspetta.

Durante la riproduzione (non durante la registrazione), per evitare saltellamenti e messaggi di errore tipo 'Il tuo sistema è troppo LENTO', si consiglia di aggiungere

    -mc 10 -speed 0.97 -af scaletempo

alla riga comando, impostando i parametri di scaletempo come si preferisce.

Se il tuo `~/.mplayer/menu.conf` contiene una voce `<dvbsel>`, come quella nel file di esempio `etc/dvb-menu.conf` (che puoi usare per sovrascrivere `~/.mplayer/menu.conf`), il menu principale mostrerà una voce di sotto-menu che ti lascerà scegliere uno dei canali presenti nel tuo `channels.conf`, possibilmente preceduto da un menu con la lista delle schede disponibili, se ve ne è più di una utilizzabile da MPlayer.

Se vuoi salvare su disco un programma puoi usare

    mplayer -dumpfile r1.ts -dumpstream dvb://R1

Se vuoi registrarlo in un formato diverso (ri-codificandolo) puoi invece lanciare un comando come

    mencoder -o r1.avi -ovc xvid -xvidencopts bitrate=800 \
        -oac mp3lame -lameopts cbr:br=128 -pp=ci dvb://R1

Leggi la pagina man per una lista di opzioni che puoi passare al modulo di ingresso DVB.

FUTURO. Se hai domande o vuoi ricevere gli annunci di nuove caratteristiche e vuoi partecipare a discussioni su questo argomento, iscriviti alla nostra mailing list MPlayer-DVB. Per favore tieni presente che la lingua della lista è l'inglese.

In futuro puoi aspettarti la possibilità di mostrare OSD e sottotitoli usando la caratteristica nativa delle schede DVB, così come una riproduzione più fluida di film non a 25fps e transcodifica in tempo reale tra MPEG-2 e MPEG-4 (decompressione parziale).

### 4.18.2. DXR2

MPlayer fornisce una riproduzione accelerata hardware con la scheda Creative DXR2.

Prima di tutto ti serviranno dei driver DXR2 correttamente installati. Puoi trovare i driver e le istruzioni per l'installazione sul sito DXR2 Resource Center.

USO

`-vo dxr2`

  Abilita l'uscita TV.

`-vo dxr2:x11` or `-vo dxr2:xv`

  Abilita in X11 l'uscita su Overlay.

`-dxr2 <option1:option2:...>`

  Questa opzione viene usata per controllare il driver DXR2.

Il chipset di overlay usato sulla DXR2 ha una qualità piuttosto bassa, ma le impostazioni di default dovrebbero funzionare per chiunque. L'OSD potrebbe essre utilizzabile con l'overlay (non sulla TV) disegnandolo nella chiave colore. Con le impostazioni di default della chiave colore puoi ottenere risultati variabili, spesso vedrai la chiave colore attorno ai caratteri o qualche altro effetto strambo. Ma se imposti correttamente le opzioni della chiave colore dovresti ricavare dei risultati accettabili.

Per favore vedi nella pagina man le opzioni disponibili.

### 4.18.3. DXR3/Hollywood+

MPlayer fornisce una riproduzione accelerata con le schede Creative DXR3 e Sigma Designs Hollywood Plus. Queste schede usano entrambe il chip em8300 di decodifica MPEG di Sigma Designs.

Prima di tutto ti serviranno dei driver DXR3/H+ correttamente installati, versione 0.12.0 o successiva. Puoi trovare i driver e le istruzioni per l'installazione sul sito DXR3 & Hollywood Plus per Linux. `configure` dovrebbe rilevare automaticamente la tua scheda, la compilazione dovrebbe concludersi senza problemi.

USO

`-vo dxr3:prebuf:sync:norm=x:`dispositivo``

  `overlay` attiva l'overlay (sovrapposizione) invece che l'uscita TV. Per funzionare richiede un'impostazione dell'overlay adeguatamente configurata. Il modo più semplice di configurare l'overlay è eseguire prima autocal. Poi lanciare mplayer con l'uscita dxr3 e, senza l'overlay abilitato, eseguire dxr3view. In dxr3view puoi giocherellare con le impostazioni dell'overlay e vederne il risultato in tempo reale, forse questa funzionalità sarà utilizzabile in futueo dalla GUI di MPlayer. Una volta che l'overlay sarà correttamente configurato, non ti servirà più dxr3view. `prebuf` abilita il pre-buffering. Il pre-buffering è una funzionalità del chip em8300 che gli permette di contenere più di un fotogramma video per volta. Questo significa che quando stai usando il pre-buffering, MPlayer cercherà di mantenere il buffer video constantemente pieno di dati. Se sei su una macchina lenta, l'uso della CPU di MPlayer sarà vicino, o pari, al 100%. Questo è particolarmente vero se riproduci flussi MPEG puri (come DVD, SVCD e così via), visto che MPlayer non dovrà ricodificarli in MPEG riempirà il buffer molto velocemente. Con il pre-buffering la riproduzione video è molto meno sensibile all'utilizzo della CPU da parte di altri programmi, non scarterà fotogrammi a meno che tale applicazione prenda possesso della CPU per un tempo lungo. Quando viene usato senza pre-buffering, l'em8300 è molto più sensibile al carico della CPU, per cui si consiglia caldamente di abilitare l'opzione `-framedrop` di MPlayer per evitare un'ulteriore perdita di sincronia. `sync` abiliterà il nuovo motore di sincronizzazione. Questa attualmente è una caratteristica sperimentale. Con il motore di sincronizzazione abilitato, l'orologio interno dell'em8300 verrà tenuto constantemente sotto controllo, se inizia a spostarsi dall'orologio di MPlayer verrà resettato causando lo scarto da parte dell'em8300 di tutti i fotogrammi rimasti indietro. `norm=x` imposterà la norma TV della scheda DXR3 senza il bisogno di strumenti esterni come em8300setup. Norme valide sono 5 = NTSC, 4 = PAL-60, 3 = PAL. Norme speciali sono 2 (auto-impostazione usando PAL/PAL-60) e 1 (auto-impostazione usando PAL/NTSC) poiché decidono quale norma usare in base alla frequenza fotogrammi del filmato. norm = 0 (default) non modifica la norma corrente. ``dispositivo`` = numero del dipositivo da usare se hai più di una scheda em8300. Ognuna di queste opzioni può essere tralasciata. `:prebuf:sync` sembra funzionare molto bene riproducendo filmati MPEG-4 (DivX). Alcune persone hanno notificato problemi usando l'opzione prebuf riproducendo file MPEG-1/2. Potresti voler provare dapprima l'esecuzione senza alcuna opzione, se hai problemi di sincronizzazione, o problemi coi sottotitoli DVD, fai un tentativo con `:sync`.

`-ao oss:/dev/em8300_ma-`X``

  Per l'uscita audio, dove `X` è il numero del dispositivo (0 per una scheda sola).

`-af resample=`xxxxx``

  This does not work with digital audio output (`-ac hwac3`). L'em8300 non può riprodurre frequenze inferiori a 44100Hz. Se la frequenza è minore di 44100Hz imposta 44100Hz oppure 48000Hz a seconda di quale sia la più prossima. Per es. se il film usa 22050Hz allora usa 44100Hz come 44100 / 2 = 22050, se è 24000Hz usa 48000Hz come 48000 / 2 = 24000 e così via.

`-vf lavc`

  Per visualizzare contenuti non MPEG sull'em8300 (per es. MPEG-4 (DivX) o RealVideo) devi specificare un filtro video MPEG-1 come `libavcodec` (lavc). Vedi la pagina man per ulteriori informazioni circa `-vf lavc`. Attualmente non c'è modo di impostare gli fps dell'em8300, il che significa che sono fissati a 30000/1001 fps. A causa di ciò si raccomanda caldamente di usare `-vf lavc=`qualità`:25` soprattutto se stai usando il pre-buffering. Allora perché 25 e non 30000/1001? Bene, il fatto è che quando usi 30000/1001 l'immagine diventa un pochino saltellante. La ragione di ciò ci è sconosciuta. Se li imposti a qualcosa tra 25 e 27 l'immagine diventa stabile. Per adesso tutto quello che possiamo fare è accettarlo empiricamente.

`-vf expand=-1:-1:-1:-1:1`

  Anche se il driver DXR3 può posizionare qualche OSD sul video MPEG-1/2/4, ha una qualità decisamente inferiore del tipico OSD di MPlayer, e ha anche molti problemi di aggiornamento. La riga comando suddetta dapprima converte il video in ingresso a MPEG-4 (questo è obbligatorio, scusa), poi applica un filtro expand che non espande nulla (-1: default), ma aggiunge all'immagine l'OSD normale (questo è ciò che fa l'"1" alla fine).

`-ac hwac3`

  L'em8300 supporta la riproduzione audio AC-3 (in surround) attraverso l'uscita digitale della scheda. Vedi l'opzione `-ao oss` più sopra, deve essere usata per specificare l'uscita DXR3 al posto di una scheda audio.

## 4.19. Altri dispositivi di visualizzazione

### 4.19.1. Zr

Questo è un driver video (`-vo zr`) per un buon numero di schede di cattura/riproduzione MJPEG (provato con DC10+ e Buz, e dovrebbe funzionare per LML33, la DC10). Il driver lavora codificando il fotogramma in JPEG e poi inviandolo alla scheda. Per la codifica JPEG viene usata, e richiesta, `libavcodec`. Con la modalità speciale cinerama, puoi guardare filmati in verà modalità widescreen a patto che tu abbia due proiettori e due schede MJPEG. Proporzionalmente alla risoluzione e alle impostazioni della qualità, questo driver può richiedere molta potenza di CPU, ricordati di specificare `-framedrop` se la tua macchina è troppo lenta. Nota: il mio AMD K6-2 350MHz è (con `-framedrop`) abbastanza adeguato per riprodurre materiale VCD e film rimpiccioliti.

Il driver comunica col driver del kernel disponibile su http://mjpeg.sf.net, indi devi avere per prima cosa questo funzionante. La presenza di una scheda MJPEG è autorilevata dallo script `configure`, se la rilevazione fallisce, forzala con

    ./configure --enable-zr

L'uscita può essere controllata con varie opzioni, una descrizione dettagliata delle opzioni si trova nella pagina man, una lista breve delle opzioni si può avere eseguendo

    mplayer -zrhelp

Cose come il ridimensionamento e l'OSD (on screen display) non sono gestite da questo driver ma possono essere ottenute usado dei filtri video. Per esempio, supponi di avere un film a una risoluzione di 512x272 e vuoi vederlo a schermo intero con un'ampiezza di 768, 384 o 192. Per ragioni di prestazioni e di qualità, io sceglierei di ridimensionare il film a 384x204 usando il ridimensionatore software bilineae veloce. La riga comando diventa

    mplayer -vo zr -sws 0 -vf scale=384:204 filmato.avi

Il ritaglio può essere eseguito dal filtro `crop` e da questo driver di per sé. Supponi che un film sia troppo ampio per vedersi dal tuo Buz e che tu voglia usare `-zrcrop` per ridurre l'ampiezza del film, allora dovrai lanciare il comando seguente

    mplayer -vo zr -zrcrop 720x320+80+0 benhur.avi

Se vuoi usare il filtro `crop`, dovresti lanciare

    mplayer -vo zr -vf crop=720:320:80:0 benhur.avi

Ulteriori presenze di `-zrcrop` evocano la modalità cinerama, per es. puoi distribuire il filmato su varie TV o proiettori per creare uno schermo più grande. Supponi di avere due proiettori. Quello di sinistra è collegato al tuo Buz su `/dev/video1` e quello di destra è connesso al tuo DC10+ su `/dev/video0`. Il film ha una risoluzione di 704x288. Supponi inoltre di volere il proiettore di destra in bianco e nero e che quello di sinistra debba avere fotogrammi JPEG con una qualità 10, allora dovrai eseguire il comando seguente

    mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
        -zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
        film.avi

Vedi che le opzioni che ci sono prima della seconda `-zrcrop` si applicano solo al DC10+ e che le opzioni dopo la seconda `-zrcrop` si applicano al Buz. Il massino numero di schede MJPEG contemporanee in cinerama è quattro, per cui puoi costruire un muro video di 2x2.

Infine una nota importante: non avviare o fermare XawTV sul dispoitivo di riproduzione durante la riproduzione stessa, o ti manderà in crash il computer. Va tuttavia bene PRIMA lanciare XawTV, POI avviare MPlayer, attendere l'uscita di MPlayer, e DOPO fermare XawTV.

### 4.19.2. Blinkenlights

Il driver è in grado di riprodurre usando il protocollo UDP Blinkenlights. Se non sai cosa siano Blinkenlights o il suo successore Arcade, scoprilo. Anche se probabilmente questo è uno degli ultimi driver video usati, senza dubbio è il più figo che MPlayer abbia da offrire. Guarda solo alcuni dei video documentali di Blinkenlights. Sul video Arcade puoi vedere il driver di uscita video Blinkenlights in azione alla posizione 00:07:50.

## 4.20. Gestione uscita TV-out

### 4.20.1. Schede Matrox G400

Sotto Linux hai due modi per far funzionare l'uscita TV delle G400:

### Importante

Per le istruzioni per l'uscita TV-out su Matrox G450/G550, vedi per favore la sezione successiva!

XFree86

  Usando il driver e il modulo HAL, disponibile dal sito Matrox. Questo ti farò avere X sulla TV.

  Questo metodo non ti fornirà una riproduzione accelerate come sotto Windows! La seconda uscita ha solo il framebuffer YUV, il BES (Back End Scaler, il ridimensionatore sulle schede G200/G400/G450/G550) non funziona su di esso! Il driver per Windows in qualche modo aggira il problema, probabilmente usando il motore 3D per ridimensionare, e il framebuffer YUV per mostrare l'immagine ridimensionata. Se vuoi davvero usare X, uitlizza le opzioni `-vo x11 -fs -zoom`, ma sarà LENTO, e avrà la protezione di copia Macrovision abilitata (puoi "correggere" Macrovision usando questo script perl).

Framebuffer

  Usando i moduli matroxfb nei kernel 2.4. I kernel 2.2 non hanno in sé la funzionalità TVout, indi sono inutilizzabili per questo fine. Devi abilitare TUTTE le caratteristiche specifiche per matroxfb durante la compilazione (tranne MultiHead), e compilarle dentro ai moduli! Devi anche abilitare I2C e mettere gli strumenti matroxset, fbset e con2fb in un percorso eseguibile (path).

  1. Quindi carica nel kernel i moduli `matroxfb_Ti3026, matroxfb_maven, i2c-matroxfb, matroxfb_crtc2`. La tua console in modalità testo entrerà in modalità framebuffer (senza via di ritorno!).

  2. Dopodiché imposta il monitor e la TV come ti garba usando gli strumenti citati sopra.

  3. Evvai. L'operazione successiva è far sparire il cursore a blocco di tty1 (o quello che è) e disabilitare lo spegnimento dello schermo. Esegui i comandi seguenti:

         echo -e '\033[?25l'
         setterm -blank 0

     or

         setterm -cursor off
         setterm -blank 0

     Probabilmente vuoi mettere i suddetti in uno script e anche vuotare lo schermo. Per ripristinare il cursore:

         echo -e '\033[?25h'

     o

         setterm -cursor on

  4. Yeah kewl. Avvia la riproduzione del film con

         mplayer -vo mga -fs -screenw 640 -screenh 512 nomefile

     (se usi X, adesso passa alla matroxfb con per esempio Ctrl+Alt+F1.) Sostituisci `640` e `512` se imposti la risoluzione ad un'altra...

  5. Goditi la ultra-veloce ultra-accessoriata uscita TV Matrox (megli di Xv)!

Costruire un cavo per uscita TV-out Matrox. Nessuno si assume alcuna responsabilità, né risponde di alcuna danno causato da questa documentazione.

Cavo per G400. Il quarto pin del connettore CRTC2 è il segnale video composito. La terra sono il sesto, settimo e ottavo pin (informazioni fornite da Balázs Rácz).

Cavo per G450. Il primo pin del connettore CRTC2 è il segnale video composito. La terra sono il quinto, sesto, settimo e quindicesimo pin (5, 6, 7, 15) (informazioni fornite da Balázs Rácz).

### 4.20.2. Schede Matrox G450/G550

La gestione dell'uscita TV per queste schede è stata aggiunta solo recentemente e non è ancora nel kernel ufficiale. Attualmente il modulo mga_vid non può essere utilizzato, per quanto ne so, perché il driver G450/G550 funziona solo in una modalità: il primo chip CRTC (con molte più funzioni) sul primo schermo (sul monitor), e il secondo CRTC (niente BES - per chiarimenti su BES, vedi la sezione sopra sulla G400) sulla TV. Perciò per ora puoi usare solo il driver di uscita fbdev di MPlayer.

The first CRTC can't be routed to the second head currently. The author of the kernel matroxfb driver - Petr Vandrovec - will maybe make support for this, by displaying the first CRTC's output onto both of the heads at once, as currently recommended for G400, see the section above.

La patch necessaria per il kernel e l'HOWTO dettagliato sono scaricabili da http://www.bglug.ca/matrox_tvout/

### 4.20.3. Costruire un cavo per l'uscita TV Matrox

Nessuno si prende alcuna responsabilità, né garantisce per qualsiasi danno causato da questa documentazione.

Cavo per G400. Il quarto pin del connettore CRTC2 è il segnale video composito. La terra sono il sesto, settimo e ottavo pin. (informazioni fornite da Balázs Rácz)

Cavo per G450. Il primo pin del connettore CRTC2 è il segnale video composito. La terra sono il quinto, sesto, settimo e quindicesimo pin (5, 6, 7, 15). (informazioni fornite da Balázs Kerekes)

### 4.20.4. Schede ATI

PREAMBOLO. Attualmente ATI non vuole supportare alcuno dei suoi chip TV-out sotto Linux a causa della loro tecnologia Macrovision sotto licenza.

SITUAZIONE USCITA TV DELLE SCHEDE ATI IN LINUX

- ATI Mach64: supportata da GATOS.

- ASIC Radeon VIVO: supportata da GATOS.

- Radeon e Rage128: supportate da MPlayer! Controlla le sezioni driver VESA e VIDIX.

- Rage Mobility P/M, Radeon, Rage 128, Mobility M3/M4: supportate da atitvout.

Con le altre schede usa semplicemente il driver VESA senza VIDIX. Tuttavia ti serve una CPU potente.

Un'unica cosa ti serve fare - Assicurati di avere il connettore TV collegato prima di avviare il tuo PC dato che il BIOS video si inizializza solamente durante il passaggio POST.

### 4.20.5. nVidia

Per prima cosa, DEVI scaricare i driver proprietari a sorgenti chiusi da http://nvidia.com. Non sarà spiegato il processo di installazione e configurazione visto che non esula lo scopo di questa documentazione.

Dopo che XFree86, XVideo, e l'accelerazione 3D funzionano correttamente, modifica la sezione Device della tua scheda nel file `XF86Config`, secondo l'esempio seguente (adattalo alla tua scheda/TV):

    Section "Device"
            Identifier      "GeForce"
            VendorName      "ASUS"
            BoardName       "nVidia GeForce2/MX 400"
            Driver          "nvidia"
            #Option         "NvAGP" "1"
            Option          "NoLogo"
            Option          "CursorShadow"  "on"

            Option          "TwinView"
            Option          "TwinViewOrientation" "Clone"
            Option          "MetaModes" "1024x768,640x480"
            Option          "ConnectedMonitor" "CRT, TV"
            Option          "TVStandard" "PAL-B"
            Option          "TVOutFormat" "Composite"
    EndSection

Sicuramente la cosa importante è la parte TwinView.

### 4.20.6. NeoMagic

Il chip NeoMagic si trova in unìampia gamma di portatili, alcuni dei quali sono equipaggiati con un codificatore TV analogico semplice, alcuni ne hanno uno avanzato.

- E' stato riportato che si può ottenere un'uscita TV affidabile usando `-vo fbdev` o `-vo fbdev2`. Devi avere vesafb compilato nel kernel e passare i seguenti parametri sulla riga di avvio del kernel: `append="video=vesafb:ywrap,mtrr" vga=791`. Dovresti far partire X, poi passare alla modalità in console con per es. Ctrl+Alt+F1. Se non avvii X prima di lanciare MPlayer dalla console, il video diventa lento e frammentato (chiarimenti sono benvenuti). Collegati in console, poi lancia il comando seguente:

      clear; mplayer -vo fbdev -zoom -cache 8192 dvd://

  Ora dovresti vedere il filmato in console, che riempie circa la metà dello schermo LCD del tuo portatile. Per passare alla TV premi per tre volte Fn+F5. Provato su un Tecra 8000, kernel 2.6.15 con vesafb, ALSA v1.0.10.

- Chip di codifica Chrontel 70xx: Si trova negli IBM Thinkpad 390E e facilmente altri Thinkpad o portatili.

  Devi usare `-vo vesa:neotv_pal` per PAL o `-vo vesa:neotv_ntsc` per NTSC. Fornirà la funzione di uscita TV nelle modalità a 16 e 8 bpp seguenti:

  - NTSC 320x240, 640x480 e forse anche 800x600.

  - PAL 320x240, 400x300, 640x480, 800x600.

  La modalità 512x384 non è supportata dal BIOS. Per attivare l'uscita TV devi ridimensionare l'immagine a una risoluzione diversa. Se riesci a vedere un immagine sullo schermo a 640x480 o a 800x600 ma non a 320x240 o ad altre risoluzioni inferiori devi sostituire due tabelle in `vbelib.c`. Vedi la funzione vbeSetTV per i dettagli. In questo caso per favore contatta l'autore.

  Problemi conosciuti: solo VESA, non è implementato alcun controllo come luminosità, contrasto, livello del nero, filtro per lo sfarfallio.

# Capitolo 5. Ports

Binary packages of MPlayer are available from several sources. We have a list of places to get unofficial packages for various systems on our homepage. However, none of these packages are supported. Report problems to the authors, not to us.

## 5.1. Linux

### 5.1.1. Debian packaging

To build a Debian package, run the following command in the MPlayer source directory:

    fakeroot debian/rules binary

If you want to pass custom options to configure, you can set up the `DEB_BUILD_OPTIONS` environment variable. For instance, if you want GUI and OSD menu support you would use:

    DEB_BUILD_OPTIONS="--enable-gui --enable-menu" fakeroot debian/rules binary

You can also pass some variables to the Makefile. For example, if you want to compile with gcc 3.4 even if it's not the default compiler:

    CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui" fakeroot debian/rules binary

To clean up the source tree run the following command:

    fakeroot debian/rules clean

As root you can then install the `.deb` package as usual:

    dpkg -i ../mplayer_version.deb

### 5.1.2. RPM packaging

To build an RPM package, run the following command in the MPlayer source directory:

    FIXME: insert proper commands here

### 5.1.3. ARM Linux

MPlayer works on Linux PDAs with ARM CPU e.g. Sharp Zaurus, Compaq Ipaq. The easiest way to obtain MPlayer is to get it from one of the OpenZaurus package feeds. If you want to compile it yourself, you should look at the mplayer and the libavcodec directory in the OpenZaurus distribution buildroot. These always have the latest Makefile and patches used for building a SVN MPlayer. If you need a GUI frontend, you can use xmms-embedded.

## 5.2. *BSD

MPlayer runs on all known BSD flavors. There are ports/pkgsrc/fink/etc versions of MPlayer available that are probably easier to use than our raw sources.

If MPlayer complains about not finding `/dev/cdrom` or `/dev/dvd`, create an appropriate symbolic link:

    ln -s /dev/your_cdrom_device /dev/cdrom

To use Win32 DLLs with MPlayer you will need to re-compile the kernel with "`option USER_LDT`" (unless you run FreeBSD-CURRENT, where this is the default).

### 5.2.1. FreeBSD

If your CPU has SSE, recompile your kernel with "`options CPU_ENABLE_SSE`" (FreeBSD-STABLE or kernel patches required).

### 5.2.2. OpenBSD

Due to limitations in different versions of gas (relocation vs MMX), you will need to compile in two steps: First make sure that the non-native as is first in your `$PATH` and do a gmake -k, then make sure that the native version is used and do gmake.

As of OpenBSD 3.4 the hack above is no longer needed.

### 5.2.3. Darwin

See the Mac OS section.

## 5.3. Commercial Unix

MPlayer has been ported to a number of commercial Unix variants. Since the development environments on these systems tend to be different from those found on free Unixes, you may have to make some manual adjustments to make the build work.

### 5.3.1. Solaris

Solaris still has broken, POSIX-incompatible system tools and shell in default locations. Until a bold step out of the computing stone age is made, you will have to add `/usr/xpg4/bin` to your `PATH`.

MPlayer should work on Solaris 2.6 or newer. Use the SUN audio driver with the `-ao sun` option for sound.

On UltraSPARCs, MPlayer takes advantage of their VIS extensions (equivalent to MMX), currently only in `libmpeg2`, `libvo` and `libavcodec`. You can watch a VOB file on a 400MHz CPU. You'll need `mLib` installed.

Caveat:

- mediaLib is currently disabled by default in MPlayer because of brokenness. SPARC users who build MPlayer with mediaLib support have reported a thick, green-tint on video encoded and decoded with libavcodec. You may enable it if you wish with:

      ./configure --enable-mlib

  You do this at your own risk. x86 users should never use mediaLib, as this will result in very poor MPlayer performance.

On Solaris SPARC, you need the GNU C/C++ Compiler; it does not matter if GNU C/C++ compiler is configured with or without the GNU assembler.

On Solaris x86, you need the GNU assembler and the GNU C/C++ compiler, configured to use the GNU assembler! The MPlayer code on the x86 platform makes heavy use of MMX, SSE and 3DNOW! instructions that cannot be compiled using Sun's assembler `/usr/ccs/bin/as`.

The `configure` script tries to find out, which assembler program is used by your "gcc" command (in case the autodetection fails, use the `--as=`/wherever/you/have/installed/gnu-as`` option to tell the `configure` script where it can find GNU "as" on your system).

Solutions to common problems:

- Error message from `configure` on a Solaris x86 system using GCC without GNU assembler:

      % configure
      ...
      Checking assembler (/usr/ccs/bin/as) ... , failed
      Please upgrade(downgrade) binutils to 2.10.1...

  (Solution: Install and use a gcc configured with `--with-as=gas`)

  Typical error you get when building with a GNU C compiler that does not use GNU as:

      % gmake
      ...
      gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
          -fomit-frame-pointer  -I/usr/local/include   -o mplayer.o mplayer.c
      Assembler: mplayer.c
      "(stdin)", line 3567 : Illegal mnemonic
      "(stdin)", line 3567 : Syntax error
      ... more "Illegal mnemonic" and "Syntax error" errors ...

- MPlayer may segfault when decoding and encoding video that uses the win32codecs:

      ...
      Trying to force audio codec driver family acm...
      Opening audio decoder: [acm] Win32/ACM decoders
      sysi86(SI86DSCR): Invalid argument
      Couldn't install fs segment, expect segfault

      MPlayer interrupted by signal 11 in module: init_audio_codec
      ...

  This is because of a change to sysi86() in Solaris 10 and pre-Solaris Nevada b31 releases. This has been fixed in Solaris Nevada b32; however, Sun has yet to backport the fix to Solaris 10. The MPlayer Project has made Sun aware of the problem and a patch is currently in progress for Solaris 10. More information about this bug can be found at: http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6308413.

- Due to bugs in Solaris 8, you may not be able to play DVD discs larger than 4 GB:

  - The sd(7D) driver on Solaris 8 x86 has a bug when accessing a disk block >4GB on a device using a logical blocksize != DEV_BSIZE (i.e. CD-ROM and DVD media). Due to a 32Bit int overflow, a disk address modulo 4GB is accessed (http://groups.yahoo.com/group/solarisonintel/message/22516). This problem does not exist in the SPARC version of Solaris 8.

  - A similar bug is present in the hsfs(7FS) file system code (AKA ISO9660), hsfs may not not support partitions/disks larger than 4GB, all data is accessed modulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22592). The hsfs problem can be fixed by installing patch 109764-04 (SPARC) / 109765-04 (x86).

### 5.3.2. HP-UX

Joe Page hosts a detailed HP-UX MPlayer HOWTO by Martin Gansser on his homepage. With these instructions the build should work out of the box. The following information is taken from this HOWTO.

You need GCC 3.4.0 or later and SDL 1.2.7 or later. HP cc will not produce a working program, prior GCC versions are buggy. For OpenGL functionality you need to install Mesa and the gl and gl2 video output drivers should work, speed may be very bad, depending on the CPU speed, though. A good replacement for the rather poor native HP-UX sound system is GNU esound.

Create the DVD device scan the SCSI bus with:

    # ioscan -fn

    Class          I            H/W   Path          Driver    S/W State    H/W Type        Description
    ...
    ext_bus 1    8/16/5      c720  CLAIMED INTERFACE  Built-in SCSI
    target  3    8/16/5.2    tgt   CLAIMED DEVICE
    disk    4    8/16/5.2.0  sdisk CLAIMED DEVICE     PIONEER DVD-ROM DVD-305
                             /dev/dsk/c1t2d0 /dev/rdsk/c1t2d0
    target  4    8/16/5.7    tgt   CLAIMED DEVICE
    ctl     1    8/16/5.7.0  sctl  CLAIMED DEVICE     Initiator
                             /dev/rscsi/c1t7d0 /dev/rscsi/c1t7l0 /dev/scsi/c1t7l0
    ...

The screen output shows a Pioneer DVD-ROM at SCSI address 2. The card instance for hardware path 8/16 is 1.

Create a link from the raw device to the DVD device.

    ln -s /dev/rdsk/c<SCSI bus instance>t<SCSI target ID>d<LUN> /dev/<device>

Example:

    ln -s /dev/rdsk/c1t2d0 /dev/dvd

Below are solutions for some common problems:

- Crash at Start with the following error message:

      /usr/lib/dld.sl: Unresolved symbol: finite (code) from /usr/local/lib/gcc-lib/hppa2.0n-hp-hpux11.00/3.2/../../../libGL.sl

  This means that the function `.finite().` is not available in the standard HP-UX math library. Instead there is `.isfinite().`. Solution: Use the latest Mesa depot file.

- Crash at playback with the following error message:

      /usr/lib/dld.sl: Unresolved symbol: sem_init (code) from /usr/local/lib/libSDL-1.2.sl.0

  Solution: Use the extralibdir option of configure `--extra-ldflags="/usr/lib -lrt"`

- MPlayer segfaults with a message like this:

      Pid 10166 received a SIGSEGV for stack growth failure.
      Possible causes: insufficient memory or swap space, or stack size exceeded maxssiz.
      Segmentation fault

  Solution: The HP-UX kernel has a default stack size of 8MB(?) per process.(11.0 and newer 10.20 patches let you increase `maxssiz` up to 350MB for 32-bit programs). You need to extend `maxssiz` and recompile the kernel (and reboot). You can use SAM to do this. (While at it, check out the `maxdsiz` parameter for the maximum amount of data a program can use. It depends on your applications, if the default of 64MB is enough or not.)

### 5.3.3. AIX

MPlayer builds successfully on AIX 5.1, 5.2, and 5.3, using GCC 3.3 or greater. Building MPlayer on AIX 4.3.3 and below is untested. It is highly recommended that you build MPlayer using GCC 3.4 or greater, or if you are building on POWER5, GCC 4.0 is required.

CPU detection is still a work in progress. The following architectures have been tested:

- 604e

- POWER3

- POWER4

The following architectures are untested, but should still work:

- POWER

- POWER2

- POWER5

Sound via the Ultimedia Services is not supported, as Ultimedia was dropped in AIX 5.1; therefore, the only option is to use the AIX Open Sound System (OSS) drivers from 4Front Technologies at http://www.opensound.com/aix.html. 4Front Technologies freely provides OSS drivers for AIX 5.1 for non-commercial use; however, there are currently no sound output drivers for AIX 5.2 or 5.3. This means AIX 5.2 and 5.3 are not capable of MPlayer audio output, presently.

Solutions to common problems:

- If you encounter this error message from `./configure`:

      $ ./configure
      ...
      Checking for iconv program ... no
      No working iconv program found, use
      --charset=US-ASCII to continue anyway.
      Messages in the GTK-2 interface will be broken then.

  This is because AIX uses non-standard character set names; therefore, converting MPlayer output to another character set is currently not supported. The solution is to use:

      $ ./configure --charset=noconv

### 5.3.4. QNX

You'll need to download and install SDL for QNX. Then run MPlayer with `-vo sdl:driver=photon` and `-ao sdl:nto` options, it should be fast.

The `-vo x11` output will be even slower than on Linux, since QNX has only X emulation which is very slow.

## 5.4. Windows

Yes, MPlayer runs on Windows under Cygwin and MinGW. It does not have an official GUI yet, but the command line version is completely functional. You should check out the MPlayer-cygwin mailing list for help and latest information. Official Windows binaries can be found on the download page. Installer packages and simple GUI frontends are available from external sources, we have collected then in the Windows section of our projects page.

If you wish to avoid using the command line, a simple trick is to put a shortcut on your desktop that contains something like the following in the execute section:

    c:\path\to\mplayer.exe %1

This will make MPlayer play any movie that is dropped on the shortcut. Add `-fs` for fullscreen mode.

Best results are achieved with the native DirectX video output driver (`-vo directx`). Alternatives are OpenGL and SDL, but OpenGL performance varies greatly between systems and SDL is known to distort video or crash on some systems. If the image is distorted, try turning off hardware acceleration with `-vo directx:noaccel`. Download DirectX 7 header files to compile the DirectX video output driver. Furthermore you need to have DirectX 7 or later installed for the DirectX video output driver to work.

VIDIX now works under Windows as `-vo winvidix`, although it is still experimental and needs a bit of manual setup. Download dhahelper.sys or dhahelper.sys (with MTRR support) and copy it to the `vidix/dhahelperwin` directory in your MPlayer source tree. Open a console and type

    make install-dhahelperwin

as Administrator. After that you will have to reboot.

For best results MPlayer should use a colorspace that your video card supports in hardware. Unfortunately many Windows graphics drivers wrongly report some colorspaces as supported in hardware. To find out which, try

    mplayer -benchmark -nosound -frames 100 -vf format=colorspace movie

where `colorspace` can be any colorspace printed by the `-vf format=fmt=help` option. If you find a colorspace your card handles particularly bad `-vf noformat=`colorspace`` will keep it from being used. Add this to your config file to permanently keep it from being used.

There are special codec packages for Windows available on our download page to allow playing formats for which there is no native support yet. Put the codecs somewhere in your path or pass `--codecsdir=`c:/path/to/your/codecs`` (alternatively `--codecsdir=`/path/to/your/codecs`` only on Cygwin) to `configure`. We have had some reports that Real DLLs need to be writable by the user running MPlayer, but only on some systems (NT4). Try making them writable if you have problems.

You can play VCDs by playing the `.DAT` or `.MPG` files that Windows exposes on VCDs. It works like this (adjust for the drive letter of your CD-ROM):

    mplayer d:/mpegav/avseq01.dat

Alternatively, you can play a VCD track directly by using:

    mplayer vcd://<track> -cdrom-device d:

DVDs also work, adjust `-dvd-device` for the drive letter of your DVD-ROM:

    mplayer dvd://<title> -dvd-device d:

The Cygwin/MinGW console is rather slow. Redirecting output or using the `-quiet` option has been reported to improve performance on some systems. Direct rendering (`-dr`) may also help. If playback is jerky, try `-autosync 100`. If some of these options help you, you may want to put them in your config file.

### Nota

If you have a Pentium 4 and are experiencing a crash using the RealPlayer codecs, you may need to disable hyperthreading support.

### 5.4.1. Cygwin

You need to run Cygwin 1.5.0 or later in order to compile MPlayer.

DirectX header files need to be extracted to `/usr/include/` or `/usr/local/include/`.

Instructions and files for making SDL run under Cygwin can be found on the libsdl site.

### 5.4.2. MinGW

You need MinGW 3.1.0 or later and MSYS 1.0.9 or later. Tell the MSYS postinstall that MinGW is installed.

Extract DirectX header files to `/mingw/include/`.

MOV compressed header support requires zlib, which MinGW does not provide by default. Configure it with `--prefix=/mingw` and install it before compiling MPlayer.

Complete instructions for building MPlayer and necessary libraries can be found in the MPlayer MinGW HOWTO.

## 5.5. Mac OS

MPlayer does not work on Mac OS versions before 10, but should compile out-of-the-box on Mac OS X 10.2 and up. The preferred compiler is the Apple version of GCC 3.x or later. You can get the basic compilation environment by installing Apple's Xcode. If you have Mac OS X 10.3.9 or later and QuickTime 7 you can use the `corevideo` video output driver.

Unfortunately, this basic environment will not allow you to take advantage of all the nice features of MPlayer. For instance, in order to have OSD support compiled in, you will need to have `fontconfig` and `freetype` libraries installed on your machine. Contrary to other Unixes such as most Linux and BSD variants, OS X does not have a package system that comes with the system.

There are at least two to choose from: Fink and MacPorts. Both of them provide about the same service (i.e. a lot of packages to choose from, dependency resolution, the ability to simply add/update/remove packages, etc...). Fink offers both precompiled binary packages or building everything from source, whereas MacPorts only offers building from source. The author of this guide chose MacPorts for the simple fact that its basic setup was more lightweight. Later examples will be based on MacPorts.

For instance, to compile MPlayer with OSD support:

    sudo port install pkg-config

This will install pkg-config, which is a system for managing library compile/link flags. MPlayer's `configure` script uses it to properly detect libraries. Then you can install fontconfig in a similar way:

    sudo port install fontconfig

Then you can proceed with launching MPlayer's `configure` script (note the `PKG_CONFIG_PATH` and `PATH` environment variables so that `configure` finds the libraries installed with MacPorts):

    PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ PATH=$PATH:/opt/local/bin/ ./configure

### 5.5.1. MPlayer OS X GUI

You can get a native GUI for MPlayer together with precompiled MPlayer binaries for Mac OS X from the MPlayerOSX project, but be warned: that project is not active anymore.

Fortunately, MPlayerOSX has been taken over by a member of the MPlayer team. Preview releases are available from our download page and an official release should arrive soon.

In order to build MPlayerOSX from source yourself, you need the `mplayerosx`, the `main` and a copy of the `main` SVN module named `main_noaltivec`. `mplayerosx` is the GUI frontend, `main` is MPlayer and `main_noaltivec` is MPlayer built without AltiVec support.

To check out SVN modules use:

    svn checkout svn://svn.mplayerhq.hu/mplayerosx/trunk/ mplayerosx
    svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ main

In order to build MPlayerOSX you will need to set up something like this:

    MPlayer_source_directory
       |
       |--->main           (MPlayer Subversion source)
       |
       |--->main_noaltivec (MPlayer Subversion source configured with --disable-altivec)
       |
       \--->mplayerosx     (MPlayer OS X Subversion source)

You first need to build main and main_noaltivec.

To begin with, in order to ensure maximum backwards compatibility, set an environment variable:

    export MACOSX_DEPLOYMENT_TARGET=10.3

Then, configure:

If you configure for a G4 or later CPU with AltiVec support, do as follows:

    ./configure --disable-gl --disable-x11

If you configure for a G3-powered machine without AltiVec, use:

    ./configure --disable-gl --disable-x11 --disable-altivec

You may need to edit `config.mak` and change `-mcpu` and `-mtune` from `74XX` to `G3`.

Continue with

    make

then go to the mplayerosx directory and type

    make dist

This will create a compressed `.dmg` archive with the ready to use binary.

You can also use the Xcode 2.1 project; the old project for Xcode 1.x does not work anymore.

# Capitolo 6. Utilizzo base di MEncoder

Per la lista completa delle opzioni disponibili ed esempi per MEncoder, leggi per favore la pagina di manuale. Per una serie di esempi pronti all'uso e guide dettagliate sull'utilizzo di svariati parametri di codifica leggi le indicazioni per la codifica che sono stati selezionati da vari thread sulla mailing list MPlayer-users. Cerca qui negli archivi e soprattutto per cose più vecchie, anche qui per una buona serie di discussioni riguardanti tutti gli aspetti e i problemi relativi alla codifica con MEncoder.

## 6.1. Selezionare codec e formati contenitore

I codec audio e video per la codifica vengono selezionati rispettivamente con le opzioni `-oac` e `-ovc`. Esegui per esempio:

    mencoder -ovc help

per elencare tutti i codec video supportati dalla versione di MEncoder sul tuo sistema. Sono disponibili le scelte seguenti:

Codec audio:

Nome codec audio | Descrizione
--- | ---
mp3lame | codifica in MP3 VBR, ABR o CBR MP3 tramite LAME
lavc | usa uno dei codec audio di `libavcodec`
faac | codificatore audio FAAC AAC
toolame | codificatore MPEG Audio Layer 2
twolame | codificatore MPEG Audio Layer 2 basato su tooLAME
pcm | audio PCM non compresso
copy | non ricodifica, copia solo il flusso compresso

Codec video:

Nome codec video | Descrizione
--- | ---
lavc | usa uno dei codec video di `libavcodec`
xvid | Xvid, codec MPEG-4 Advanced Simple Profile (ASP)
x264 | x264, codec MPEG-4 Advanced Video Coding (AVC), AKA H.264
nuv | nuppel video, utilizzato da alcune applicazioni in tempo reale
raw | fotogrammi video non compressi
copy | non ricodifica, copia solo il flusso compresso
frameno | usato per codifica a 3 passaggi (non consigliato)

I formati contenitore di uscita si selezionano con l'opzione `-of`. Scrivi:

    mencoder -of help

per elencare tutti i contenitori supportati dalla versione di MEncoder sul tuo sistema. Sono disponibili le scelte seguenti:

Formati contenitore:

Nome formato contenitore | Descrizione
--- | ---
lavf | uno dei contenitori supportati da `libavformat`
avi | Audio-Video Interleaved
mpeg | MPEG-1 e MPEG-2 PS
rawvideo | flusso video grezzo (nessun mux - solo un flusso video)
rawaudio | flusso audio grezzo (nessun mux - solo un flusso audio)

Il contenitore AVI è il formato contenitore nativo per MEncoder, il che significa che è quello meglio gestito e quello per cui MEncoder è stato progettato. Come su specificato, si possono utilizzare altri formati contenitore, ma potresti avere qualche problema utilizzandoli.

Contenitori `libavformat`:

Se hai impostato `libavformat` per fare il mux del file di uscita (usando `-of lavf`), il giusto formato contenitore verrà determinato dall'estensione del file di uscita. Puoi forzare un formato contenitore specifico con l'opzione `format` di `libavformat`.

nome contenitore `libavformat` | Descrizione
--- | ---
mpg | MPEG-1 e MPEG-2 PS
asf | Advanced Streaming Format
avi | Audio-Video Interleaved
wav | Audio Waveform
swf | Macromedia Flash
flv | Macromedia Flash video
rm | RealMedia
au | SUN AU
nut | contenitore "aperto" NUT (sperimentale e non ancora spec-compliant)
mov | QuickTime
mp4 | formato MPEG-4
dv | contenitore Sony Digital Video
mkv | contenitore "aperto" audio/video Matroska

Come puoi notare, `libavformat` permette a MEncoder di fare il mux in una buona quantità di contenitori. Sfortunatamente, dato che MEncoder non è stato progettato dall'inizio per supportare formati contenitore diversi da AVI, dovresti essere piuttosto paranoici riguardo al file risultante. Assicurati per favore che la sincronizzazione audio/video sia a posto e che il file possa essere riprodotto correttamente da altri programmi oltre a MPlayer.

Esempio 6.1. codificare nel formato Macromedia Flash

Creare un video Macromedia Flash che sia riproducibile in un browser internet con il plugin Macromedia Flash:

    mencoder input.avi -o output.flv -of lavf \
        -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
        -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3

## 6.2. Selezionare il file in ingresso o il dispositivo

MEncoder può codificare da file o direttamente da un disco DVD o VCD. Includi semplicemente nella riga comando il nome file per codificare dal file stesso, oppure `dvd://``numero_titolo` o `vcd://``numero_traccia` per codificare da un titolo DVD o da una traccia VCD. Se hai già copiato un DVD sul tuo disco fisso (puoi usare uno strumento come dvdbackup, disponibile per la maggior parte dei sistemi) e desideri codificare da tale copia, dovresti ancora usare la sintassi `dvd://`, insieme con `-dvd-device` seguita dal percorso della radice del DVD copiato. Le opzioni `-dvd-device` e `-cdrom-device` possono anche essere usate per reimpostare i percorsi dei dispositivi al fine di leggere direttamente dal disco, se i valori di default `/dev/dvd` e `/dev/cdrom` non funzionano sul tuo sistema.

Durante la codifica da DVD, spesso si vogliono selezionare un capitolo o una serie di capitoli da codificare. Per questo fine puoi usare l'opzione `-chapter`. Per esempio, `-chapter` `1-4` codificherà solo i capitoli dall'1 al 4 dal DVD. Questo è particolarmente utile se vuoi fare una codifica in 1400 MB destinata a due CD, visto che puoi esser sicuro che il punto di divisione sia proprio tra un capitolo e l'altro invece che a metà di una scena.

Se hai una scheda di acquisizione TV supportata, puoi anche codificare dal dispositivo di ingresso TV. Usa `tv://``numero_canale` come nome file e `-tv` per configurare varie opzioni di acquisizione. L'ingresso DVB funziona in modo simile.

## 6.3. Codificare MPEG-4 ("DivX") in due passaggi

La definizione viene dal fatto che questo metodo codifica il file due volte. La prima codifica (dubbed pass) genera alcuni file temporanei (`*.log`) con una dimensione di pochi megabyte, non cancellarli dopo il primo passaggio (puoi cancellare l'AVI o meglio ancora non creare alcun video ridirezionandolo verso `/dev/null` o verso `NUL` sotto Windows). Nel secondo passaggio viene creato il secondo file di output, usando i dati del bitrate presi dai file temporanei. Il file risultante avrà una qualità dell'immagine decisamente migliore. Se questa è la prima volta che senti parlare di quasta cosa ti conviene leggere qualcuna delle guide disponibili su internet.

Esempio 6.2. copiare la traccia audio

La codifica in due passaggi della seconda traccia di un DVD in un AVI MPEG-4 ("DivX") copiando la traccia audio.

    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -oac copy -o output.avi

Esempio 6.3. codificare la traccia audio

La codifica in due passaggi della seconda traccia di un DVD in un AVI MPEG-4 ("DivX") codificando la traccia audio in MP3. Fai attenzione se usi questo metodo, dato che in alcuni casi può portare desincronizzazione audio/video.

    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -oac mp3lame -lameopts vbr=3 -o /dev/null
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -oac mp3lame -lameopts vbr=3 -o output.avi

## 6.4. Codificare nel formato video per Sony PSP

MEncoder fornisce la codifica in formato video Sony PSP, ma, relativamente alla revisione del software PSP, i vincoli possono essere diverse. Dovresti accertarti di rispettare i seguenti vincoli:

- Bitrate: non dovrebbe oltrepassare i 1500kbps, tuttavia, versioni precedenti supportavano quasi ogni frequenza a patto che l'intestazione non dicesse che era troppo alta.

- Dimensioni: la larghezza e l'altezza del video PSP dovrebbero essere multipli di 16 e il prodotto larghezza * altezza dovrebbe essere <= 64000. In alcune circostanze, potrebbe essere possibile che la PSP riproduca risoluzioni più grandi.

- Audio: la frequenza dovrebbe essere 24kHz per video MPEG-4, e 48kHz per H.264.

Esempio 6.4. codificare per PSP

    mencoder -ofps 30000/1001 -af lavcresample=24000 -vf harddup -oac lavc \
        -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=libfaac \
        -of lavf -lavfopts format=psp \
        input.video -o output.psp

Nota che puoi impostare il titolo del video con `-info name=`TitoloFilmato``.

## 6.5. Codificare in formato MPEG

MEncoder può generare file nel formato di output MPEG (MPEG-PS). Di solito, quando stai usando video MPEG-1 o MPEG-2, è perché stai codificando per un formato vincolato come SVCD, VCD, o DVD. Le richieste specifiche per questi formati sono spiegate nella sezione creazione di VCD e DVD.

Per modificare il formato file di uscita di MEncoder, usa l'opzione `-of mpeg`.

Esempio:

    mencoder input.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \
        -oac copy altre_opzioni -o output.mpg

Creare un file MPEG-1 che possa essere riprodotto da sistemi con un supporto multimediale minimale, come l'installazione di default di Windows:

    mencoder input.avi -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \
        -o output.mpg -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
        -lavcopts vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3

Lo stesso, ma usando il muxer MPEG di `libavformat`:

    mencoder input.avi -o VCD.mpg -ofps 25 -vf scale=352:288,harddup -of lavf \
        -lavfopts format=mpg -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
        -lavcopts vcodec=mpeg1video:vrc_buf_size=327:keyint=15:vrc_maxrate=1152:vbitrate=1152:vmax_b_frames=0

### Consiglio:

Se per qualche motivo la qualità video del secondo passaggio non ti soddisfa, puoi rilanciare la tua codifica video con un diverso bitrate di uscita, sempre che tu abbia tenuto i file con le statistiche del passaggio precedente. Questo è possbilie dato che l'obiettivo principale del file delle statistiche è registrarsi la complessità di ciascun frame, che non dipende direttamente dal bitrate. Dovresti tuttavia essere consapevole che otterrai i risultati migliori se tutti i passaggi sono eseguiti con bitrate non troppo diversi tra loro.

## 6.6. Ridimensionare filmati

Spesso emerge la necessità di ridimensionare le immagini del filmato. Le ragioni possono essere molte: diminuire la dimensione del file, la banda di rete, etc... Molte persone ridimensionano anche quando convertono DVD o CVD in AVI DivX. Se desideri ridimensionare, leggi la sezione Preservare il rapporto di aspetto.

Il processo di ridimensionamento è gestito dal filtro video `scale`: `-vf scale=`larghezza`:`altezza``. La sua qualità può essere impostata con l'opzione `-sws`. Se non è specificato, MEncoder userà 2: bicubico.

Uso:

    mencoder input.mpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
        -vf scale=640:480 -o output.avi

## 6.7. Copia dei flussi

MEncoder può gestire i flussi in ingresso in due modi: codifica o copia. Questa sezione tratta la copia.

- Flussi video (opzione `-ovc copy`): si possono fare delle cose carine :) Come infilare (senza converzione!) video FLI o VIVO o MPEG-1 in un file AVI! Di sicuro solo MPlayer può riprodurre file siffatti :) E probabilmente non ha alcuna utilità. Razionalmente: la copia dei flussi video può essere utile per esempio quando si deve codificare solo il flusso audio (come da PCM non compresso a MP3).

- Flussi audio (opzione `-oac copy`): direttamente. E' possibile prendere un file audio esterno (MP3, WAV) e farne il mux nel flusso di uscita. Usa l'opzione `-audiofile `nomefile`` per farlo.

Usare `-oac copy` per copiare da un formato contenitore ad un altro potrebbe richiedere l'utilizzo di `-fafmttag` per conservare l'etichetta del formato audio del file di partenza. Per esempio, se stai convertendo un file NSV con audio AAC a un contenitore AVI, l'etichetta del formato audio sarà sbagliata e bisognerà modificarla. Per una lista delle etichette dei formati audio, controlla `codecs.conf`.

Esempio:

    mencoder input.nsv -oac copy -fafmttag 0x706D \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o output.avi

## 6.8. Codificare file immagine multipli (JPEG, PNG, TGA, etc.)

MEncoder è in grado di creare filmati da uno o più file immagine JPEG, PNG, TGA o altri. Con una semplioce copia fotogrammi può creare file MJPEG (Motion JPEG), MPNG (Motion PNG) o MTGA (Motion TGA).

Spiegazione del processo:

1. MEncoder decodifica le immagini in entrata con `libjpeg` (decodificando PNG, userà `libpng`).

2. MEncoder passa poi le immagini decodificate al compressore video scelto (DivX4, Xvid, FFmpeg msmpeg4, etc.).

Esempi. La spiegazione dell'opzione `-mf` è nella pagina man.

Creare un file MPEG-4 da tutti i file JPEG nella directory corrente:

    mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \
        -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

Creare un file MPEG-4 da alcuni file JPEG nella directory corrente:

    mencoder mf://frame001.jpg,frame002.jpg -mf w=800:h=600:fps=25:type=jpg \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

Creare un file MPEG-4 da una lista definita di file JPEG (lista.txt nella directory corrente contiene la lista dei file da usare come sorgente, uno per riga):

    mencoder mf://@lista.txt -mf w=800:h=600:fps=25:type=jpg \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

Puoi mescolare diversi tipi di immagine, senza considerare il metodo che usi — nomi file singoli, wildcard o file da una lista — posto ovviamente che abbiano la stessa dimensione. Per cui puoi per es. prendere il fotogramma dei titoli da un file PNG e poi fare una presentazione delle tue foto in JPEG.

Creare un file Motion JPEG (MJPEG) da tutti i file JPEG nella directory corrente:

    mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc copy -oac copy -o output.avi

Creare un file non compresso da tutti i file PNG nella directory corrente:

    mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -o output.avi

### Nota

La larghezza deve essere un intero multipli di 4, è una limitazione del formato grezzo RAW RGB AVI.

Creare un file Motion PNG (MPNG) da tutti i file PNG nella directory corrente:

    mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc copy -oac copy -o output.avi

Creare un file Motion TGA (MTGA) da tutti i file TGA nella directory corrente:

    mencoder mf://*.tga -mf w=800:h=600:fps=25:type=tga -ovc copy -oac copy -o output.avi

## 6.9. Estrarre sottotitoli DVD in un file VOBsub

MEncoder è in grado di estrarre i sottotitoli da un DVD in file formattati VOBsub. Essi sono composti da una coppia di file che terminano in `.idx` e `.sub` e sono solitamente compressi in un singolo archivio `.rar`. MPlayer può riprodurli con le opzioni `-vobsub` e `-vobsubid`.

Specifica il nome di base (per es. senza l'estensione `.idx` o `.sub`) del file di uscita con `-vobsubout` e l'indice per questo sottotitolo nel file risultante con `-vobsuboutindex`.

Se i dati in entrata non arrivano da un DVD usa `-ifo` per indicare il file `.ifo` che serve per costruire il risultante file `.idx`.

Se i dati in entrata non arrivano da un DVD e non hai il file `.ifo` dovrai usare l'opzione `-vobsubid` per impostare l'id della lingua da scrivere nel file `.idx`.

Se esistono già i file `.idx` e `.sub` ogni esecuzione aggiungerà il sottotitolo selezionato. Perciò dovresti cancellarli prima di iniziare.

Esempio 6.5. Copiare due sottotitoli da un DVD durante la codifica in due passaggi

    rm sottotitoli.idx sottotitoli.sub
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -vobsubout sottotitoli -vobsuboutindex 0 -sid 2
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -vobsubout sottotitoli -vobsuboutindex 1 -sid 5

Esempio 6.6. Copiare i sottotitoli francesi da un file MPEG

    rm sottotitoli.idx sottotitoli.sub
    mencoder film.mpg -ifo film.ifo -vobsubout sottotitoli -vobsuboutindex 0 \
        -vobsuboutid fr -sid 1 -nosound -ovc copy

## 6.10. Preservare il rapporto di aspetto

I file dei DVD e dei VCD (per es. MPEG-1/2) contengono un valore del rapporto d'aspetto che instruisce il riproduttore su come ridimensionare il flusso video, così gli umani non avranno teste a uovo (es.: 480x480 + 4:3 = 640x480). Tuttavia, codificando in file AVI (DivX), devi fare attenzione che l'intestazione AVI non salva questo valore. Ridimensionare il film è disgustoso e una perdita di tempo, ci deve essere un modo migliore!

C'è

MPEG-4 ha un caratteristica unica: il flusso video può contenere il rapporto di aspetto che serve. Sì, proprio come i MPEG-1/2 (DVD, SVCD) e H.263. Tristemente, ci sono pochi riproduttori oltre ad MPlayer che gestiscono questo attributo MPEG-4.

Questa caratteristica può essere usata solo con il codec `mpeg4` di `libavcodec`. Ricorda: anche se MPlayer riprodurrà correttamente il file generato, altri riproduttori potrebbero usare il rapporto di aspetto sbagliato.

Devi assolutamente tagliare le bande nere sopra e sotto all'immagine del film. Vedi la pagina man per l'utilizzo dei filtri `cropdetect` e `crop`.

Uso

    mencoder svcd-di-esempio.mpg -vf crop=714:548:0:14 -oac copy -ovc lavc \
        -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o output.avi

# Capitolo 7. La codifica con MEncoder

## 7.1. Produrre un rip di un film da DVD in un MPEG-4 ("DivX") di alta qualità

Una domanda frequente è "Come posso generare il rip con la migliore qualità per una dimensione data?". Un'altra domanda è "Come posso fare il rip da DVD migliore in assoluto? Non mi interessa la dimensione del file, voglio solo la più alta qualità."

L'ultima domanda è perlomeno forse posta malamente. Dopo tutto, se non ti interessa la dimensione del file, perché non ti copi semplicemente l'intero flusso video MPEG-2 dal DVD? Certo, avrai un AVI di 5GB, prendere o lasciare, ma se vuoi la miglior qualità e non ti importa della dimensione, è sicuramente la scelta migliore.

Invero, la ragione per cui vuoi codificare un DVD in MPEG-4 è proprio perché ti interessa davvero la dimensione del file.

E' difficile offrire una ricetta da libro su come generare un rip da DVD in qualità molto alta. Bisogna considerare vari fattori, e dovresti comprendere questi dettagli, altrimenti alla fine probabilmente sarai insoddisfatto del risultato. Più sotto evidenziamo alcuni di questi argomenti e poi passiamo ad esaminare un esempio. Partiamo dal principio che per codificare il video tu stia usando `libavcodec` anche se la teoria si applica allo stesso modo agli altri codec.

Se questo ti sembra troppo, dovresti probabilmente usare una delle belle interfacce elencate nella sezione su MEncoder nella pagina dei progetti collegati (related projects). In tal modo riuscirai ad ottenere rip di alta qualità senza pensarci troppo, dato che la maggior parte di questi strumenti sono progettati per prendere decisioni sagge al tuo posto.

### 7.1.1. Prepararsi alla codifica: identificare il materiale sorgente e la frequenza fotogrammi (framerate)

Prima ancora di pensare a codificare un film, devi fare alcuni passi preliminari.

Il primo e più importante passo prima della codifica dovrebbe essere determinare il tipo di contenuto che stai trattando. Se il tuo materiale di partenza arriva da un DVD o da TV in broadcast/via cavo/satellite, sarà salvato in uno dei due formati: NTSC per il Nord America e il Giappone, PAL per l'Europa, etc... E' importante tuttavia comprendere che questo è solo il formato per la trasmissione in televisione, e spesso non corrisponde al formato originario del film. L'esperienza insegna che il materiale NTSC è molto più difficile da codificare, perché ci sono più elementi da identificare nel sorgente. Per generare una codifica adeguata, devi sapere il formato originario. Il non tenerne conto porterà a molti __flaws__ nella tua codifica, inclusi artefatti orrendi __combing__ (interlacing) e fotogrammi duplicati o addirittura perduti. Oltre ad essere brutti, gli artefatti influenzano negativamente l'efficienza della codifica: otterrai una peggior qualità a parità di bitrate.

#### 7.1.1.1. Identificare la frequenza fotogrammi (framerate) del sorgente

C'è qui un elenco di tipi comuni di materiale sorgente, dove facilmente si trovano e le loro proprietà:

- Film standard: prodotti per la visione su schermi da cinema a 24fps.

- Video PAL: registrati con una videocamera PAL a 50 campi al secondo. Un campo è composto dalle sole linee pari o dispari di un fotogramma. La televisione è stata progettata per aggiornarle alternativamente come un metodo economico di compressione analogica. L'occhio umano teoricamente compensa la cosa, ma una volta che capisci come funziona l'interlacciatura imparerai a vederla anche in TV e non ti piacerà più la TV. Due campi non fanno un fotogramma intero, poiché sono registrati a 1/50 di secondo di distanza nel tempo e quindi non si allineano a meno che non ci sia movimento alcuno.

- Video NTSC: registrati con una videocamera NTSC a 60000/1001 campi al secondi, o 60 campi al secondo nell'era precedente al colore. Per il resto sono simili ai PAL.

- Animazione: solitamente disegnati a 24fps, ma se ne trovano anche in tipologie con frequenza di fotogrammi mista.

- Computer Graphics (CG): possono essere con qualsiasi frequenza di fotogrammi, ma alcuni sono più comuni di altri; sono tipici 24 e 30 fotogrammi al secondo per NTSC e 25fps per PAL.

- Vecchi Film: varie e più basse frequenze di fotogrammi.

#### 7.1.1.2. Identificare il materiale sorgente

I film composti da fotogrammi sono indicati come "progressivi", mentre quelli composti da campi indipendenti sono chiamati "interlacciati" o video - anche se quest'ultimo termine è ambiguo.

Per complicare ulteriormente le cose, alcuni film possono essere un misto di molti dei suddetti.

La più importante distinzione da farsi tra tutti questi formati è che alcuni sono basati su fotogrammi mentre gli altri sono basati su campi. Ogniqualvolta un film viene preparato per la visualizzazione in televisione (DVD inclusi), viene convertito in un formato basato su campi. I vari metodi con cui si può fare sono conosciuti nel loro insieme come "telecine", di cui il tristemente famoso "3:2 pulldown" NTSC è una tipologia. A meno che il materiale originale sia anch'esso basato su campi (e con la stessa frequenza di campi) otterrai un filmato in un formato diverso da quello che è in origine.

Ci sono vari tipi usuali di "pulldown":

- Pulldown PAL 2:2: il più bello di tutti. Ciascun fotogramma viene mostrato per la durata di due campi, estraendo le linee pari e dispari e mostrandole alternativamente. Se il materiale di origine è a 24fps questo processo velocizza il filmato del 4%.

- Pulldown PAL 2:2:2:2:2:2:2:2:2:2:2:3: Ogni dodicesimo fotogramma viene mostrato per la durata di tre campi, invece che solamente per due. Questo evita il problema dell'aumento del 4% di velocità, ma rende il processo molto più difficile da __reversare__. Solitamente viene usato nelle produzioni musicali, dove modificare del 4% la velocità rovinerebbe pesantemente la colonna sonora.

- Telecine NTSC 3:2: i fotogrammi vengono mostrati alternativamente per la durata di 3 o 2 campi. Questo porta ad una frequenza di campi di 2.5 volte la frequenza orginaria. Il risultato viene anche leggermente rallentato da 60 campi al secondo fino a 60000/1001 campi al secondo, per mantenere la frequenza dei campi di NTSC.

- Pulldown NTSC 2:2: utilizzato per mostrare materiale a 30fps su NTSC. Carino, proprio come il pulldown PAL 2:2.

Ci sono anche alcuni metodi per convertire tra video NTSC e PAL, ma gli arogmenti relativi non sono obiettivo di questa guida. Se ti trovi di fronte a un film di questo genere e lo vuoi codificare, la tua scelta migliore è cercarne una copia nel formato originale. La conversione tra questi due formati è altamente distruttiva e non può essere __reversed__ in maniera pulita, perciò la tua codifica __soffrirà__ molto se eseguita da una sorgente convertita.

Quando il video viene salvato du un DVD, coppie consecutive di campi sono raggruppati in un fotogramma, anche se non sono pensati per esser mostrati nello stesso momento. Lo standard MPEG-2 usato sui DVD e per la TV digitale fornisce un modo sia per codificare i fotogrammi progressivi originali, che uno per memorizzare nell'intestazione del fotogramma il numero dei campi per cui il fotogramma stesso debba essere mostrato. Se viene usato questo metodo il filmato verrà spesso indicato come "soft telecine", visto che il procedimento indica semplicemente al lettore DVD di applicare il pulldown al film, invece che modificare il film stesso. Questa situazione è decisamente preferibile, dato che può essere facilmente __reversed__ (__actually ignored__) dal condificatore, e dato che mantiene la massima qualità. Tuttavia, molti studi di produzione DVD e di trasmissione non usano tecniche di codifica appropriate, ma al contrario producono filmati con "hard telecine", in cui i campi sono sotanzialmente duplicati nell'MPEG-2 codificato.

Le modalità per gestire questi casi verranno descritte più avanti in questa guida. Per adesso ti lasciamo alcune indicazioni su come identificare il tipo di materiale che stai trattando:

Regioni NTSC:

- Se MPlayer dice che la frequenza fotogrammi passa a 24000/1001 durante la visione del film e non ritorna come prima, è quasi sicuramente un qualche contenuto progressivo che è stato modificato in "soft telecine".

- Se MPlayer dice che la frequenza fotogrammi va avanti e indietro tra 24000/1001 e 30000/1001 e ogni tanto vedi delle "righe", allora ci sono varie possibilità. Le parti a 24000/1001 fps sono quasi certamente contenuto progressivo, in "soft telecine", ma le parti a 30000/1001 fps possono essere sia contenuto in "hard telecine" a 24000/1001 fps che video NTSC a 60000/1001 campi al secondo. Usa le stesse linee guida dei due casi seguenti per determinare quale.

- Se MPlayer non mostra mai una modifica alla frequenza dei fotogrammi e ogni singolo fotogramma con del movimento appare "rigato", il tuo filmato è video NTSC a 60000/1001 campi al secondo.

- Se MPlayer non mostra mai una modifica alla frequenza dei fotogrammi e due fotogrammi ogni cinque sono "rigati", il tuo film è contenuto a 24000/1001fps in "hard telecine".

Regioni PAL:

- Se non vedi mai alcuna "riga", il tuo film è pulldown 2:2.

- Se vedi delle "righe" che vanno e vengono ogni mezzo secondo, allora il tuo film è pulldown 2:2:2:2:2:2:2:2:2:2:2:3.

- Se vedi sempre "righe" durante il movimento, allora il tuo film è video PAL a 50 campi al secondo.

### Consiglio:

MPlayer può rallentare la riproduzione del film con l'opzione -speed o riprodurlo fotogramma per fotogramma. Prova ad usare `-speed` 0.2 per guardare molto lentamente il film o premi ripetutamente il tasto "." per riprodurre un fotogramma per volta ed identificare la sequenza, se non riesci a vederla a velocità normale.

### 7.1.2. Quantizzatore costante vs. multipassaggio

E' possibile codificare il filmato in un'ampia gamma di qualità. Con i codificatori video moderni e un pelo di compressione pre-codec (ridimensionando e ripulendo), è possibile raggiungere una qualità molto buona in 700 MB, per un film di 90-110 minuti in widescreen. Inoltre tutti i film tranne i più lunghi possono essere codificati con una qualità pressoché perfetta in 1400 MB.

Ci sono tre approcci per codificare il video: bitrate costante (CBR), quantizzatore costante, e multipassaggio (ABR, o bitrate medio).

La complessità dei fotogrammi di un filmato, e di conseguenza il numero di bit necessari per comprimerli, può variare molto da una scena ad un'altra. I codificatori video moderni possono adattarsi via via a queste necessità e cambiare il bitrate. In modalità semplici come CBR, tuttavia, i codificatori non sanno il bitrate necessario alle scene venture e perciò non possono stare sopra al bitrate richiesto per lunghi periodi di tempo. Modalità più avanzate, come la codifica in multipassaggio, possono tener conto delle statistiche del passo precedente; questo corregge il problema suddetto.

### Nota:

La maggior parte dei codec che gestisce la codifica in ABR può usare solo la codifica a due passaggi mentre altri come `x264`, `Xvid` e `libavcodec` gestiscono il multipassaggio, che migliora leggermente la qualità ad ogni passo, anche se tale moglioramento non è più misurabile né visibile veramente oltre il quarto passo o giù di lì. Perciò in questa sezione due passaggi e multipassaggio avranno lo stesso significato.

In ambedue i modi, il codec video (come `libavcodec`) spezza il fotogramma video in macroblocchi da 16x16 pixel e poi applica un quantizzatore a ciascun macroblocco. Più basso è il quantizzatore, migliore sarà la qualità e più alto il bitrate. Il metodo usato dal codificatore del filmato per determinare quale quantizzatore utilizzare per un dato macroblocco varia ed è altamente configurabile. (Questa è una semplificazione estrema del vero processo, ma il concetto di base è comodo per capire.)

Quando specifichi un bitrate constante, il codec video codificherà il video, scartando dettagli tanto quanto è necessario e il meno possibile, in modo da rimanere al di sotto del bitrate voluto. Se non ti interessa davvero la dimensione del file, potresti anche usare CBR e specificare un bitrate infinito. (In pratica, questo significa un valore abbastanza alto da non porre limiti, come 10000Kbit.) Con nessun limite sul bitrate, il risultato è che il codec userà il quantizzatore più basso possibile per ciascun macroblocco (come specificato da `vqmin` per `libavcodec`, che è 2 di default). Appena specifichi un bitrate abbastanza basso tale che il codec venga forzato ad utilizzare un quantizzatore più alto, allora stai sicuramente diminuendo la qualità del tuo video. Per evitarlo, dovresti probabilmente ridurre la dimensione del tuo video, seguendo il metodo descritto più avanti in questa guida. In generale dovresti evitare del tutto CBR se ti interessa la qualità.

Con il quantizzatore costante, il codec utilizza lo stesso quantizzatore per ogni macroblocco, come specificato dall'opzione `vqscale` (per `libavcodec`). Se vuoi la più alta qualità possibile di rip, sempre ignorantdo il bitrate, puoi usare `vqscale=2`. Ciò porterà gli stessi bitrate e PSNR (peak signal-to-noise ratio) come CBR con `vbitrate`=infinito e `vqmin` di default a 2.

Il problema con la quantizzazione costante è che usa il quantizzatore indicato sia che il macroblocco ne abbia bisogno o no. Perciò è possibile che venga usato un quantizzatore più alto su un macroblocco senza sacrificare la qualità visiva. Perché sprecare i bit di un quantizzatore basso che non serve? La tua CPU ha tanti cicli fin quando c'è tempo, ma c'è solo un certo numero di bit sul tuo disco rigido.

Con una codifica a due passi, il primo codificherà il filmato come se fosse CBR, ma manterrà una registrazione delle caratteristiche di ogni fotogramma. Questi dati sono poi utilizzati durante il secondo passo in modo da effettuare scelte intelligenti su quale quantizzatore usare. Durante le scene con azione veloce o molti dettagliate, verrano usati più probabilmente quantizzatori più alti, e durante scene lente o con pochi dettagli, verranno usati quantizzatori più bassi. Solitamente è molto più importante la quantità di movimento che la quantità di dettagli.

Se usi `vqscale=2`, allora stai sprecando dei bit. Se usi `vqscale=3`, allora non stai ottenendo la miglior qualità. Supponi di rippare un DVD a `vqscale=3` e che il risultato sia 1800Kbit. Se fai una codifica a due passi con `vbitrate=1800` il video risultante avrà una qualità superiore a parità di bitrate.

Dato che ora sei convinto che i due passaggi siano la strada da percorrere, la vera domanda adesso è quale bitrate usare? La risposta à che non c'è una risposta definitiva. Idealmente vuoi scegliere un bitrate che porti al miglior equilibrio tra qualità e dimensione del file. Tutto ciò varia in dipendenza del video di origine.

Se la dimensione non è importante, un buon punto di partenza per un rip di qualità molto elevata è intorno a 2000Kbit più o meno 200Kbit. Per video con scene di azione veloce o con molti dettagli, oppure se semplicemente hai l'occhio critico, potresti scegliere 2400 o 2600. Per alcuni DVD potresti non notare alcuna differenza a 1400Kbit. Sperimentare con alcune scene a vari bitrate è una buona idea per farsi un'opinione.

Se punti a una data dimensione, dovrai calcolare il bitrate in un qualche modo. Prima di farlo, però, devi sapere quanto spazio devi riservare per la traccia (le tracce) audio, per cui devi dapprima fare il rip di queste. Puoi calcolare il bitrate con l'equazione che segue: `bitrate = (dimensione_voluta_in_Mbytes - dimensione_audio_in_Mbytes) * 1024 * 1024 / lunghezza_in_secondi * 8 / 1000` Per esempio, per far stare un film di due ore su un CD da 702MB, con 60MB di traccia audio, il bitrate video diventerà: `(702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 = 740kbps`

### 7.1.3. Vincoli per una codifica efficiente

A causa della natura del tipo di compressione MPEG, ci sono alcuni vincoli da seguire per avere la massima qualità. L'MPEG divide il video in quadrati da 16x16 chiamati macroblocchi, ciascuno di essi composto da blocchi 4x4 con informazioni sulla luminanza (intensità) e due blocchi da 8x8 a metà risoluzione per la crominanza (colore) (uno per l'asse rosso-ciano e l'altro per l'asse blu-giallo). Anche se la larghezza e l'altezza del tuo filmato non sono multipli di 16 il codificatore userà tanti macroblocchi 16x16 in modo da coprire tutta la superficie dell'immagine, e lo spazio in esubero sarà sprecato. Indi, per migliorare la qualità a una dimensione prefissata è una brutta idea utilizzare dimensioni che non siano multiple di 16.

La maggior parte dei DVD ha anche alcune con bordi neri sui lati. Lasciarli lì avrà un'influenza molto negativa sulla qualità in svariati modi.

1. Il tipo di compressione MPEG è pesantemente dipendente dalle trasformazioni di dominio frequenti, in particolare la "trasformazione discreta del coseno" (Discrete Cosine Transform (DCT)), che xxièe' simile alla trasformazione di Fourier. Quest'approccio di codifica è efficiente nella rappresentazione di motivi e transizioni delicate, ma trova difficoltà con spigoli più definiti. Per codificarli deve usare molti più bit oppure apparirà un artefatto conosciuto come 'ringing'.

   La trasformazione di frequenza (DCT) prende luogo separatemente in ogni macroblocco (praticamente in ogni blocco) perciò questo problema si applica solo quando lo spigolo definito è dentro a un blocco. Se il bordo nero inizia esattamente sul lato di un multiplo di 16, questo non e' un problema. Tuttavia i bordi neri sui DVD difficilmente sono ben allineati, perciò nella realtà dovrai sempre tagliarli via per evitare questi problemi.

Oltre alle trasformazioni del dominio di frequenza, il tipo di compressione MPEG usa dei vettori di movimento per rappresetare le variazioni da un fotogramma al successivo. Naturalmente i vettori di movimento funzionano molto meno bene per i nuovi contenuti che arrivano dai bordi dell'immagine, dato che non erano presenti nel fotogramma precedente. Fintanto che l'immagine arriva fino al bordo dell'area codificata, i vettori di movimento non incontrano alcun problema con li contenuto che esce dall'immagine. Tuttavia ci possono esser problemi quando ci sono dei bordi neri:

2. Per ogni macroblocco il tipo di compressione MPEG memorizza un vettore, che identifica quale parte del fotogramma precedente debba essere copiata nel macroblocco stesso, come base per predire il fotogramma successivo. Serve codificare solo le differenze restanti. Se un macroblocco oltrepassa il bordo dell'immagine e contiene parte del bordo nero, allora i vettori di movimento provenienti da altre zone dell'immagine ricopriranno il bordo nero. Questo significa che si devono utilizzare molti bit o per riannerire il bordo che è stato ricoperto, oppure (più verosimilmente) un vettore di movimento non sarà proprio usato e tutti i cambiamenti in questo macroblocco dovranno venir esplicitamente codificate. In un modo o nell'altro si ricuce di gran lunga l'efficienza della codifica.

   Inoltre questo problema si applica solo se i bordi neri non sono allinati su limiti di multipli di 16.

3. Immagina infine di avere un macroblocco all'interno dell'immagine, ed un oggetto che passa da questo blocco verso il bordo dell'immagine. La codifica MPEG non può dire "copia la parte che è dentro all'immagine, ma non il bordo nero". Perciò anche il bordo nero vi verrà copiato all'interno, e molti bit saranno sprecati codificando l'immagine che si suppone stia lì.

   Se l'immagine arriva al limite della superficie codificata, l'MPEG ha una particolare ottimizzazione che consta nel copiare ripetutamente i pixel sul bordo dell'immagine quando un vettore di movimento arriva dall'esterno della superficie codificata. Questa funzionalità diventa inutile quando il film ha dei bordi neri. Diversamente dai problemi 1 e 2, allineare i bordi a multipli di 16 in questo caso non aiuta.

4. A dispetto del fatto che i bordi siano completamente neri e non cambino mai, c'è perlomeno un piccolo spreco nell'avere più macroblocchi.

Per tutte queste ragioni si consiglia di tagliar via completamente i bordi neri. Inoltre, se c'è una zona di rumore/distorsione sui bordi dell'immagine, tagliarla migliorerà ancora l'efficienza di codifica. I puristi videofili che vogliono mantenere il più possibile l'originale potrebbero obiettare su questo taglio, ma a meno di non codificare a una quantizzazione costante, la qualità guadagnata tagliando sorpasserà di gran lunga la quantità di informazioni perse sui bordi.

### 7.1.4. Tagliare e Ridimensionare

Ricorda dalla sezione precedente che la dimensione finale dell'immagine che codifichi dovrebbe essere un multiplo di 16 (sia in larghezza che altezza). Si può ottenere ciò tagliando, ridimensionando o combinando le due cose.

Quando tagli, ci sono alcune linee guida che si devono seguire per evitare di rovinare il tuo filmato. Il formato YUV abituale, 4:2:0, memorizza le informazioni sulla crominanza (colore) sottocampionate, per es. la crominanza viene campionata in ogni direzione solo la metà di quanto venga la luminanza (intensità). Osserva questo diagramma, dove L indica i punti di campionamente della luminanza e C quelli della crominanza.

L | L | L | L | L | L | L | L
C | C | C | C
L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L
C | C | C | C
L | L | L | L | L | L | L | L

Come puoi vedere, le righe e le colonne dell'immagine vengono sempre a coppie. Quindi i tuoi valori di spostamento e dimensione devono essere numeri pari. Se non lo sono la crominanza non sarà più allineata correttamente con la luminanza. In teoria è possibile tagliare con uno spostamento dispari, ma richiede che la crominanza venga ricampionata, il che potenzialmente è un'operazione in perdita e non è gestita dal filtro crop.

Inoltre, il video interlacciato viene campionato come segue:

Campo superiore | Campo inferiore
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
C | C | C | C |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | C | C | C | C
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
C | C | C | C |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L
L | L | L | L | L | L | L | L |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  | C | C | C | C
|  |  |  |  |  |  |  | L | L | L | L | L | L | L | L

Come puoi notare, il motivo non si ripete fino a dopo 4 linee. Quindi per il video interlacciato, il tuo spostamento sull'asse y e l'altezza devono essere multipli di 4.

La risoluzione nativa DVD è 720x480 per NTSC e 720x576 per PAL, ma c'è un flag per l'aspetto che indica se è full-screen (4:3) o wide-screen (16:9). Molti (se non quasi tutti) i DVD in widescreen non sono esattamente 16:9 e possono essere sia 1.85:1 o 2.35:1 (cinescope). Questo significa che nel video ci saranno bordi neri che bisogna tagliare via.

MPlayer fornisce un filtro che rileva i valori di taglio e fornisce il rettangolo per crop (`-vf cropdetect`). Esegui MPlayer con `-vf cropdetect` ed emetterà le impostazioni di taglio per crop al fine di rimuovere i bordi. Dovresti lasciare andare avanti il film abbastanza da ottenere valori di taglio precisi.

Dopodiché prova con MPlayer i valori ottenuti usando la linea comando emessa da `cropdetect`, e correggi il rettangolo se e come serve. Il filtro `rectangle` può esserti di aiuto, dato che ti permette di impostare interattivamente la posizione del rettangolo di taglio sopra al filmato. Ricordati di seguire le linee guida sui multipli in modo da non disallineare i piani di crominanza.

In talune occasioni, il ridimensionamento può essere indesiderabile. Il ridimensionamento sulla direzione verticale è difficoltoso con video interlacciato e se vuoi mantenere l'interlacciamento, dovresti evitare il ridimensionamento. Se non ridimensionerai, ma vuoi comunque usare dimensioni multiple di 16, dovrai tagliare di più. Evita di tagliare di meno, dato che i bordi neri sono un male per la codifica!

Dato che MPEG-4 usa macroblocchi 16x16 vorrai esser sicuro che ambedue le dimensioni del video che stai per codificare siano multiple di 16, altrimenti perderai in qualità, soprattutto a bitrate più bassi. Puoi farlo abbassando la larghezza e l'altezza del rettangolo di taglio al multiplo di 16 più vicino. Come detto precedentemente, quando tagli, vorrai aumentare lo scostamento Y della metà della differenza tra la nuova e la vecchia altezza, in modo che il video risultante sia preso dal centro del fotogramma. Inoltre, a causa del modo in cui il video DVD viene campionato, assicurati che lo scostamento sia un numero pari. (Infatti, come regola, non utilizzare mai valori dispari per alcun parametro quando tagli e ridimensioni un video.) Se non ti va di scartare dei pixel in più, potresti piuttosto preferire il ridimensionamento del video. Prenderemo in esame questa situazione più avanti. Puoi in verità lasciare che tutte le considerazioni suddette vengano fatte dal filtro `cropdetect`, visto che ha un parametro `round` facoltativo, che è impostato a 16 di default.

Fai anche attenzione ai pixel "mezzi neri" sui bordi. Assicurati di tagliare anch'essi, altrimenti sprecherai bit più utili altrove.

Dopo aver detto e fatto tutto ciò, probabilmente avrei un vide i cui pixel non saranno proprio 1.85:1 o 2.35:1, ma piuttosto un valore vicino. Potresti calcolare a mano il nuovo rapporto di aspetto, ma MEncoder ha un'opzione per `libavcodec` chiamata `autoaspect` che lo farà per te. Non aumentare assolutamente le dimensioni del video per avere i pixel quadrati, a meno che tu non voglia sprecare il tuo spazio disco. Il ridimensionamento dovrebbe essere eseguito in riproduzione, e per definire la risoluzione giusta il riproduttore userà l'aspetto memorizzato nell'AVI. Sfortunatamente non tutti i riproduttori verificano l'informazione sul rapporto perciò potresti voler comunque effettuare il ridimensionamento.

### 7.1.5. Scegliere la risoluzione e il bitrate

A meno che tu non stia per codificare con quantizzazione costante devi impostare un bitrate. La logica del bitrate è abbastanza semplice. Normalmente il bitrate viene misurato in kilobit (1000 bit) al secondo. La dimensione del filmato sul disco è il bitrate moltiplicato per la durata del filmato, più un piccolo quantitativo in "surplus" (vedi per esempio la sezione sul contenitore AVI). Altri parametri come ridimensionamento, taglio, etc... non influiscono sulla dimensione del file a meno che tu non cambi anche il bitrate!

Il bitrate non è direttamente proporzionale alla risoluzione. Tanto per capirci, un file 320x240 a 200 kbit/sec non avrà la stessa qualità dello stesso filmato a 640x480 e 800 kbit/sec! Ci sono due ragioni per ciò:

1. Percettiva: noti di più gli artefatti MPEG quando sono più grandi! Gli artefatti appaiono a livello dei blocchi (8x8). Il tuo occhio non noterà errori in 4800 piccoli blocchi tanti quanti ne vedrà in 1200 grossi blocchi (assumendo che tu li stia ridimensionando tutti e due a schermo intero).

2. Teorica : quando rimpicciolisci un immagine ma usi la stessa dimensione dei blocchi (8x8) per la trasformazione spaziale della frequenza, hai più dati nelle bande ad alta frequenza. In parole povere, ogni pixel contiene più dettagli di quanti ne contenesse prima. Quindi anche se la tua immagine rimpicciolita contiene 1/4 delle informazioni sulle direzioni spaziali, potrebbe ancora contenere una gran parte delle informazioni nel dominio delal frequenza (assumendo che le alte frequenze siano sotto-utilizzate nell'immagine di origine a 640x480).

Guide precendenti hanno consigliato di scegliere un bitrate e una risoluzione in base ad un approccio "bit al secondo", ma di solito ciò non è valido a causa delle ragioni suddette. Una stima migliore pare essere che il bitrate è proporzionale alla radice quadrata della risoluzione, per cui 320x240 e 400 kbit/sec sarà paragonabile a 640x480 a 800 kbit/sec. Tuttavia ciò non è stato verificato con certezza empirica o teorica. Inoltre, dato che i filmati hanno diversi livelli di disturbo, dettaglio, angoli di movimento, etc..., è vano dare consigli generici su bit per lunghezza della diagonale (analogamente a bit per pixel, usando la radice quadrata).

Finora abbiamo parlato della difficoltà nel scegliere un bitrate e una risoluzione.

#### 7.1.5.1. Calcolare la risoluzione

I passaggi seguenti ti guideranno nel calcolo della risoluzione per la tua codifica senza distorcere troppo il video, tenendo in considerazione vari tipo di informazioni riguardo la sorgente video. Per prima cosa dovresti calcolare il rapporto di aspetto codificato: `ARc = (Wc x (ARa / PRdvd )) / Hc`

dove:

- Wc e Hc sono la larghezza e l'altezza del video tagliato,

- ARa è il rapporto di aspetto mostrato, che di solito è 4/3 o 16/9,

- PRdvd à il rapporto del pixel del DVD che è uguale a 1.25=(720/576) per DVD PAL e 1.5=(720/480) per DVD NTSC.

Dopo puoi calcolare la risoluzione X e Y, basandoti su un dato fattore di qualità di compressione (Compression Quality, CQ): `ResY = INT(SQRT( 1000*Bitrate/25/ARc/CQ )/16) * 16` and `ResX = INT( ResY * ARc / 16) * 16`

Okay, ma cos'è la CQ? Il CQ rappresenta il numero di bit per pixel e per fotogramma in codifica. Parlando più semplicemente, più alto è la CQ, più difficilmente si vedranno codificati degli artefatti. Tuttavia, se desideri una particolare dimensione per il tuo film (per esempio 1 o 2 CD), hai un numero limitato di bit da utilizzare; devi quindi trovare un buon compromesso tra compressione e qualità.

La CQ dipende dal bitrate, dall'efficienza del codec video e dalla risoluzione del filmato. Per alzare la CQ, di solito dovrai rimpicciolire il filmato visto che il bitrate viene calcolato in funzione della dimensione voluta e della lunghezza del filmato, che sono delle costanti. Con codec MPEG-4 ASP come `Xvid` e `libavcodec`, una CQ inferiore a 0.18 solitamente genera un'immagine abbastanza squadrettata, perché non ci sono abbastanza bit per codificare l'informazione di ogni macroblocco. (MPEG4, come molti altri codec, ragruppa i pixel in blocchi di pixel per comprimere l'immagine; se non ci sono abbastanza bit, si vedono i bordi dei blocchi.) E' saggio anche prendere una CQ compresa tra 0.20 e 0.22 per un rip a 1 CD, e 0.26-0.28 per un rip a 2 CD con impostazioni standard di codifica. Opzioni più evolute di codifica come quelle qui indicate per `libavcodec` e `Xvid` dovrebbero permetterti di ottenere la stessa qualità con CQ compresa tra 0.18 e 0.20 per un rip da 1 CD, e da 0.24 a 0.26 per 2 CD. Con codec MPEG-4 AVC come `x264`, puoi usare una CQ che varia da 0.14 a 0.16 con opzioni standard di codifica, e dovresti riuscire a scendere tra 0.10 e 0.12 con impostazioni avanzate di codifica `x264`.

Prendi per favore nota che CQ è solo un valore indicativo, dato che dipende dal contenuto che viene codificato, una CQ di 0.18 può andar bene per un Bergman, mentre per un film come Matrix, che contiene molte scene ad alta velocità, no. D'altro canto è inutile portare la CQ oltre 0.30 dato che sprecherai dei bit senza avere alcun guadagno visibile in qualità. Nota anche che come detto precedentemente in questa guida, per video a bassa risoluzione serve una CQ più alta (in rapporto, per esempio, alla risoluzione DVD) perché si vedano bene.

### 7.1.6. Filtraggio

Imparare come usare i filtri video di MEncoder è essenziale per produrre delle buone codfiche. Tutta l'elaborazione video è eseguita attraverso i filtri -- taglio, ridimensionamento, aggiustamento del colore, rimozione del disturbo, rilevamento margini, deinterlacciatura, telecine, telecine inverso, e deblocco, solo per nominarne qualcuno. Insieme con la vasta gamma di formati di entrata gestiti, la varietà dei filtri disponibili in MEncoder è uno dei suoi più grandi vantaggi sugli altri programmi similari.

I filtri vengono caricati in catena usando l'opzione -vf:

    -vf filtro1=opzioni,filtro2=opzioni,...

La maggior parte dei filtri riceve alcune opzioni numeriche separate da due punti, ma la sintassi per le opzioni cambia da filtro a filtro, indi leggiti la pagina man per i dettagli sul filtro che desideri usare.

I filtri lavorano sul video nell'ordine in cui vengono caricati. Per esempio la catena seguente:

    -vf crop=688:464:12:4,scale=640:464

dapprima taglia la zona 688x464 dell'immagine con uno scostamento dall'alto a sinistra di (12,4), e poi ridimensiona il risultato a 640x464.

Taluni filtri devono essere caricati all'inizio o vicino all'inizio della catena di filtri, in modo da trarre vantaggio dalle informazioni che arrivano dal decoder video, che potrebbero essere perse o invalidate da altri filtri. Gli esempi principali sono `pp` (post elaborazione (postprocessing), solo quando esegue operazioni di deblock o dering), `spp` (un altra post elaborazione per eliminare artefatti MPEG), `pullup` (telecine inverso), e `softpulldown` (per passare da telecine soft a hard).

In generale vorrai filtrare il meno possibile in modo da rimaner fedele alla sorgente DVD originale. Il taglio è spesso necessario (com detto sopra), ma evita di ridimensionare il video. Anche se alcune volte si preferisce rimpicciolire per poter usare quantizzatori più alti, vogliamo evitare ciò: ricorda che abbiamo sin dall'inizio deciso di investire bit in qualità.

In più, non reimpostare la gamma, il contrasto, la luminosità, etc... Quello che si vede bene sul tuo schermo potrebbe non vedersi bene su altro. Queste modifiche dovrebbero esser fatte solo durante la riproduzione.

Una cosa che voresti però fare è tuttavia far passare il video attraverso un leggero filtro di rimozione disturbo, come `-vf hqdn3d=2:1:2`. Ancora, è una questione di poter meglio utilizzare quei bit: perché sprecarli codificando disturbo mentre puoi semplicemente aggiungerlo di nuovo durante la riproduzione? Alzando i parametri per `hqdn3d` aumenterà ancora la compressione, ma se aumenti troppo i valori, rischi un degrado pesante dell'immagine. I valori sopra consigliati (`2:1:2`) sono abbastanza conservativi; sentiti libero di sperimentare con valori più alti e verificare da solo il risultato.

### 7.1.7. Interlacciamento e Telecine

Quasi tutti i film vengono ripresi a 24 fps. Dato che NTSC è 30000/1001 fps, si devono eseguire alcune elaborazioni affinché questo video a 24 fps sia letto al giusto framerate NTSC. Il processo è chiamato "3:2 pulldown", meglio conosciuto come "telecine" (poiché pulldown viene spesso applicato durante il processo di telecine), e descritto rozzamente, agisce rallentando il film a 24000/1001 fps, e ripetendo ogni quarto fotogramma.

Non viene invece eseguita alcuna elaborazione sul video per i DVD PAL, che girano a 25 fps. (Tecnicamente, PAL può subire il telecine, chiamato "2:2 pulldown", ma non è usanza abituale.) Il film a 24 fps viene semplicemente riprodotto a 25 fps. Il risultato è che il filmato è leggermente più veloce, ma a meno che tu non sia un alieno, probabilmente non noterai la differenza. La maggior parte dei DVD PAL hanno audio corretto ai picchi, in modo che quando siano riprodotti a 25 fps le cose suonino giuste, anche se la traccia audio (e quindi tutto il filmato) ha un tempo di riproduzione che è il 4% inferiore ai DVD NTSC.

A causa del fatto che il video nei DVD PAL non è stato alterato, non dovrai preoccuperti molto della frequenza fotogrammi. La sorgente è 25 fps, e il tuo rip sarà a 25 fps. Tuttavia, se stai codificando un film da DVD NTSC, potresti dover applicare il telecine inverso.

Per film ripresi a 24 fps, il video sul DVD NTSC è o con telecine a 30000/1001, oppure è progressivo a 24000/1001 fps e destinato a subire il telecine al volo da un lettore DVD. D'altro canto le serie TV sono solitamente solo interlacciate, senza telecine. Questa non è una regola ferrea: alcune serie TV sono interlacciate (come Buffy the Vampire Slayer) mentre alcune sono un misto di progressivo e interlacciato (come Angel, o 24).

Si consiglia vivamente di leggere la sezione su Come trattare il telecine e l'interlacciamento nei DVD NTSC per imparare come gestire le varie possibilità.

Ciononostante, se stai principalmente rippando solo film, solitamente ti troverai di fronte a video a 24 fps progressivo o con telecine, nel qual caso puoi usare il filtro `pullup` `-vf pullup,softskip`.

### 7.1.8. Codificare video interlacciato

Se il film che vuoi codificare è interlacciato (video NTSC o PAL) dovrai scegliere se vuoi de-interlacciare o no. Se da un lato de-interlacciare renderà il tuo filmato utilizzabile su schermi a scansione progressiva come monitor di computer o proiettori, porta con sé un costo: la frequenza dei campi di 50 o 60000/1001 campi al secondo viene dimezzata a 25 o 30000/1001 fotogrammi al secondo, e circa la metà delle informazioni nel tuo film saranno perdute, in scene con movimento significativo.

Per di più, se stai codificando puntando ad alta qualità di archiviazione. si consiglia di non de-interlacciare. Puoi sempre de-interlacciare il film durante la riproduzione attraverso dispositivi a scansione progressiva. La potenza dei computer attuali forza per i riproduttori l'utilizzo di un filtro di de-interlacciamento, che porta un leggero degrado dell'immagine. Ma i lettori del futuro saranno in grado di simulare lo schermo di una TV, de-interlacciando a piena frequenza di campi e interpolando 50 o 60000/1001 fotogrammi interi al secondo dal video interlacciato

Bisogna porre speciale attenzione quando si lavora con video interlacciato:

1. Altezza e scostamento del taglio devono essere multipli di 4.

2. Qualsiasi ridimensionamento verticale va fatto in modalità interlacciata.

3. I filtri di post elaborazione e di rimozione disturbo potrebbero non funzionare come ci si aspetta a meno che tu non ponga particolare attenzione per farli lavorare su un campo per volta, e possono rovinare il video quando usati in modo non corretto.

Tenendo a mente queste cose, ecco il nostro primo esempio:

    mencoder capture.avi -mc 0 -oac lavc -ovc lavc -lavcopts \
        vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224

Nota le opzioni `ilme` e `ildct`.

### 7.1.9. Note sulla sincronizzazione Audio/Video

Gli algoritmi di sincronizzazione audio/video di MEncoder sono stati progettati con l'intento di recuperare file con sincronia danneggiata. In alcuni casi tuttavia, possono generare inutili duplicazioni o scarti di fotogrammi, e possibilmente leggera desincronia A/V quando vengono usati con sorgenti buone (i problemi di sincronizzazione A/V accadono solo se elabori o copi la traccia audio mentre transcodifichi il video, il che è decisamente consigliato). Perciò potresti dover passare ad una sincronizzazione di base con l'opzione `-mc 0`, o metterla nel tuo file di configurazione `~/.mplayer/mencoder`, sempre che tu stia lavorando con buone sorgenti (DVD, acquisizione TV, rip MPEG-4 ad alta qualità, etc) e non con file ASF/RM/MOV rovinati.

Se vuoi proteggerti ulteriormente da strani salti e duplicazioni di fotogrammi, puoi usare sia `-mc 0` che `-noskip`. Questo disabiliterà tutte le sincronizzazioni A/V, e copierà i fotogrammi uno ad uno, perciò è inutilizzabile se stai usando dei filtri che aggiungono o rimuovono arbitrariamente fotogrammi, ovvero se il tuo file sorgente ha una frequenza fotogrammi non costante! Quindi l'utilizzo di `-noskip` in linea di massima si sconsiglia.

Si sa che la cosiddetta codifica audio in "tre passi", che MEncoder gestisce, può causare desincronizzazione A/V. Il che capiterà prontamente se viene usata insieme con alcuni filtri, per cui si consiglia di non usare la modalità audio a tre passi. Questa caratteristica viene lasciata solo per finalità di compatibilità e per utenti esperti che sanno quando sia adeguato usarla e quando no. Se non hai mai sentito parlar prima della modalità a tre passi, dimenticati di averla anche solo sentita nominare!

Ci sono anche stati rapporti di desincronia A/V codificando con MEncoder da stdin. Non farlo! Usa sempre come ingresso un file o un dispositivo CD/DVD/etc.

### 7.1.10. Scegliere il codec video

Quale possa esere il miglior codec video dipende da molti fattori, come dimensione, qualità, possibilita di farne lo streaming, usabilit, diffusione, alcuni dei quali dipendono fortemente dai gusti personali e dalle variabili tecniche in gioco.

- E' abbastanza facile da capire che i codec più recenti sono fatti per aumentare qualità e compressione. Quindi gli autori di questa guida e moltra altra gente suggeriscono che non potete sbagliare [1] quando scegliete un qualche codec MPEG-4 AVC come `x264` piuttosto che un codec MPEG-4 ASP come l'MPEG-4 di `libavcodec` o `Xvid`. (Per sviluppatori avenzati di codec potrebbe essere interessante leggere l'opinione di Michael Niedermayer sul "perché MPEG-4 ASP faccia schifo" (in inglese).) Analogamente dovresti ottenere una miglior qualità usando MPEG-4 ASP rispetto a quella ottenuta con codec MPEG-2.

  Tuttavia, i codec più recenti che sono sotto pesante sviluppo possono avere problemi che non sono ancora stati scoperti, e che possono rovinare una codifica. Questo è semplicemente il contrappasso per usare la tecnologia di punta.

  Inoltre iniziare ad utilizzare un codec nuovo richiede l'utilizzo di un po' di tempo per familiarizzare con le sue opzioni, affinché tu sappia cosa impostare per ottenere la qualità dell'immagine voluta.

- Compatibilità Hardware: Solitamente ci va un po' di tempo prima che i lettori da tavolo incomincino ad includere il supporto per il video codec più recente. Il risultato è che la maggior parte legge MPEG-1 (come i VCD, XVCD e KVCD), MPEG-2 (come DVD, SVCD e KVCD) e MPEG-4 ASP (come DivX, LMP4 di `libavcodec` e `Xvid`) (attenzione: solitamente non sono gestite tutte le caratteristiche MPEG-4 ASP). Fai per favore riferimento alle specifiche tecniche del tuo lettore (ove disponibili) o cerca su internet per ulteriori informazioni.

- Miglior qualità per tempo di codifica: Codec che sono in giro da parecchio tempo (come MPEG-4 di `libavcodec` e `Xvid`) sono spesso molto ottimizzati con ogni tipo di algoritmo furbo e codice SIMD in assembly. Per questo tendono a fornire il miglior rapporto tra qualità e tempo di codifica. Tuttavia, possono avere delle opzioni avanzate che, quando abilitate, rendono la codifica molto lenta fornendo poco guadagno.

  Se stai cercando di incrementare la velocità dovresti cercare di non modificare troppo le impostazioni di default del codec video (anche se dovresti comunque provare le altre opzioni che sono citate in altre sezioni di questa guida).

  Puoi tenere in considerazione anche la scelta di un codec che possa eseguire elaborazioni multi-thread, anche se ciò è utile solo per utenti di macchine con più di una CPU. MPEG-4 di `libavcodec` lo permette, ma il guadagno in velocità è limitato, e c'è un leggere effetto negativo sulla qualità dell'immagine. La codifica multi-thread di `Xvid`, attivata dall'opzione `threads`, può essere usata per accelerare la velocità di codifica — tipicamente di circa il 40-60% — con poco se non nessun degrado dell'immagine. Anche `x264` permette la codifica in multi-thread, la quale attualmente velocizza la codifica del 94% per core di CPU mentre abbassa il PSNR tra 0.005dB e 0.01dB, con impostazioni tipiche.

- Gusto personale: Qui è dove capita l'irrazionale: per la stessa ragione per cui alcuni restano attaccati a DivX 3 per anni, mentre nuovi codec stanno facendo meraviglie, alcuni personaggi preferiranno `Xvid` o MPEG-4 di `libavcodec` a `x264`.

  Dovresti prendere le tue decisioni; non prendere consigli da gente che fanno giuramenti su un codec. Prendi alcuni pezzi di esempio da sorgenti grezze e compara le diverse opzioni di codifica e di codec per trovare quello che ti garba di più. Il miglior codec è quello che riesci a gestire al meglio, e quello che ai tuoi occhi e sul tuo schermo si vede meglio. [2]!

Fai per favore riferimento alla sezione selezionare codec e formati contenitore per avere un elenco dei codec usabili.

### 7.1.11. Audio

L'audio è un problema di decisamente più facile soluzione: se ti interessa la qualità, lascialo semplicemente com'è. Anche i flussi AC-3 5.1 sono al massimo a 448Kbit/s, e ne valgono ogni bit. Potresti esser tentato di trascodificare l'audio in Vorbis ad alta qualità, ma solo perché a tutt'oggi non hai un decodificatore AC-3 pass-through ciò non significa che non ne avrai uno in futuro. Assicura un futuro ai tuoi rip da DVD preservando il flusso in AC-3. Puoi mantenere il flusso AC-3 anche copiandolo direttamente nel flusso video durante la codifica. Puoi anche estrarre il flusso AC-3 al fine di farne il mux in contenitori come NUT o Matroska.

    mplayer file_sorgente.vob -aid 129 -dumpaudio -dumpfile suono.ac3

effettuerà il dump della traccia audio numero 129 dal file `file_sorgente.vob` nel file `suono.ac3` (NB: i file VOB da DVD spesso usano una numerazione dell'audio diversa, il che significa che la traccia audio 129 è la seconda traccia del file).

Alcune volte invece, non hai davvero altra scelta se non comprimere ulteriormente il suono per poter usare più bit per il video. La maggior parte delle persone sceglie di comprimere l'audio con i codec MP3 ovvero Vorbis. Mentre quest'ultimo è un codec decisamente efficiente per lo spazio, MP3 è meglio supportato dai lettori da tavolo, anche se la situazione sta cambiando.

Non usare `-nosound` mentre codifichi un file con dell'audio, anche se farai la codifica e il mux dell'audio separatamente in seguito. Anche se potesse andar bene in casi ideali, facilmente usare `-nosound` nasconderà alcuni problemi nelle tue impostazioni di codifica sulla riga comando. In altre parole mantenere la colonna sonora durante la codifica ti assicura, a patto che tu non veda messaggi del tipo «Troppi pacchetti audio nel buffer», di ottenere un'adeguata sincronizzazione.

Devi fare in modo che MEncoder processi il suono. Puoi per esempio copiare la colonna sonora originaria durante la codifica con `-oac copy`, o convertirla in un "leggero" PCM WAV mono a 4 kHz con `-oac pcm -channels 1 -srate 4000`. In caso contrario in alcuni casi verrà generato un file video che sarà desincronizzato con l'audio. Casi del genere sono quelli in cui il numero dei fotogrammi video nel file di origine non corrisponde alla lunghezza totale dei fotogrammi audio oppure ogniqualvolta vi siano delle discontinuità/splice in cui mancano o ci sono fotogrammi audio in più. Il modo giusto di gestire questo tipo di problemi è inserire del silenzio o tagliare l'audio in quei punti. Tuttavia MPlayer non è in grado di farlo, per cui se fai il demux dell'audio AC-3 e lo codifichi con un'altro programma (o ne fai il dump in PCM con MPlayer), gli splice rimarranno sbagliati e l'unico modo per correggerli è scartare/duplicare fotogrammi video nel punto di splice. Fintantochè MEncoder vede l'audio mentre codifica il video, può eseguire questo scarto/duplicazione (che solitamente è OK, dato che capita con scene nere o cambi scena), ma se MEncoder non vede l'audio, processerà i fotogrammi così come sono e alla fine non corrisponderanno al flusso audio finale quando per esempio inserirai i flussi audio e video dentro a un file Matroska.

Prima di tutto dovrai convertire l'audio DVD in un file WAV che il codec audio possa usare come ingresso. Per esempio:

    mplayer file_sorgente.vob -ao pcm:file=suono_destinazione.wav \
        -vc dummy -aid 1 -vo null

eseguirà il dump della seconda traccia audio dal file `file_sorgente.vob` sul file `suono_destinazione.wav`. Potresti voler normalizzare il suono prima della codifica, visto che le tracce audio dei DVD spesso sono registrate a volumi bassi. Puoi usare per esempio lo strumento normalize, che è disponibile nella maggior parte delle distribuzioni. Se stai usando Windows, lo stesso mestiere lo può fare uno strumento tipo BeSweet. Effettuerai la compressione in Vorbis ovvero in MP3. Per esempio:

    oggenc -q1 suono_destinazione.wav

codificherà `suono_destinazione.wav` con qualità di codifica 1, che equivale circa a 80Kb/s, ed è la qualità minima in cui dovresti codificare se ti interessa la qualità. Fai per favore attenzione che attualmente MEncoder non è in grado di fare il mux di tracce audio Vorbis nel file di uscita, perché gestisce solo contenitori AVI e MPEG in uscita, ognuno dei quali può portare a problemi di sincronizzazione audio/video durante la riproduzione con alcuni lettori quando il file AVI contiene flussi audio VBR come Vorbis. Non preoccuparti, questa documentazione ti mostrerà come tu possa farlo comunque con programmi di terze parti.

### 7.1.12. Muxing

Ora che hai codificato il tuo video, vorrai verosimilmente farne il mux in un contenitore di filmati con una o più tracce audio, come AVI, MPEG, Matroska o NUT. MEncoder è attualmente in grado di generare in modo nativo solo video in formati contenitore MPEG o AVI. Per esempio:

    mencoder -oac copy -ovc copy  -o film_in_uscita.avi \
        -audiofile audio_in_ingresso.mp2 video_in_ingresso.avi

Questo miscelerà i file video `video_in_ingresso.avi` e audio `audio_in_ingresso.mp2` nel file AVI `film_in_uscita.avi`. Questo comando funziona con audio MPEG-1 layer I, II e III (più comunemente conosciuto come MP3), WAV e qualche altro formato audio.

MEncoder vanta un supporto sperimentale per `libavformat`, che è una libreria del progetto FFmpeg che può fare il mux e il demux di svariati contenitori. Per esempio:

    mencoder -oac copy -ovc copy -o film_di_uscita.asf -audiofile audio_in_ingresso.mp2 \
        video_in_ingresso.avi -of lavf -lavfopts format=asf

Questo farà la stessa cosa dell'esempio precedente, trannce che il contenitore di uscita sarà ASF. Per favore nota che questo supporto è altamente sperimentale (ma migliora di giorno in giorno), e funzionerà solo se hai compilato MPlayer con il supporto per `libavformat` abilitato (il che significa che una versione precompilata nella maggior parte dei casi non funzionerà).

#### 7.1.12.1. Migliorare il mux e l'affidabilità di sincronizzazione A/V

Potresti avere dei seri problemi di sincronizzazione cercando di fare il mux del tuo video con alcune tracce audio, indipendentemente da come tu corregga il ritardo audio, non otterrai mai una sincronia corretta. Ciò potrebbe succedere quando usi un qualche filtro video che scarti o duplichi alcuni fotogrammi, come il filtro di telecine inverso. Si consiglia vivamente di appendere il filtro video `harddup` alla fine della catena dei filtri, per evitare questo tipo di problema.

Senza `harddup`, se MEncoder vuole duplicare un fotogramma, chiede al muxer di mettere un segno sul contenitore affinché l'ultimo fotogramma venga mostrato di nuovo per mantenere la sincronia, senza scriverne effettivamente alcuno. Con `harddup`, MEncoder farà semplicemente passare di nuovo l'ultimo fotogramma nella catena di filtri. Questo significa che il codificatore riceve esattamente lo stesso fotogramma due volte, e lo comprime. Ciò genera un file leggermente più grosso, ma non causerà problemi effettuando il demux o il remux in altri formati contenitore.

Potresti non avere altra scelta che usare `harddup` con formati contenitore che non siano così legati a MEncoder come quelli gestiti attraverso `libavformat`, e che possano non gestire la duplicazione fotogrammi a livello contenitore.

#### 7.1.12.2. Limitazioni del contenitore AVI

Anche se AVI è il formato contenitore più ampiamente gestito dopo MPEG-1, ha anche molti gravi inconvenienti. Forse il più ovvio è lo spreco di banda. Per ogni blocco del file AVI, 24 byte sono sprecati per intestazione e indice. Questo porta a poco più di 5 MB per ora, o 1-2.5% di dimensione supplementare per un film da 700 MB. Potrebbe non sembrare poi così tanto, ma potrebbe far la differenza tra poter utilizzare 700 oppure 714 kbit/sec per il video, e ogni bit è importante per la qualità.

Oltre a questa grave inefficenza, AVI ha anche le grandi limitazioni che seguono:

1. Può essere immagazzinato solo contenuto a fps costanti. Questo è decisamente limitante se il materiale di origine che vuoi codificare è contenuto misto, per esempio un misto di video NTSC e film. Ci sono invero alcuni trucchi che possono essere usati per salvare negli AVI contenuto a frequenza di fotogrammi mista, ma aumentano il (già immenso) spreco di banda di cinque volte o giù di lì e quindi non sono pratici.

2. L'audio nei file AVI deve essere a bitrate costante (CBR) o a dimensione di fotogramma fissa (per es. tutti i fotogrammi decodificano lo stesso numero di campioni). Sfortunatamente, il codec più efficente, Vorbis, non ha alcuna delle suddette caratteristiche. Se decidi di salvare il tuo film in AVI, dovrai perciò usare un codec meno efficente, come MP3 o AC-3.

Detto tutto ciò, MEncoder non gestisce attualmente la codifica in uscita a fps variabile o la codifica in Vorbis. Quindi non noterai le limitazioni su citate se MEncoder è l'unico strumento che userai per produrre le tue codifiche. Tuttavia è possibile usare MEncoder solo per la codifica del video, e poi utilizzare strumenti di terze parti per codificare l'audio e farne il mux in un altro formato contenitore.

#### 7.1.12.3. Mux nel contenitore Matroska

Matroska è un formato contenitore libero, a standard aperti, che punta ad offrire molte caratteristiche avanzate, che contenitori più vecchi come AVI non sono in grado di manipolare. Per esempio Matroska supporta contenuto audio a bitrate variabile (VBR), frequenza fotogrammi variabile (VFR), capitoli, file allegati, codice di gestione errori (EDC) e Codec A/V moderni come "Advanced Audio Coding" (AAC), "Vorbis" or "MPEG-4 AVC" (H.264), comparato al nulla gestito da AVI.

Gli strumenti necessari per creare file Matroska sono chiamati nel loro insieme mkvtoolnix e sono disponibili per la maggior parte delle piattaforme Unix, così come per Windows. Dato che Matroska è uno standard aperto, potresti trovare altri strumenti che ti tornino più utili, ma dato che mkvtoolnix è il più diffuso, ed è supportato dal team stesso di Matroska, illustreremo il suo solo utilizzo.

Probabilmente il modo più semplice di avvicinarsi a Matroska è utilizzare MMG, il frontend grafico fornito con mkvtoolnix, e seguire la guida della GUI di mkvmerge (mmg).

Puoi anche fare il mux dei file audio e video usando la riga comando:

    mkvmerge -o destinazione.mkv video_sorgente.avi audio_sorgente1.mp3 audio_sorgente2.ac3

Questo unirà il file video `video_sorgente.avi` e i due file audio `audio_sorgente1.mp3` e `audio_sorgente2.ac3` nel file Matroska `destinazione.mkv`. Matroska, come detto precedentemente, è in grado di far molto più di questo, come tracce audio multiple (inclusa una fine sincronia audio/video), capitoli, sottotitoli, salti, etc... Fai per favore riferimento alla documentazione di queste applicazioni per maggiori delucidazioni.

## 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%.

## 7.3. Encoding with the `libavcodec` codec family

`libavcodec` provides simple encoding to a lot of interesting video and audio formats. You can encode to the following codecs (more or less up to date):

### 7.3.1. `libavcodec`'s video codecs

Video codec name | Description
--- | ---
mjpeg | Motion JPEG
ljpeg | lossless JPEG
jpegls | JPEG LS
targa | Targa image
gif | GIF image
bmp | BMP image
png | PNG image
h261 | H.261
h263 | H.263
h263p | H.263+
mpeg4 | ISO standard MPEG-4 (DivX, Xvid compatible)
msmpeg4 | pre-standard MPEG-4 variant by MS, v3 (AKA DivX3)
msmpeg4v2 | pre-standard MPEG-4 by MS, v2 (used in old ASF files)
wmv1 | Windows Media Video, version 1 (AKA WMV7)
wmv2 | Windows Media Video, version 2 (AKA WMV8)
rv10 | RealVideo 1.0
rv20 | RealVideo 2.0
mpeg1video | MPEG-1 video
mpeg2video | MPEG-2 video
huffyuv | lossless compression
ffvhuff | FFmpeg modified huffyuv lossless
asv1 | ASUS Video v1
asv2 | ASUS Video v2
ffv1 | FFmpeg's lossless video codec
svq1 | Sorenson video 1
flv | Sorenson H.263 used in Flash Video
flashsv | Flash Screen Video
dvvideo | Sony Digital Video
snow | FFmpeg's experimental wavelet-based codec
zbmv | Zip Blocks Motion Video

The first column contains the codec names that should be passed after the `vcodec` config, like: `-lavcopts vcodec=msmpeg4`

An example with MJPEG compression:

    mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

### 7.3.2. `libavcodec`'s audio codecs

Audio codec name | Description
--- | ---
ac3 | Dolby Digital (AC-3)
adpcm_* | Adaptive PCM formats - see supplementary table
flac | Free Lossless Audio Codec (FLAC)
g726 | G.726 ADPCM
libfaac | Advanced Audio Coding (AAC) - using FAAC
libgsm | ETSI GSM 06.10 full rate
libgsm_ms | Microsoft GSM
libmp3lame | MPEG-1 audio layer 3 (MP3) - using LAME
mp2 | MPEG-1 audio layer 2 (MP2)
pcm_* | PCM formats - see supplementary table
roq_dpcm | Id Software RoQ DPCM
sonic | experimental FFmpeg lossy codec
sonicls | experimental FFmpeg lossless codec
vorbis | Vorbis
wmav1 | Windows Media Audio v1
wmav2 | Windows Media Audio v2

The first column contains the codec names that should be passed after the `acodec` option, like: `-lavcopts acodec=ac3`

An example with AC-3 compression:

    mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy

Contrary to `libavcodec`'s video codecs, its audio codecs do not make a wise usage of the bits they are given as they lack some minimal psychoacoustic model (if at all) which most other codec implementations feature. However, note that all these audio codecs are very fast and work out-of-the-box everywhere MEncoder has been compiled with `libavcodec` (which is the case most of time), and do not depend on external libraries.

### 7.3.3. Encoding options of libavcodec

Ideally, you would probably want to be able to just tell the encoder to switch into "high quality" mode and move on. That would probably be nice, but unfortunately hard to implement as different encoding options yield different quality results depending on the source material. That is because compression depends on the visual properties of the video in question. For example, anime and live action have very different properties and thus require different options to obtain optimum encoding. The good news is that some options should never be left out, like `mbd=2`, `trell`, and `v4mv`. See below for a detailed description of common encoding options.

Options to adjust:

- vmax_b_frames: 1 or 2 is good, depending on the movie. Note that if you need to have your encode be decodable by DivX5, you need to activate closed GOP support, using `libavcodec`'s `cgop` option, but you need to deactivate scene detection, which is not a good idea as it will hurt encode efficiency a bit.

- vb_strategy=1: helps in high-motion scenes. On some videos, vmax_b_frames may hurt quality, but vmax_b_frames=2 along with vb_strategy=1 helps.

- dia: motion search range. Bigger is better and slower. Negative values are a completely different scale. Good values are -1 for a fast encode, or 2-4 for slower.

- predia: motion search pre-pass. Not as important as dia. Good values are 1 (default) to 4. Requires preme=2 to really be useful.

- cmp, subcmp, precmp: Comparison function for motion estimation. Experiment with values of 0 (default), 2 (hadamard), 3 (dct), and 6 (rate distortion). 0 is fastest, and sufficient for precmp. For cmp and subcmp, 2 is good for anime, and 3 is good for live action. 6 may or may not be slightly better, but is slow.

- last_pred: Number of motion predictors to take from the previous frame. 1-3 or so help at little speed cost. Higher values are slow for no extra gain.

- cbp, mv0: Controls the selection of macroblocks. Small speed cost for small quality gain.

- qprd: adaptive quantization based on the macroblock's complexity. May help or hurt depending on the video and other options. This can cause artifacts unless you set vqmax to some reasonably small value (6 is good, maybe as low as 4); vqmin=1 should also help.

- qns: very slow, especially when combined with qprd. This option will make the encoder minimize noise due to compression artifacts instead of making the encoded video strictly match the source. Do not use this unless you have already tweaked everything else as far as it will go and the results still are not good enough.

- vqcomp: Tweak ratecontrol. What values are good depends on the movie. You can safely leave this alone if you want. Reducing vqcomp puts more bits on low-complexity scenes, increasing it puts them on high-complexity scenes (default: 0.5, range: 0-1. recommended range: 0.5-0.7).

- vlelim, vcelim: Sets the single coefficient elimination threshold for luminance and chroma planes. These are encoded separately in all MPEG-like algorithms. The idea behind these options is to use some good heuristics to determine when the change in a block is less than the threshold you specify, and in such a case, to just encode the block as "no change". This saves bits and perhaps speeds up encoding. vlelim=-4 and vcelim=9 seem to be good for live movies, but seem not to help with anime; when encoding animation, you should probably leave them unchanged.

- qpel: Quarter pixel motion estimation. MPEG-4 uses half pixel precision for its motion search by default, therefore this option comes with an overhead as more information will be stored in the encoded file. The compression gain/loss depends on the movie, but it is usually not very effective on anime. qpel always incurs a significant cost in CPU decode time (+25% in practice).

- psnr: does not affect the actual encoding, but writes a log file giving the type/size/quality of each frame, and prints a summary of PSNR (Peak Signal to Noise Ratio) at the end.

Options not recommended to play with:

- vme: The default is best.

- lumi_mask, dark_mask: Psychovisual adaptive quantization. You do not want to play with those options if you care about quality. Reasonable values may be effective in your case, but be warned this is very subjective.

- scplx_mask: Tries to prevent blocky artifacts, but postprocessing is better.

### 7.3.4. Encoding setting examples

The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.

All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.

Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB)
--- | --- | --- | ---
Very high quality | `vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2` | 6fps | 0dB
High quality | `vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo` | 15fps | -0.5dB
Fast | `vcodec=mpeg4:mbd=2:trell:v4mv:turbo` | 42fps | -0.74dB
Realtime | `vcodec=mpeg4:mbd=2:turbo` | 54fps | -1.21dB

### 7.3.5. Custom inter/intra matrices

With this feature of `libavcodec` you are able to set custom inter (I-frames/keyframes) and intra (P-frames/predicted frames) matrices. It is supported by many of the codecs: `mpeg1video` and `mpeg2video` are reported as working.

A typical usage of this feature is to set the matrices preferred by the KVCD specifications.

The KVCD "Notch" Quantization Matrix:

Intra:

     8  9 12 22 26 27 29 34
     9 10 14 26 27 29 34 37
    12 14 18 27 29 34 37 38
    22 26 27 31 36 37 38 40
    26 27 29 36 39 38 40 48
    27 29 34 37 38 40 48 58
    29 34 37 38 40 48 58 69
    34 37 38 40 48 58 69 79

Inter:

    16 18 20 22 24 26 28 30
    18 20 22 24 26 28 30 32
    20 22 24 26 28 30 32 34
    22 24 26 30 32 32 34 36
    24 26 28 32 34 34 36 38
    26 28 30 32 34 36 38 40
    28 30 32 34 36 38 42 42
    30 32 34 36 38 40 42 44

Usage:

    mencoder input.avi -o output.avi -oac copy -ovc lavc \
        -lavcopts inter_matrix=...:intra_matrix=...

    mencoder input.avi -ovc lavc -lavcopts \
    vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
    12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,\
    29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79\
    :inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,\
    28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,\
    36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg

### 7.3.6. Example

So, you have just bought your shiny new copy of Harry Potter and the Chamber of Secrets (widescreen edition, of course), and you want to rip this DVD so that you can add it to your Home Theatre PC. This is a region 1 DVD, so it is NTSC. The example below will still apply to PAL, except you will omit `-ofps 24000/1001` (because the output framerate is the same as the input framerate), and of course the crop dimensions will be different.

After running `mplayer dvd://1`, we follow the process detailed in the section How to deal with telecine and interlacing in NTSC DVDs and discover that it is 24000/1001 fps progressive video, which means that we need not use an inverse telecine filter, such as `pullup` or `filmdint`.

Next, we want to determine the appropriate crop rectangle, so we use the cropdetect filter:

    mplayer dvd://1 -vf cropdetect

Make sure you seek to a fully filled frame (such as a bright scene, past the opening credits and logos), and you will see in MPlayer's console output:

    crop area: X: 0..719  Y: 57..419  (-vf crop=720:362:0:58)

We then play the movie back with this filter to test its correctness:

    mplayer dvd://1 -vf crop=720:362:0:58

And we see that it looks perfectly fine. Next, we ensure the width and height are a multiple of 16. The width is fine, however the height is not. Since we did not fail 7th grade math, we know that the nearest multiple of 16 lower than 362 is 352.

We could just use `crop=720:352:0:58`, but it would be nice to take a little off the top and a little off the bottom so that we retain the center. We have shrunk the height by 10 pixels, but we do not want to increase the y-offset by 5-pixels since that is an odd number and will adversely affect quality. Instead, we will increase the y-offset by 4 pixels:

    mplayer dvd://1 -vf crop=720:352:0:62

Another reason to shave pixels from both the top and the bottom is that we ensure we have eliminated any half-black pixels if they exist. Note that if your video is telecined, make sure the `pullup` filter (or whichever inverse telecine filter you decide to use) appears in the filter chain before you crop. If it is interlaced, deinterlace before cropping. (If you choose to preserve the interlaced video, then make sure your vertical crop offset is a multiple of 4.)

If you are really concerned about losing those 10 pixels, you might prefer instead to scale the dimensions down to the nearest multiple of 16. The filter chain would look like:

    -vf crop=720:362:0:58,scale=720:352

Scaling the video down like this will mean that some small amount of detail is lost, though it probably will not be perceptible. Scaling up will result in lower quality (unless you increase the bitrate). Cropping discards those pixels altogether. It is a tradeoff that you will want to consider for each circumstance. For example, if the DVD video was made for television, you might want to avoid vertical scaling, since the line sampling corresponds to the way the content was originally recorded.

On inspection, we see that our movie has a fair bit of action and high amounts of detail, so we pick 2400Kbit for our bitrate.

We are now ready to do the two pass encode. Pass one:

    mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi -ovc lavc \
        -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \
        -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2

And pass two is the same, except that we specify `vpass=2`:

    mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi -ovc lavc \
        -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
        -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2

The options `v4mv:mbd=2:trell` will greatly increase the quality at the expense of encoding time. There is little reason to leave these options out when the primary goal is quality. The options `cmp=3:subcmp=3` select a comparison function that yields higher quality than the defaults. You might try experimenting with this parameter (refer to the man page for the possible values) as different functions can have a large impact on quality depending on the source material. For example, if you find `libavcodec` produces too much blocky artifacting, you could try selecting the experimental NSSE as comparison function via `*cmp=10`.

For this movie, the resulting AVI will be 138 minutes long and nearly 3GB. And because you said that file size does not matter, this is a perfectly acceptable size. However, if you had wanted it smaller, you could try a lower bitrate. Increasing bitrates have diminishing returns, so while we might clearly see an improvement from 1800Kbit to 2000Kbit, it might not be so noticeable above 2000Kbit. Feel free to experiment until you are happy.

Because we passed the source video through a denoise filter, you may want to add some of it back during playback. This, along with the `spp` post-processing filter, drastically improves the perception of quality and helps eliminate blocky artifacts in the video. With MPlayer's `autoq` option, you can vary the amount of post-processing done by the spp filter depending on available CPU. Also, at this point, you may want to apply gamma and/or color correction to best suit your display. For example:

    mplayer Harry_Potter_2.avi -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3

## 7.4. Encoding with the `Xvid` codec

`Xvid` is a free library for encoding MPEG-4 ASP video streams. Before starting to encode, you need to set up MEncoder to support it.

This guide mainly aims at featuring the same kind of information as x264's encoding guide. Therefore, please begin by reading the first part of that guide.

### 7.4.1. What options should I use to get the best results?

Please begin by reviewing the `Xvid` section of MPlayer's man page. This section is intended to be a supplement to the man page.

The Xvid default settings are already a good tradeoff between speed and quality, therefore you can safely stick to them if the following section puzzles you.

### 7.4.2. Encoding options of `Xvid`

- vhq This setting affects the macroblock decision algorithm, where the higher the setting, the wiser the decision. The default setting may be safely used for every encode, while higher settings always help PSNR but are significantly slower. Please note that a better PSNR does not necessarily mean that the picture will look better, but tells you that it is closer to the original. Turning it off will noticeably speed up encoding; if speed is critical for you, the tradeoff may be worth it.

- bvhq This does the same job as vhq, but does it on B-frames. It has a negligible impact on speed, and slightly improves quality (around +0.1dB PSNR).

- max_bframes A higher number of consecutive allowed B-frames usually improves compressibility, although it may also lead to more blocking artifacts. The default setting is a good tradeoff between compressibility and quality, but you may increase it up to 3 if you are bitrate-starved. You may also decrease it to 1 or 0 if you are aiming at perfect quality, though in that case you should make sure your target bitrate is high enough to ensure that the encoder does not have to increase quantizers to reach it.

- bf_threshold This controls the B-frame sensitivity of the encoder, where a higher value leads to more B-frames being used (and vice versa). This setting is to be used together with `max_bframes`; if you are bitrate-starved, you should increase both `max_bframes` and `bf_threshold`, while you may increase `max_bframes` and reduce `bf_threshold` so that the encoder may use more B-frames in places that only really need them. A low number of `max_bframes` and a high value of `bf_threshold` is probably not a wise choice as it will force the encoder to put B-frames in places that would not benefit from them, therefore reducing visual quality. However, if you need to be compatible with standalone players that only support old DivX profiles (which only supports up to 1 consecutive B-frame), this would be your only way to increase compressibility through using B-frames.

- trellis Optimizes the quantization process to get an optimal tradeoff between PSNR and bitrate, which allows significant bit saving. These bits will in return be spent elsewhere on the video, raising overall visual quality. You should always leave it on as its impact on quality is huge. Even if you are looking for speed, do not disable it until you have turned down `vhq` and all other more CPU-hungry options to the minimum.

- hq_ac Activates a better coefficient cost estimation method, which slightly reduces filesize by around 0.15 to 0.19% (which corresponds to less than 0.01dB PSNR increase), while having a negligible impact on speed. It is therefore recommended to always leave it on.

- cartoon Designed to better encode cartoon content, and has no impact on speed as it just tunes the mode decision heuristics for this type of content.

- me_quality This setting is to control the precision of the motion estimation. The higher `me_quality`, the more precise the estimation of the original motion will be, and the better the resulting clip will capture the original motion.

  The default setting is best in all cases; thus it is not recommended to turn it down unless you are really looking for speed, as all the bits saved by a good motion estimation would be spent elsewhere, raising overall quality. Therefore, do not go any lower than 5, and even that only as a last resort.

- chroma_me Improves motion estimation by also taking the chroma (color) information into account, whereas `me_quality` alone only uses luma (grayscale). This slows down encoding by 5-10% but improves visual quality quite a bit by reducing blocking effects and reduces filesize by around 1.3%. If you are looking for speed, you should disable this option before starting to consider reducing `me_quality`.

- chroma_opt Is intended to increase chroma image quality around pure white/black edges, rather than improving compression. This can help to reduce the "red stairs" effect.

- lumi_mask Tries to give less bitrate to part of the picture that the human eye cannot see very well, which should allow the encoder to spend the saved bits on more important parts of the picture. The quality of the encode yielded by this option highly depends on personal preferences and on the type and monitor settings used to watch it (typically, it will not look as good if it is bright or if it is a TFT monitor).

- qpel Raise the number of candidate motion vectors by increasing the precision of the motion estimation from halfpel to quarterpel. The idea is to find better motion vectors which will in return reduce bitrate (hence increasing quality). However, motion vectors with quarterpel precision require a few extra bits to code, but the candidate vectors do not always give (much) better results. Quite often, the codec still spends bits on the extra precision, but little or no extra quality is gained in return. Unfortunately, there is no way to foresee the possible gains of `qpel`, so you need to actually encode with and without it to know for sure.

  `qpel` can be almost double encoding time, and requires as much as 25% more processing power to decode. It is not supported by all standalone players.

- gmc Tries to save bits on panning scenes by using a single motion vector for the whole frame. This almost always raises PSNR, but significantly slows down encoding (as well as decoding). Therefore, you should only use it when you have turned `vhq` to the maximum. `Xvid`'s GMC is more sophisticated than DivX's, but is only supported by few standalone players.

### 7.4.3. Encoding profiles

Xvid supports encoding profiles through the `profile` option, which are used to impose restrictions on the properties of the Xvid video stream such that it will be playable on anything which supports the chosen profile. The restrictions relate to resolutions, bitrates and certain MPEG-4 features. The following table shows what each profile supports.

| Simple | Advanced Simple | DivX
Profile name | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Handheld | Portable NTSC | Portable PAL | Home Theater NTSC | Home Theater PAL | HDTV
Width [pixels] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280
Height [pixels] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720
Frame rate [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30
Max average bitrate [kbps] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4
Peak average bitrate over 3 secs [kbps] |  |  |  |  |  |  |  |  |  |  | 800 | 8000 | 8000 | 8000 | 8000 | 16000
Max. B-frames | 0 | 0 | 0 | 0 |  |  |  |  |  |  | 0 | 1 | 1 | 1 | 1 | 2
MPEG quantization |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Adaptive quantization |  |  |  |  | X | X | X | X | X | X | X | X | X | X | X | X
Interlaced encoding |  |  |  |  | X | X | X | X | X | X |  |  |  | X | X | X
Quaterpixel |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Global motion compensation |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |

### 7.4.4. Encoding setting examples

The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.

All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.

Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB)
--- | --- | --- | ---
Very high quality | `chroma_opt:vhq=4:bvhq=1:quant_type=mpeg` | 16fps | 0dB
High quality | `vhq=2:bvhq=1:chroma_opt:quant_type=mpeg` | 18fps | -0.1dB
Fast | `turbo:vhq=0` | 28fps | -0.69dB
Realtime | `turbo:nochroma_me:notrellis:max_bframes=0:vhq=0` | 38fps | -1.48dB

## 7.5. Encoding with the `x264` codec

`x264` is a free library for encoding H.264/AVC video streams. Before starting to encode, you need to set up MEncoder to support it.

### 7.5.1. Encoding options of x264

Please begin by reviewing the `x264` section of MPlayer's man page. This section is intended to be a supplement to the man page. Here you will find quick hints about which options are most likely to interest most people. The man page is more terse, but also more exhaustive, and it sometimes offers much better technical detail.

#### 7.5.1.1. Introduction

This guide considers two major categories of encoding options:

1. Options which mainly trade off encoding time vs. quality

2. Options which may be useful for fulfilling various personal preferences and special requirements

Ultimately, only you can decide which options are best for your purposes. The decision for the first class of options is the simplest: you only have to decide whether you think the quality differences justify the speed differences. For the second class of options, preferences may be far more subjective, and more factors may be involved. Note that some of the "personal preferences and special requirements" options can still have large impacts on speed or quality, but that is not what they are primarily useful for. A couple of the "personal preference" options may even cause changes that look better to some people, but look worse to others.

Before continuing, you need to understand that this guide uses only one quality metric: global PSNR. For a brief explanation of what PSNR is, see the Wikipedia article on PSNR. Global PSNR is the last PSNR number reported when you include the `psnr` option in `x264encopts`. Any time you read a claim about PSNR, one of the assumptions behind the claim is that equal bitrates are used.

Nearly all of this guide's comments assume you are using two pass. When comparing options, there are two major reasons for using two pass encoding. First, using two pass often gains around 1dB PSNR, which is a very big difference. Secondly, testing options by doing direct quality comparisons with one pass encodes introduces a major confounding factor: bitrate often varies significantly with each encode. It is not always easy to tell whether quality changes are due mainly to changed options, or if they mostly reflect essentially random differences in the achieved bitrate.

#### 7.5.1.2. Options which primarily affect speed and quality

- subq: Of the options which allow you to trade off speed for quality, `subq` and `frameref` (see below) are usually by far the most important. If you are interested in tweaking either speed or quality, these are the first options you should consider. On the speed dimension, the `frameref` and `subq` options interact with each other fairly strongly. Experience shows that, with one reference frame, `subq=5` (the default setting) takes about 35% more time than `subq=1`. With 6 reference frames, the penalty grows to over 60%. `subq`'s effect on PSNR seems fairly constant regardless of the number of reference frames. Typically, `subq=5` achieves 0.2-0.5 dB higher global PSNR in comparison `subq=1`. This is usually enough to be visible.

  `subq=6` is slower and yields better quality at a reasonable cost. In comparison to `subq=5`, it usually gains 0.1-0.4 dB global PSNR with speed costs varying from 25%-100%. Unlike other levels of `subq`, the behavior of `subq=6` does not depend much on `frameref` and `me`. Instead, the effectiveness of `subq=6` depends mostly upon the number of B-frames used. In normal usage, this means `subq=6` has a large impact on both speed and quality in complex, high motion scenes, but it may not have much effect in low-motion scenes. Note that it is still recommended to always set `bframes` to something other than zero (see below).

  `subq=7` is the slowest, highest quality mode. In comparison to `subq=6`, it usually gains 0.01-0.05 dB global PSNR with speed costs varying from 15%-33%. Since the tradeoff encoding time vs. quality is quite low, you should only use it if you are after every bit saving and if encoding time is not an issue.

- frameref: `frameref` is set to 1 by default, but this should not be taken to imply that it is reasonable to set it to 1. Merely raising `frameref` to 2 gains around 0.15dB PSNR with a 5-10% speed penalty; this seems like a good tradeoff. `frameref=3` gains around 0.25dB PSNR over `frameref=1`, which should be a visible difference. `frameref=3` is around 15% slower than `frameref=1`. Unfortunately, diminishing returns set in rapidly. `frameref=6` can be expected to gain only 0.05-0.1 dB over `frameref=3` at an additional 15% speed penalty. Above `frameref=6`, the quality gains are usually very small (although you should keep in mind throughout this whole discussion that it can vary quite a lot depending on your source). In a fairly typical case, `frameref=12` will improve global PSNR by a tiny 0.02dB over `frameref=6`, at a speed cost of 15%-20%. At such high `frameref` values, the only really good thing that can be said is that increasing it even further will almost certainly never harm PSNR, but the additional quality benefits are barely even measurable, let alone perceptible.

  ### Note:

  Raising `frameref` to unnecessarily high values can and usually does hurt coding efficiency if you turn CABAC off. With CABAC on (the default behavior), the possibility of setting `frameref` "too high" currently seems too remote to even worry about, and in the future, optimizations may remove the possibility altogether.

  If you care about speed, a reasonable compromise is to use low `subq` and `frameref` values on the first pass, and then raise them on the second pass. Typically, this has a negligible negative effect on the final quality: You will probably lose well under 0.1dB PSNR, which should be much too small of a difference to see. However, different values of `frameref` can occasionally affect frametype decision. Most likely, these are rare outlying cases, but if you want to be pretty sure, consider whether your video has either fullscreen repetitive flashing patterns or very large temporary occlusions which might force an I-frame. Adjust the first-pass `frameref` so it is large enough to contain the duration of the flashing cycle (or occlusion). For example, if the scene flashes back and forth between two images over a duration of three frames, set the first pass `frameref` to 3 or higher. This issue is probably extremely rare in live action video material, but it does sometimes come up in video game captures.

- me: This option is for choosing the motion estimation search method. Altering this option provides a straightforward quality-vs-speed tradeoff. `me=dia` is only a few percent faster than the default search, at a cost of under 0.1dB global PSNR. The default setting (`me=hex`) is a reasonable tradeoff between speed and quality. `me=umh` gains a little under 0.1dB global PSNR, with a speed penalty that varies depending on `frameref`. At high values of `frameref` (e.g. 12 or so), `me=umh` is about 40% slower than the default `me=hex`. With `frameref=3`, the speed penalty incurred drops to 25%-30%.

  `me=esa` uses an exhaustive search that is too slow for practical use.

- partitions=all: This option enables the use of 8x4, 4x8 and 4x4 subpartitions in predicted macroblocks (in addition to the default partitions). Enabling it results in a fairly consistent 10%-15% loss of speed. This option is rather useless in source containing only low motion, however in some high-motion source, particularly source with lots of small moving objects, gains of about 0.1dB can be expected.

- bframes: If you are used to encoding with other codecs, you may have found that B-frames are not always useful. In H.264, this has changed: there are new techniques and block types that are possible in B-frames. Usually, even a naive B-frame choice algorithm can have a significant PSNR benefit. It is interesting to note that using B-frames usually speeds up the second pass somewhat, and may also speed up a single pass encode if adaptive B-frame decision is turned off.

  With adaptive B-frame decision turned off (`x264encopts`'s `nob_adapt`), the optimal value for this setting is usually no more than `bframes=1`, or else high-motion scenes can suffer. With adaptive B-frame decision on (the default behavior), it is safe to use higher values; the encoder will reduce the use of B-frames in scenes where they would hurt compression. The encoder rarely chooses to use more than 3 or 4 B-frames; setting this option any higher will have little effect.

- b_adapt: Note: This is on by default.

  With this option enabled, the encoder will use a reasonably fast decision process to reduce the number of B-frames used in scenes that might not benefit from them as much. You can use `b_bias` to tweak how B-frame-happy the encoder is. The speed penalty of adaptive B-frames is currently rather modest, but so is the potential quality gain. It usually does not hurt, however. Note that this only affects speed and frametype decision on the first pass. `b_adapt` and `b_bias` have no effect on subsequent passes.

- b_pyramid: You might as well enable this option if you are using >=2 B-frames; as the man page says, you get a little quality improvement at no speed cost. Note that these videos cannot be read by libavcodec-based decoders older than about March 5, 2005.

- weight_b: In typical cases, there is not much gain with this option. However, in crossfades or fade-to-black scenes, weighted prediction gives rather large bitrate savings. In MPEG-4 ASP, a fade-to-black is usually best coded as a series of expensive I-frames; using weighted prediction in B-frames makes it possible to turn at least some of these into much smaller B-frames. Encoding time cost is minimal, as no extra decisions need to be made. Also, contrary to what some people seem to guess, the decoder CPU requirements are not much affected by weighted prediction, all else being equal.

  Unfortunately, the current adaptive B-frame decision algorithm has a strong tendency to avoid B-frames during fades. Until this changes, it may be a good idea to add `nob_adapt` to your x264encopts, if you expect fades to have a large effect in your particular video clip.

- threads: This option allows to spawn threads to encode in parallel on multiple CPUs. You can manually select the number of threads to be created or, better, set `threads=auto` and let `x264` detect how many CPUs are available and pick an appropriate number of threads. If you have a multi-processor machine, you should really consider using it as it can to increase encoding speed linearly with the number of CPU cores (about 94% per CPU core), with very little quality reduction (about 0.005dB for dual processor, about 0.01dB for a quad processor machine).

#### 7.5.1.3. Options pertaining to miscellaneous preferences

- Two pass encoding: Above, it was suggested to always use two pass encoding, but there are still reasons for not using it. For instance, if you are capturing live TV and encoding in realtime, you are forced to use single-pass. Also, one pass is obviously faster than two passes; if you use the exact same set of options on both passes, two pass encoding is almost twice as slow.

  Still, there are very good reasons for using two pass encoding. For one thing, single pass ratecontrol is not psychic, and it often makes unreasonable choices because it cannot see the big picture. For example, suppose you have a two minute long video consisting of two distinct halves. The first half is a very high-motion scene lasting 60 seconds which, in isolation, requires about 2500kbps in order to look decent. Immediately following it is a much less demanding 60-second scene that looks good at 300kbps. Suppose you ask for 1400kbps on the theory that this is enough to accomodate both scenes. Single pass ratecontrol will make a couple of "mistakes" in such a case. First of all, it will target 1400kbps in both segments. The first segment may end up heavily overquantized, causing it to look unacceptably and unreasonably blocky. The second segment will be heavily underquantized; it may look perfect, but the bitrate cost of that perfection will be completely unreasonable. What is even harder to avoid is the problem at the transition between the two scenes. The first seconds of the low motion half will be hugely over-quantized, because the ratecontrol is still expecting the kind of bitrate requirements it met in the first half of the video. This "error period" of heavily over-quantized low motion will look jarringly bad, and will actually use less than the 300kbps it would have taken to make it look decent. There are ways to mitigate the pitfalls of single-pass encoding, but they may tend to increase bitrate misprediction.

  Multipass ratecontrol can offer huge advantages over a single pass. Using the statistics gathered from the first pass encode, the encoder can estimate, with reasonable accuracy, the "cost" (in bits) of encoding any given frame, at any given quantizer. This allows for a much more rational, better planned allocation of bits between the expensive (high-motion) and cheap (low-motion) scenes. See `qcomp` below for some ideas on how to tweak this allocation to your liking.

  Moreover, two passes need not take twice as long as one pass. You can tweak the options in the first pass for higher speed and lower quality. If you choose your options well, you can get a very fast first pass. The resulting quality in the second pass will be slightly lower because size prediction is less accurate, but the quality difference is normally much too small to be visible. Try, for example, adding `subq=1:frameref=1` to the first pass `x264encopts`. Then, on the second pass, use slower, higher-quality options: `subq=6:frameref=15:partitions=all:me=umh`

- Three pass encoding? x264 offers the ability to make an arbitrary number of consecutive passes. If you specify `pass=1` on the first pass, then use `pass=3` on a subsequent pass, the subsequent pass will both read the statistics from the previous pass, and write its own statistics. An additional pass following this one will have a very good base from which to make highly accurate predictions of framesizes at a chosen quantizer. In practice, the overall quality gain from this is usually close to zero, and quite possibly a third pass will result in slightly worse global PSNR than the pass before it. In typical usage, three passes help if you get either bad bitrate prediction or bad looking scene transitions when using only two passes. This is somewhat likely to happen on extremely short clips. There are also a few special cases in which three (or more) passes are handy for advanced users, but for brevity, this guide omits discussing those special cases.

- qcomp: `qcomp` trades off the number of bits allocated to "expensive" high-motion versus "cheap" low-motion frames. At one extreme, `qcomp=0` aims for true constant bitrate. Typically this would make high-motion scenes look completely awful, while low-motion scenes would probably look absolutely perfect, but would also use many times more bitrate than they would need in order to look merely excellent. At the other extreme, `qcomp=1` achieves nearly constant quantization parameter (QP). Constant QP does not look bad, but most people think it is more reasonable to shave some bitrate off of the extremely expensive scenes (where the loss of quality is not as noticeable) and reallocate it to the scenes that are easier to encode at excellent quality. `qcomp` is set to 0.6 by default, which may be slightly low for many peoples' taste (0.7-0.8 are also commonly used).

- keyint: `keyint` is solely for trading off file seekability against coding efficiency. By default, `keyint` is set to 250. In 25fps material, this guarantees the ability to seek to within 10 seconds precision. If you think it would be important and useful to be able to seek within 5 seconds of precision, set `keyint=125`; this will hurt quality/bitrate slightly. If you care only about quality and not about seekability, you can set it to much higher values (understanding that there are diminishing returns which may become vanishingly low, or even zero). The video stream will still have seekable points as long as there are some scene changes.

- deblock: This topic is going to be a bit controversial.

  H.264 defines a simple deblocking procedure on I-blocks that uses pre-set strengths and thresholds depending on the QP of the block in question. By default, high QP blocks are filtered heavily, and low QP blocks are not deblocked at all. The pre-set strengths defined by the standard are well-chosen and the odds are very good that they are PSNR-optimal for whatever video you are trying to encode. The `deblock` allow you to specify offsets to the preset deblocking thresholds.

  Many people seem to think it is a good idea to lower the deblocking filter strength by large amounts (say, -3). This is however almost never a good idea, and in most cases, people who are doing this do not understand very well how deblocking works by default.

  The first and most important thing to know about the in-loop deblocking filter is that the default thresholds are almost always PSNR-optimal. In the rare cases that they are not optimal, the ideal offset is plus or minus 1. Adjusting deblocking parameters by a larger amount is almost guaranteed to hurt PSNR. Strengthening the filter will smear more details; weakening the filter will increase the appearance of blockiness.

  It is definitely a bad idea to lower the deblocking thresholds if your source is mainly low in spacial complexity (i.e., not a lot of detail or noise). The in-loop filter does a rather excellent job of concealing the artifacts that occur. If the source is high in spacial complexity, however, artifacts are less noticeable. This is because the ringing tends to look like detail or noise. Human visual perception easily notices when detail is removed, but it does not so easily notice when the noise is wrongly represented. When it comes to subjective quality, noise and detail are somewhat interchangeable. By lowering the deblocking filter strength, you are most likely increasing error by adding ringing artifacts, but the eye does not notice because it confuses the artifacts with detail.

  This still does not justify lowering the deblocking filter strength, however. You can generally get better quality noise from postprocessing. If your H.264 encodes look too blurry or smeared, try playing with `-vf noise` when you play your encoded movie. `-vf noise=8a:4a` should conceal most mild artifacting. It will almost certainly look better than the results you would have gotten just by fiddling with the deblocking filter.

### 7.5.2. Encoding setting examples

The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.

All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.

Description | Encoding options | speed (in fps) | Relative PSNR loss (in dB)
--- | --- | --- | ---
Very high quality | `subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b` | 6fps | 0dB
High quality | `subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b` | 13fps | -0.89dB
Fast | `subq=4:bframes=2:b_pyramid=normal:weight_b` | 17fps | -1.48dB

## 7.6. Encoding with the `Video For Windows` codec family

Video for Windows provides simple encoding by means of binary video codecs. You can encode with the following codecs (if you have more, please tell us!)

Note that support for this is very experimental and some codecs may not work correctly. Some codecs will only work in certain colorspaces, try `-vf format=bgr24` and `-vf format=yuy2` if a codec fails or gives wrong output.

### 7.6.1. Video for Windows supported codecs

Video codec file name | Description (FourCC) | md5sum | Comment
--- | --- | --- | ---
aslcodec_vfw.dll | Alparysoft lossless codec vfw (ASLC) | 608af234a6ea4d90cdc7246af5f3f29a |
avimszh.dll | AVImszh (MSZH) | 253118fe1eedea04a95ed6e5f4c28878 | needs `-vf format`
avizlib.dll | AVIzlib (ZLIB) | 2f1cc76bbcf6d77d40d0e23392fa8eda |
divx.dll | DivX4Windows-VFW | acf35b2fc004a89c829531555d73f1e6 |
huffyuv.dll | HuffYUV (lossless) (HFYU) | b74695b50230be4a6ef2c4293a58ac3b |
iccvid.dll | Cinepak Video (cvid) | cb3b7ee47ba7dbb3d23d34e274895133 |
icmw_32.dll | Motion Wavelets (MWV1) | c9618a8fc73ce219ba918e3e09e227f2 |
jp2avi.dll | ImagePower MJPEG2000 (IPJ2) | d860a11766da0d0ea064672c6833768b | `-vf flip`
m3jp2k32.dll | Morgan MJPEG2000 (MJ2C) | f3c174edcbaef7cb947d6357cdfde7ff |
m3jpeg32.dll | Morgan Motion JPEG Codec (MJPG) | 1cd13fff5960aa2aae43790242c323b1 |
mpg4c32.dll | Microsoft MPEG-4 v1/v2 | b5791ea23f33010d37ab8314681f1256 |
tsccvid.dll | TechSmith Camtasia Screen Codec (TSCC) | 8230d8560c41d444f249802a2700d1d5 | shareware error on windows
vp31vfw.dll | On2 Open Source VP3 Codec (VP31) | 845f3590ea489e2e45e876ab107ee7d2 |
vp4vfw.dll | On2 VP4 Personal Codec (VP40) | fc5480a482ccc594c2898dcc4188b58f |
vp6vfw.dll | On2 VP6 Personal Codec (VP60) | 04d635a364243013898fd09484f913fb |
vp7vfw.dll | On2 VP7 Personal Codec (VP70) | cb4cc3d4ea7c94a35f1d81c3d750bc8d | wrong FourCC?
ViVD2.dll | SoftMedia ViVD V2 codec VfW (GXVE) | a7b4bf5cac630bb9262c3f80d8a773a1 |
msulvc06.DLL | MSU Lossless codec (MSUD) | 294bf9288f2f127bb86f00bfcc9ccdda | Decodable by Window Media Player, not MPlayer (yet).
camcodec.dll | CamStudio lossless video codec (CSCD) | 0efe97ce08bb0e40162ab15ef3b45615 | sf.net/projects/camstudio

The first column contains the codec names that should be passed after the `codec` parameter, like: `-xvfwopts codec=divx.dll` The FourCC code used by each codec is given in the parentheses.

An example to convert an ISO DVD trailer to a VP6 flash video file using compdata bitrate settings:

    mencoder -dvd-device zeiram.iso dvd://7 -o trailer.flv \
    -ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=onepass.mcf -oac mp3lame \
    -lameopts cbr:br=64 -af lavcresample=22050 -vf yadif,scale=320:240,flip \
    -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames

### 7.6.2. Using vfw2menc to create a codec settings file.

To encode with the Video for Windows codecs, you will need to set bitrate and other options. This is known to work on x86 on both *NIX and Windows.

First you must build the vfw2menc program. It is located in the `TOOLS` subdirectory of the MPlayer source tree. To build on Linux, this can be done using Wine:

    winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32

To build on Windows in MinGW or Cygwin use:

    gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32

To build on MSVC you will need getopt. Getopt can be found in the original vfw2menc archive available at: The MPlayer on win32 project.

Below is an example with the VP6 codec.

    vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf

This will open the VP6 codec dialog window. Repeat this step for the second pass and use `-s `secondpass.mcf``.

Windows users can use `-xvfwopts codec=vp6vfw.dll:compdata=dialog` to have the codec dialog display before encoding starts.

## 7.7. Using MEncoder to create QuickTime-compatible files

### 7.7.1. Why would one want to produce QuickTime-compatible Files?

There are several reasons why producing QuickTime-compatible files can be desirable.

- You want any computer illiterate to be able to watch your encode on any major platform (Windows, Mac OS X, Unices …).

- QuickTime is able to take advantage of more hardware and software acceleration features of Mac OS X than platform-independent players like MPlayer or VLC. That means that your encodes have a chance to be played smoothly by older G4-powered machines.

- QuickTime 7 supports the next-generation codec H.264, which yields significantly better picture quality than previous codec generations (MPEG-2, MPEG-4 …).

### 7.7.2. QuickTime 7 limitations

QuickTime 7 supports H.264 video and AAC audio, but it does not support them muxed in the AVI container format. However, you can use MEncoder to encode the video and audio, and then use an external program such as mp4creator (part of the MPEG4IP suite) to remux the video and audio tracks into an MP4 container.

QuickTime's support for H.264 is limited, so you will need to drop some advanced features. If you encode your video with features that QuickTime 7 does not support, QuickTime-based players will show you a pretty white screen instead of your expected video.

- B-frames: QuickTime 7 supports a maximum of 1 B-frame, i.e. `-x264encopts bframes=1`. This means that `b_pyramid` and `weight_b` will have no effect, since they require `bframes` to be greater than 1.

- Macroblocks: QuickTime 7 does not support 8x8 DCT macroblocks. This option (`8x8dct`) is off by default, so just be sure not to explicitly enable it. This also means that the `i8x8` option will have no effect, since it requires `8x8dct`.

- Aspect ratio: QuickTime 7 does not support SAR (sample aspect ratio) information in MPEG-4 files; it assumes that SAR=1. Read the section on scaling for a workaround.

### 7.7.3. Cropping

Suppose you want to rip your freshly bought copy of "The Chronicles of Narnia". Your DVD is region 1, which means it is NTSC. The example below would still apply to PAL, except you would omit `-ofps 24000/1001` and use slightly different `crop` and `scale` dimensions.

After running `mplayer dvd://1`, you follow the process detailed in the section How to deal with telecine and interlacing in NTSC DVDs and discover that it is 24000/1001 fps progressive video. This simplifies the process somewhat, since you do not need to use an inverse telecine filter such as `pullup` or a deinterlacing filter such as `yadif`.

Next, you need to crop out the black bars from the top and bottom of the video, as detailed in this previous section.

### 7.7.4. Scaling

The next step is truly heartbreaking. QuickTime 7 does not support MPEG-4 videos with a sample aspect ratio other than 1, so you will need to upscale (which wastes a lot of disk space) or downscale (which loses some details of the source) the video to square pixels. Either way you do it, this is highly inefficient, but simply cannot be avoided if you want your video to be playable by QuickTime 7. MEncoder can apply the appropriate upscaling or downscaling by specifying respectively `-vf scale=-10:-1` or `-vf scale=-1:-10`. This will scale your video to the correct width for the cropped height, rounded to the closest multiple of 16 for optimal compression. Remember that if you are cropping, you should crop first, then scale:

    -vf crop=720:352:0:62,scale=-10:-1

### 7.7.5. A/V sync

Because you will be remuxing into a different container, you should always use the `harddup` option to ensure that duplicated frames are actually duplicated in the video output. Without this option, MEncoder will simply put a marker in the video stream that a frame was duplicated, and rely on the client software to show the same frame twice. Unfortunately, this "soft duplication" does not survive remuxing, so the audio would slowly lose sync with the video.

The final filter chain looks like this:

    -vf crop=720:352:0:62,scale=-10:-1,harddup

### 7.7.6. Bitrate

As always, the selection of bitrate is a matter of the technical properties of the source, as explained here, as well as a matter of taste. This movie has a fair bit of action and lots of detail, but H.264 video looks good at much lower bitrates than XviD or other MPEG-4 codecs. After much experimentation, the author of this guide chose to encode this movie at 900kbps, and thought that it looked very good. You may decrease bitrate if you need to save more space, or increase it if you need to improve quality.

### 7.7.7. Encoding example

You are now ready to encode the video. Since you care about quality, of course you will be doing a two-pass encode. To shave off some encoding time, you can specify the `turbo` option on the first pass; this reduces `subq` and `frameref` to 1. To save some disk space, you can use the `ss` option to strip off the first few seconds of the video. (I found that this particular movie has 32 seconds of credits and logos.) `bframes` can be 0 or 1. The other options are documented in Encoding with the `x264` codec and the man page.

    mencoder dvd://1 -o /dev/null -ss 32 -ovc x264 \
    -x264encopts pass=1:turbo:bitrate=900:bframes=1:\
    me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
    -vf crop=720:352:0:62,scale=-10:-1,harddup \
    -oac faac -faacopts br=192:mpeg=4:object=1 -channels 2 -srate 48000 \
    -ofps 24000/1001

If you have a multi-processor machine, don't miss the opportunity to dramatically speed-up encoding by enabling `x264`'s multi-threading mode by adding `threads=auto` to your `x264encopts` command-line.

The second pass is the same, except that you specify the output file and set `pass=2`.

    mencoder dvd://1 -o narnia.avi -ss 32 -ovc x264 \
    -x264encopts pass=2:turbo:bitrate=900:frameref=5:bframes=1:\
    me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
    -vf crop=720:352:0:62,scale=-10:-1,harddup \
    -oac faac -faacopts br=192:mpeg=4:object=1 -channels 2 -srate 48000 \
    -ofps 24000/1001

The resulting AVI should play perfectly in MPlayer, but of course QuickTime can not play it because it does not support H.264 muxed in AVI. So the next step is to remux the video into an MP4 container.

### 7.7.8. Remuxing as MP4

There are several ways to remux AVI files to MP4. You can use mp4creator, which is part of the MPEG4IP suite.

First, demux the AVI into separate audio and video streams using MPlayer.

    mplayer narnia.avi -dumpaudio -dumpfile narnia.aac
    mplayer narnia.avi -dumpvideo -dumpfile narnia.h264

The filenames are important; mp4creator requires that AAC audio streams be named `.aac` and H.264 video streams be named `.h264`.

Now use mp4creator to create a new MP4 file out of the audio and video streams.

    mp4creator -create=narnia.aac narnia.mp4
    mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4

Unlike the encoding step, you must specify the framerate as a decimal (such as 23.976), not a fraction (such as 24000/1001).

This `narnia.mp4` file should now be playable with any QuickTime 7 application, such as QuickTime Player or iTunes. If you are planning to view the video in a web browser with the QuickTime plugin, you should also hint the movie so that the QuickTime plugin can start playing it while it is still downloading. mp4creator can create these hint tracks:

    mp4creator -hint=1 narnia.mp4
    mp4creator -hint=2 narnia.mp4
    mp4creator -optimize narnia.mp4

You can check the final result to ensure that the hint tracks were created successfully:

    mp4creator -list narnia.mp4

You should see a list of tracks: 1 audio, 1 video, and 2 hint tracks.

    Track   Type    Info
    1       audio   MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz
    2       video   H264 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
    3       hint    Payload mpeg4-generic for track 1
    4       hint    Payload H264 for track 2

### 7.7.9. Adding metadata tags

If you want to add tags to your video that show up in iTunes, you can use AtomicParsley.

    AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite

The `--metaEnema` option removes any existing metadata (mp4creator inserts its name in the "encoding tool" tag), and `--freefree` reclaims the space from the deleted metadata. The `--stik` option sets the type of video (such as Movie or TV Show), which iTunes uses to group related video files. The `--overWrite` option overwrites the original file; without it, AtomicParsley creates a new auto-named file in the same directory and leaves the original file untouched.

## 7.8. Using MEncoder to create VCD/SVCD/DVD-compliant files

### 7.8.1. Format Constraints

MEncoder is capable of creating VCD, SCVD and DVD format MPEG files using the `libavcodec` library. These files can then be used in conjunction with vcdimager or dvdauthor to create discs that will play on a standard set-top player.

The DVD, SVCD, and VCD formats are subject to heavy constraints. Only a small selection of encoded picture sizes and aspect ratios are available. If your movie does not already meet these requirements, you may have to scale, crop or add black borders to the picture to make it compliant.

#### 7.8.1.1. Format Constraints

Format | Resolution | V. Codec | V. Bitrate | Sample Rate | A. Codec | A. Bitrate | FPS | Aspect
--- | --- | --- | --- | --- | --- | --- | --- | ---
NTSC DVD | 720x480, 704x480, 352x480, 352x240 | MPEG-2 | 9800 kbps | 48000 Hz | AC-3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9 (only for 720x480)
NTSC DVD | 352x240[a] | MPEG-1 | 1856 kbps | 48000 Hz | AC-3,PCM | 1536 kbps (max) | 30000/1001, 24000/1001 | 4:3, 16:9
NTSC SVCD | 480x480 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 30000/1001 | 4:3
NTSC VCD | 352x240 | MPEG-1 | 1150 kbps | 44100 Hz | MP2 | 224 kbps | 24000/1001, 30000/1001 | 4:3
PAL DVD | 720x576, 704x576, 352x576, 352x288 | MPEG-2 | 9800 kbps | 48000 Hz | MP2,AC-3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9 (only for 720x576)
PAL DVD | 352x288[a] | MPEG-1 | 1856 kbps | 48000 Hz | MP2,AC-3,PCM | 1536 kbps (max) | 25 | 4:3, 16:9
PAL SVCD | 480x576 | MPEG-2 | 2600 kbps | 44100 Hz | MP2 | 384 kbps (max) | 25 | 4:3
PAL VCD | 352x288 | MPEG-1 | 1152 kbps | 44100 Hz | MP2 | 224 kbps | 25 | 4:3
[a] These resolutions are rarely used for DVDs because they are fairly low quality.

If your movie has 2.35:1 aspect (most recent action movies), you will have to add black borders or crop the movie down to 16:9 to make a DVD or VCD. If you add black borders, try to align them at 16-pixel boundaries in order to minimize the impact on encoding performance. Thankfully DVD has sufficiently excessive bitrate that you do not have to worry too much about encoding efficiency, but SVCD and VCD are highly bitrate-starved and require effort to obtain acceptable quality.

#### 7.8.1.2. GOP Size Constraints

DVD, VCD, and SVCD also constrain you to relatively low GOP (Group of Pictures) sizes. For 30 fps material the largest allowed GOP size is 18. For 25 or 24 fps, the maximum is 15. The GOP size is set using the `keyint` option.

#### 7.8.1.3. Bitrate Constraints

VCD video is required to be CBR at 1152 kbps. This highly limiting constraint also comes along with an extremly low vbv buffer size of 327 kilobits. SVCD allows varying video bitrates up to 2500 kbps, and a somewhat less restrictive vbv buffer size of 917 kilobits is allowed. DVD video bitrates may range anywhere up to 9800 kbps (though typical bitrates are about half that), and the vbv buffer size is 1835 kilobits.

### 7.8.2. Output Options

MEncoder has options to control the output format. Using these options we can instruct it to create the correct type of file.

The options for VCD and SVCD are called xvcd and xsvcd, because they are extended formats. They are not strictly compliant, mainly because the output does not contain scan offsets. If you need to generate an SVCD image, you should pass the output file to vcdimager.

VCD:

    -of mpeg -mpegopts format=xvcd

SVCD:

    -of mpeg -mpegopts format=xsvcd

DVD (with timestamps on every frame, if possible):

    -of mpeg -mpegopts format=dvd:tsaf

DVD with NTSC Pullup:

    -of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001

This allows 24000/1001 fps progressive content to be encoded at 30000/1001 fps whilst maintaing DVD-compliance.

#### 7.8.2.1. Aspect Ratio

The aspect argument of `-lavcopts` is used to encode the aspect ratio of the file. During playback the aspect ratio is used to restore the video to the correct size.

16:9 or "Widescreen"

    -lavcopts aspect=16/9

4:3 or "Fullscreen"

    -lavcopts aspect=4/3

2.35:1 or "Cinemascope" NTSC

    -vf scale=720:368,expand=720:480 -lavcopts aspect=16/9

To calculate the correct scaling size, use the expanded NTSC width of 854/2.35 = 368

2.35:1 or "Cinemascope" PAL

    -vf scale=720:432,expand=720:576 -lavcopts aspect=16/9

To calculate the correct scaling size, use the expanded PAL width of 1024/2.35 = 432

#### 7.8.2.2. Maintaining A/V sync

In order to maintain audio/video synchronization throughout the encode, MEncoder has to drop or duplicate frames. This works rather well when muxing into an AVI file, but is almost guaranteed to fail to maintain A/V sync with other muxers such as MPEG. This is why it is necessary to append the `harddup` video filter at the end of the filter chain to avoid this kind of problem. You can find more technical information about `harddup` in the section Improving muxing and A/V sync reliability or in the manual page.

#### 7.8.2.3. Sample Rate Conversion

If the audio sample rate in the original file is not the same as required by the target format, sample rate conversion is required. This is achieved using the `-srate` option and the `-af lavcresample` audio filter together.

DVD:

    -srate 48000 -af lavcresample=48000

VCD and SVCD:

    -srate 44100 -af lavcresample=44100

### 7.8.3. Using libavcodec for VCD/SVCD/DVD Encoding

#### 7.8.3.1. Introduction

`libavcodec` can be used to create VCD/SVCD/DVD compliant video by using the appropriate options.

#### 7.8.3.2. lavcopts

This is a list of fields in `-lavcopts` that you may be required to change in order to make a complaint movie for VCD, SVCD, or DVD:

- acodec: `mp2` for VCD, SVCD, or PAL DVD; `ac3` is most commonly used for DVD. PCM audio may also be used for DVD, but this is mostly a big waste of space. Note that MP3 audio is not compliant for any of these formats, but players often have no problem playing it anyway.

- abitrate: 224 for VCD; up to 384 for SVCD; up to 1536 for DVD, but commonly used values range from 192 kbps for stereo to 384 kbps for 5.1 channel sound.

- vcodec: `mpeg1video` for VCD; `mpeg2video` for SVCD; `mpeg2video` is usually used for DVD but you may also use `mpeg1video` for CIF resolutions.

- keyint: Used to set the GOP size. 18 for 30fps material, or 15 for 25/24 fps material. Commercial producers seem to prefer keyframe intervals of 12. It is possible to make this much larger and still retain compatibility with most players. A `keyint` of 25 should never cause any problems.

- vrc_buf_size: 327 for VCD, 917 for SVCD, and 1835 for DVD.

- vrc_minrate: 1152, for VCD. May be left alone for SVCD and DVD.

- vrc_maxrate: 1152 for VCD; 2500 for SVCD; 9800 for DVD. For SVCD and DVD, you might wish to use lower values depending on your own personal preferences and requirements.

- vbitrate: 1152 for VCD; up to 2500 for SVCD; up to 9800 for DVD. For the latter two formats, vbitrate should be set based on personal preference. For instance, if you insist on fitting 20 or so hours on a DVD, you could use vbitrate=400. The resulting video quality would probably be quite bad. If you are trying to squeeze out the maximum possible quality on a DVD, use vbitrate=9800, but be warned that this could constrain you to less than an hour of video on a single-layer DVD.

- vstrict: `vstrict`=0 should be used to create DVDs. Without this option, MEncoder creates a stream that cannot be correctly decoded by some standalone DVD players.

#### 7.8.3.3. Examples

This is a typical minimum set of `-lavcopts` for encoding video:

VCD:

    -lavcopts vcodec=mpeg1video:vrc_buf_size=327:vrc_minrate=1152:\
    vrc_maxrate=1152:vbitrate=1152:keyint=15:acodec=mp2

SVCD:

    -lavcopts vcodec=mpeg2video:vrc_buf_size=917:vrc_maxrate=2500:vbitrate=1800:\
    keyint=15:acodec=mp2

DVD:

    -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=15:vstrict=0:acodec=ac3

#### 7.8.3.4. Advanced Options

For higher quality encoding, you may also wish to add quality-enhancing options to lavcopts, such as `trell`, `mbd=2`, and others. Note that `qpel` and `v4mv`, while often useful with MPEG-4, are not usable with MPEG-1 or MPEG-2. Also, if you are trying to make a very high quality DVD encode, it may be useful to add `dc=10` to lavcopts. Doing so may help reduce the appearance of blocks in flat-colored areas. Putting it all together, this is an example of a set of lavcopts for a higher quality DVD:

    -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=8000:\
    keyint=15:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:\
    vqmin=1:lmin=1:dc=10:vstrict=0

### 7.8.4. Encoding Audio

VCD and SVCD support MPEG-1 layer II audio, using one of `toolame`, `twolame`, or `libavcodec`'s MP2 encoder. The libavcodec MP2 is far from being as good as the other two libraries, however it should always be available to use. VCD only supports constant bitrate audio (CBR) whereas SVCD supports variable bitrate (VBR), too. Be careful when using VBR because some bad standalone players might not support it too well.

For DVD audio, `libavcodec`'s AC-3 codec is used.

#### 7.8.4.1. toolame

For VCD and SVCD:

    -oac toolame -toolameopts br=224

#### 7.8.4.2. twolame

For VCD and SVCD:

    -oac twolame -twolameopts br=224

#### 7.8.4.3. libavcodec

For DVD with 2 channel sound:

    -oac lavc -lavcopts acodec=ac3:abitrate=192

For DVD with 5.1 channel sound:

    -channels 6 -oac lavc -lavcopts acodec=ac3:abitrate=384

For VCD and SVCD:

    -oac lavc -lavcopts acodec=mp2:abitrate=224

### 7.8.5. Putting it all Together

This section shows some complete commands for creating VCD/SVCD/DVD compliant videos.

#### 7.8.5.1. PAL DVD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
      -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \
      -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 \
      -o movie.mpg movie.avi

#### 7.8.5.2. NTSC DVD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
      -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 \
      -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 \
      -o movie.mpg movie.avi

#### 7.8.5.3. PAL AVI Containing AC-3 Audio to DVD

If the source already has AC-3 audio, use -oac copy instead of re-encoding it.

    mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
      -vf scale=720:576,harddup -ofps 25 \
      -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
    keyint=15:vstrict=0:aspect=16/9 -o movie.mpg movie.avi

#### 7.8.5.4. NTSC AVI Containing AC-3 Audio to DVD

If the source already has AC-3 audio, and is NTSC @ 24000/1001 fps:

    mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf:telecine \
      -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:\
      vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:aspect=16/9 -ofps 24000/1001 \
      -o movie.mpg movie.avi

#### 7.8.5.5. PAL SVCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \
        scale=480:576,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917:vrc_minrate=600:\
    vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224 -ofps 25 \
        -o movie.mpg movie.avi

#### 7.8.5.6. NTSC SVCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd  -vf \
        scale=480:480,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg2video:mbd=2:keyint=18:vrc_buf_size=917:vrc_minrate=600:\
    vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224 -ofps 30000/1001 \
        -o movie.mpg movie.avi

#### 7.8.5.7. PAL VCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \
        scale=352:288,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:\
    vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224 -ofps 25 \
        -o movie.mpg movie.avi

#### 7.8.5.8. NTSC VCD

    mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \
        scale=352:240,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
        vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:\
    vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224 -ofps 30000/1001 \
        -o movie.mpg movie.avi

[1] Fai comunque attenzione: la decodifica di video MPEG-4 AVC a risoluzione DVD richiede una macchina veloce (per es. un Pentium 4 oltre 1.5GHz o un Pentium M superiore a 1GHz).

[2] La stessa codifica potrebbe non apparire uguale sullo schermo di qualcun altro o se riprodotta con un decodificatore differente, perciò controlla i tuoi risultati riproducendoli in diverse condizioni.

# Capitolo 8. Frequently Asked Questions

8.1. Sviluppo
  Domanda: Come posso creare una patch adeguata per MPlayer?
  Domanda: Come traduco MPlayer in una nuova lingua?
  Domanda: Come posso supportare lo sviluppo di MPlayer?
  Domanda: Come divento uno sviluppatore di MPlayer?
  Domanda: Perché non usate autoconf/automake?
8.2. Compilazione e installazione
  Domanda: La compilazione fallisce con un errore e gcc se ne esce con qualche messaggio criptico contenente la frase internal compiler error o unable to find a register to spill o can't find a register in class `GENERAL_REGS' while reloading `asm'.
  Domanda: Ci sono pacchetti binari (Debian/RPM) di MPlayer?
  Domanda: Come posso compilare MPlayer a 32 bit su un Athlon a 64 bit?
  Domanda: configure si ferma con questo testo, e MPlayer non compila! Your gcc does not support even i386 for '-march' and '-mcpu'
  Domanda: Ho una Matrox G200/G400/G450/G550, come compilo/uso il driver mga_vid?
  Domanda: Durante il 'make', MPlayer si lamenta che mancano le librerie di X11. Non capisco, io ho X11 installato!?
  Domanda: La compilazione sotto Mac OS 10.3 dà molti errori di link.
8.3. Domande generali
  Domanda: Ci sono mailing list su MPlayer?
  Domanda: Ho trovato un brutto baco cercando di riprodurre il mio video preferito! Chi dovrei informare?
  Domanda: Ho dei problemi a leggere dei file col codec ... . Posso usarli?
  Domanda: Quando avvio la riproduzione, esce questo messaggio, ma tutto sembra a posto: Linux RTC init: ioctl (rtc_pie_on): Permission denied
  Domanda: Come posso salvare un'istantanea (screenshot)?
  Domanda: Qual'è il significato dei numeri sulla linea di stato?
  Domanda: Ci sono dei messaggi di errore circa un file non trovato /usr/local/lib/codecs/ ...
  Domanda: Come posso far sì che MPlayer si ricordi le opzioni che uso per un dato file, per es. filmato.avi?
  Domanda: I sottotitoli sono molto belli, i migliori ch'io abbia mai visto, ma rallentano la riproduzione! So che è strano ...
  Domanda: Non riesco ad aprire il menu della GUI. Premo il tasto destro, ma non accedo ad alcuna voce del menu!
  Domanda: Come posso eseguire MPlayer in background?
8.4. Problemi di riproduzione
  Domanda: Non riesco ad isolare la causa di qualche strano problema di riproduzione.
  Domanda: Come faccio a far sì che i sottotitoli vengano visualizzati sui margini neri esterni al film?
  Domanda: Come seleziono le tracce audio/sottotitoli di un file DVD, OGM, Matroska o NUT?
  Domanda: Sto cercando di riprodurre un qualche file da internet ma non ce la fa.
  Domanda: Ho scaricato un film da una rete P2P e non funziona!
  Domanda: Ho problemi con la visualizzazione dei miei sottotitoli, aiuto!!
  Domanda: Perché MPlayer non funziona in Fedora Core?
  Domanda: MPlayer muore con MPlayer interrupted by signal 4 in module: decode_video
  Domanda: Quando cerco di acquisire dal mio sintonizzatore, ci riesco, ma i colori sono strani. Con altre applicazioni è OK.
  Domanda: Ottengo dei valori percentuali molto strani (decisamente troppo alti) riproducendo file sul mio portatile.
  Domanda: Quando eseguo MPlayer da utente root sul mio portatile, l'audio e il video vanno totalmente fuori sincronia. Funziona normalmente quando lo eseguo da utente normale.
  Domanda: Riproducendo un film, questo di colpo diventa scattoso e ottengo il messaggio seguente: Badly interleaved AVI file detected - switching to -ni mode...
8.5. Problemi dei driver video/audio (vo/ao)
  Domanda: Quando riproduco a schermo intero ottengo solo bordi neri intorno all'immagine e nessun vero ridimensionamento in modalità a schermo intero.
  Domanda: Ho appena installato MPlayer. Quando voglio aprire un file video causa un errore fatale: Errore aprendo/inizializzando il dispositivo uscita video (-vo) selezionato! Come posso risovlere il mio problema?
  Domanda: Ho dei problemi con [il tuo window manager] e le modalità a schermo pieno di xv/xmga/sdl/x11 ...
  Domanda: Riproducendo un file AVI, l'audio perde la sincronizzazione.
  Domanda: Il mio computer riproduce gli AVI MS DivX a risoluzione ~ 640x300 e l'audio MP3 stereo è troppo lento. Quando uso l'opzione -nosound, tutto è OK (ma silenzioso).
  Domanda: Come faccio ad usare dmix con MPlayer?
  Domanda: Riproducendo un video non sento alcun suono e ricevo messaggi di errore simili a questo: AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian) audio_setup: Can't open audio device /dev/dsp: Device or resource busy couldn't open/init audio device -> NOSOUND Audio: no sound!!! Start playing...
  Domanda: Avviando MPlayer in KDE ottengo solo una schermata nera e non succede nulla. Dopo circa un minuto inizia la riproduzione del video.
  Domanda: Ho problemi di sincronia A/V. Alcuni miei AVI vengono riprodotti bene, ma alcuni vanno a velocià doppia!
  Domanda: Quando riproduco questo film ho desincronizzazione video-audio e/o MPlayer va in crash con il seguente messaggio: DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!
  Domanda: Come faccio ad eliminare la desincronizzazione A/V durante la ricerca attraverso flussi RealMedia?
8.6. Riproduzione DVD
  Domanda: Circa la navigazione/menu del DVD?
  Domanda: Non riesco a guardare alcun DVD recente di Sony Pictures/BMG.
  Domanda: Riguardo i sottotitoli? MPlayer può mostrarli?
  Domanda: Come posso impostare il codice di zona del mio lettore DVD? Non ho Windows!
  Domanda: Non riesco a riprodurre un DVD, MPlayer si blocca o emette degli errori tipo "Encrypted VOB file!".
  Domanda: Devo essere (setuid) root per riuscire a riprodurre un DVD?
  Domanda: E' possibile riprodurre/codificare solo dei capitoli voluti?
  Domanda: La mia riproduzione DVD è fiacca!
  Domanda: Ho copiato un DVD usando vobcopy. Come lo riproduco/codifico dal mio disco fisso?
8.7. Richieste di funzionalità
  Domanda: Se MPlayer è in pausa e provo a fare una ricerca o premo un qualsiasi tasto, MPlayer esce dalla pausa. Mi piacerebbe poter fare la ricerca nel film in pausa.
  Domanda: Mi piacerebbe fare la ricerca di +/- 1 fotogramma, invece che di 10 secondi.
8.8. Codifica
  Domanda: How can I encode? Come posso codificare?
  Domanda: Come posso fare un dump completo di un DVD su un file?
  Domanda: Come posso creare automaticamente dei (S)VCD?
  Domanda: Come posso creare dei (S)VCD?
  Domanda: Come posso unire due file video?
  Domanda: Come posso correggere file AVI con indice danneggiato o cattivo interleave?
  Domanda: Come posso correggere il rapporto di aspetto di un file AVI?
  Domanda: Come posso fare il backup e la codifica di un file VOB con un'inizio rovinato?
  Domanda: Non riesco a codificare i sottotitoli DVD dentro all'AVI!
  Domanda: Come posso codificare solo determinati capitoli di un DVD?
  Domanda: Sto cercando di lavorare con file di 2GB+ su un filesystem VFAT. Funziona?
  Domanda: Qual'è il significato dei numeri sulla linea di stato durante il processo di codifica?
  Domanda: Perché la frequenza consigliata emessa da MEncoder ha un valore negativo?
  Domanda: Non riesco a codificare un ASF in AVI/MPEG-4 (DivX) perché usa 1000 fps.
  Domanda: Come posso mettere i sottotitoli nel file di destinazione?
  Domanda: Come faccio a codificare solo l'audio da un video musicale?
  Domanda: Perché riproduttori di terze parti non riescono a riprodurre filmati MPEG-4 codificati da MEncoder con versione superiore alla 1.0pre7?
  Domanda: Come posso codificare un file solo audio?
  Domanda: Come posso riprodurre sottotitoli impacchettati in un AVI?
  Domanda: MPlayer non potrebbe...

### 8.1. Sviluppo

Domanda: Come posso creare una patch adeguata per MPlayer?
Domanda: Come traduco MPlayer in una nuova lingua?
Domanda: Come posso supportare lo sviluppo di MPlayer?
Domanda: Come divento uno sviluppatore di MPlayer?
Domanda: Perché non usate autoconf/automake?

Domanda: | Come posso creare una patch adeguata per MPlayer?
Risposta: | Abbiamo scritto un breve documento che descrive tutti i dettagli necessari. Per favore seguine le istruzioni.
Domanda: | Come traduco MPlayer in una nuova lingua?
Risposta: | Leggi l'HOWTO sulle traduzioni, dovrebbe spiegare tutto. Puoi ottenere maggior aiuto sulla mailing list MPlayer-translations.
Domanda: | Come posso supportare lo sviluppo di MPlayer?
Risposta: | Siamo più che felici di accettare le vostre donazioni hardware e software. Ci aiutano a migliorare continuamente MPlayer.
Domanda: | Come divento uno sviluppatore di MPlayer?
Risposta: | Sviluppatori e redattori della documentazione sono sempre i benvenuti. Leggi la documentazione tecnica per un primo approccio. Poi dovresti iscriverti alla mailing list MPlayer-dev-eng e cominciare a scrivere codice. Se vuoi aiutarci con la documentazione, iscriviti alla mailing list MPlayer-docs.
Domanda: | Perché non usate autoconf/automake?
Risposta: | Abbiamo un nostro sistema di compilazione modulare, autoprodotto. Fa un lavoro ragionevolmente buono, perciò, perché cambiarlo? E poi, non ci piacciono gli auto* strumenti, proprio come ad altre persone.

### 8.2. Compilazione e installazione

Domanda: La compilazione fallisce con un errore e gcc se ne esce con qualche messaggio criptico contenente la frase internal compiler error o unable to find a register to spill o can't find a register in class `GENERAL_REGS' while reloading `asm'.
Domanda: Ci sono pacchetti binari (Debian/RPM) di MPlayer?
Domanda: Come posso compilare MPlayer a 32 bit su un Athlon a 64 bit?
Domanda: configure si ferma con questo testo, e MPlayer non compila! Your gcc does not support even i386 for '-march' and '-mcpu'
Domanda: Ho una Matrox G200/G400/G450/G550, come compilo/uso il driver mga_vid?
Domanda: Durante il 'make', MPlayer si lamenta che mancano le librerie di X11. Non capisco, io ho X11 installato!?
Domanda: La compilazione sotto Mac OS 10.3 dà molti errori di link.

Domanda: | La compilazione fallisce con un errore e gcc se ne esce con qualche messaggio criptico contenente la frase `internal compiler error` o `unable to find a register to spill` o `can't find a register in class `GENERAL_REGS' while reloading `asm'`.

Risposta:

Sei incappato un un baco di gcc. Per favore riporta l'errore al gruppo di gcc e non a noi. Per qualche ragione MPlayer pare riuscire ad attivare bachi del compilatore frequentemente. Tuttavia non possiamo correggerli e neanche aggiungere workaround nei nostri sorgenti per i bachi nel compilatore. Per evitare questi problemi, o ti affidi a una versione del compilatore ritenuta affidabile, o lo aggiorni spesso.

Domanda: | Ci sono pacchetti binari (Debian/RPM) di MPlayer?
Risposta: | Vedi le sezioni Debian e RPM per i dettagli.
Domanda: | Come posso compilare MPlayer a 32 bit su un Athlon a 64 bit?

Risposta:

Prova le seguenti opzioni di configure:

    ./configure --target=i386-linux --cc="gcc -m32" --as="as --32" --with-extralibdir=/usr/lib

Domanda:

configure si ferma con questo testo, e MPlayer non compila!

    Your gcc does not support even i386 for '-march' and '-mcpu'

Risposta: | Il tuo gcc non è installato correttamente, controlla il file `config.log`.log per i dettagli.
Domanda: | Ho una Matrox G200/G400/G450/G550, come compilo/uso il driver `mga_vid`?
Risposta: | Leggi la sezione mga_vid.
Domanda: | Durante il 'make', MPlayer si lamenta che mancano le librerie di X11. Non capisco, io ho X11 installato!?
Risposta: | ... ma non hai il pacchetto di sviluppo di X11 installato, o non è installato correttamente. Si chiama `XFree86-devel*` sotto Red Hat, `xlibs-dev` in Debian Woody e `libx11-dev` in Debian Sarge. Controlla anche se esistono i collegamenti simbolici `/usr/X11` e `/usr/include/X11`.
Domanda: | La compilazione sotto Mac OS 10.3 dà molti errori di link.

Risposta:

L'errore che riscontri nella fase di link probabilmente è simile a questo:

    ld: Undefined symbols:
    _LLCStyleInfoCheckForOpenTypeTables referenced from QuartzCore expected to be defined in ApplicationServices
    _LLCStyleInfoGetUserRunFeatures referenced from QuartzCore expected to be defined in ApplicationServices

Questo problema è dato dal fatto che gli sviluppatori di Apple usano 10.4 per compilare il loro software e distribuiscono i binari per il 10.3 usando Aggiornamento Software. Gli 'undefined symbols' sono presenti in Mac OS 10.4, ma non in 10.3. Una soluzione può essere retrocedere a QuickTime 7.0.1. Qui c'è una soluzione migliore.

Scarica una copia più vecchia dei framework. Questo ti farà avere un file compresso che contiene il Framework di QuickTime 7.0.1 e un Framework QuartzCore del 10.3.

Decomprimi da qualche parte i file tranne che nella tua cartella Sistema. (per es. non installare questi framework nella tua `/System/Library/Frameworks`! Usare questa copia precedente serve solo ad aggirare i problemi di link!)

    gunzip < CompatFrameworks.tgz | tar xvf -

In config.mak, dovresti aggiungere `-F/percorso/dove/hai/estratto` alla variabile `OPTFLAGS`. Se stai usando X-Code, devi semplicemente selezionare questi framework al posto di quelli di sistema.

Il binario di MPlayer risultante userà effettivamente il framework installato sul tuo sistema attraverso i link dinamici risolti durante l'esecuzione (Puoi verificarlo usando `otool -l`).

### 8.3. Domande generali

Domanda: Ci sono mailing list su MPlayer?
Domanda: Ho trovato un brutto baco cercando di riprodurre il mio video preferito! Chi dovrei informare?
Domanda: Ho dei problemi a leggere dei file col codec ... . Posso usarli?
Domanda: Quando avvio la riproduzione, esce questo messaggio, ma tutto sembra a posto: Linux RTC init: ioctl (rtc_pie_on): Permission denied
Domanda: Come posso salvare un'istantanea (screenshot)?
Domanda: Qual'è il significato dei numeri sulla linea di stato?
Domanda: Ci sono dei messaggi di errore circa un file non trovato /usr/local/lib/codecs/ ...
Domanda: Come posso far sì che MPlayer si ricordi le opzioni che uso per un dato file, per es. filmato.avi?
Domanda: I sottotitoli sono molto belli, i migliori ch'io abbia mai visto, ma rallentano la riproduzione! So che è strano ...
Domanda: Non riesco ad aprire il menu della GUI. Premo il tasto destro, ma non accedo ad alcuna voce del menu!
Domanda: Come posso eseguire MPlayer in background?

Domanda: | Ci sono mailing list su MPlayer?
Risposta: | Sì. Vedi la sezione mailing lists sul nostro sito.
Domanda: | Ho trovato un brutto baco cercando di riprodurre il mio video preferito! Chi dovrei informare?
Risposta: | Leggi per favore le linee guida per segnalare i bug e segui le istruzioni.
Domanda: | Ho dei problemi a leggere dei file col codec ... . Posso usarli?
Risposta: | Controlla la tabella di stato dei codec, se non contiene il tuo codec, leggi l'HOWTO sull'importazione codec Win32 e contattaci.

Domanda:

Quando avvio la riproduzione, esce questo messaggio, ma tutto sembra a posto:

    Linux RTC init: ioctl (rtc_pie_on): Permission denied

Risposta: | Ti serve un kernel appositamente impostato per usare il codice di temporizzazione per RTC. Per i dettagli leggi la sezione della documentazione su RTC.
Domanda: | Come posso salvare un'istantanea (screenshot)?
Risposta: | Per poter salvare un'istananea devi usare un driver di uscita video che non utilizzi un sistema di overlay. Sotto X11, `-vo x11` fara ciò, sotto Windows funziona `-vo directx:noaccel`. Alternativamente puoi eseguire MPlayer con il filtro video `screenshot` (`-vf screenshot`), e premere s per fare un'istantanea.
Domanda: | Qual'è il significato dei numeri sulla linea di stato?

Risposta:

Esempio:

    A: 2.1 V: 2.2 A-V: -0.167 ct: 0.042 57/57 41% 0% 2.6% 0 4 49% 1.00x

`A: 2.1`

  posizione audio in secondi

`V: 2.2`

  posizione video in secondi

`A-V: -0.167`

  differenza audio-video in secondi (ritardo)

`ct: 0.042`

  sincronizzazione A/V totale eseguita

`57/57`

  fotogrammi riprodotti/decodificati (contando dall'ultimo posizionamento)

`41%`

  utilizzo di CPU da parte del codec video, in percentuale (per lo slice rendering e il direct rendering include video_out)

`0%`

  utilizzo di CPU da parte del video_out

`2.6%`

  utilizzo di CPU da parte del codec audio, in percentuale

`0`

  fotogrammi scartati per mantenere la sincronizzazione A-V

`4`

  livello corrente della post-elaborazione dell'immagine (quando si usa `-autoq`)

`49%`

  dimensione corrente della cache usata (intorno al 50% è normale)

`1.00x`

  velocità di riproduzione come fattore della velocità originaria

Molti di essi sono presenti per finalità di debug, usa l'opzione `-quiet` per farli sparire. Potresti notare che l'utilizzo di CPU del video_out sia zero (0%) per alcuni file. Questo perché viene invocato direttamente dal codec, perciò non può venir misurato separatamente. Se vuoi sapere la velocità del video_out, confronta la differenza riproducendo il file con `-vo null` e con il tuo driver di uscita video usuale.

Domanda: | Ci sono dei messaggi di errore circa un file non trovato `/usr/local/lib/codecs/` ...
Risposta: | Scarica e installa i codec binari dalla nostra pagina di download.
Domanda: | Come posso far sì che MPlayer si ricordi le opzioni che uso per un dato file, per es. `filmato.avi`?
Risposta: | Crea un file con nome `filmato.avi.conf` con le opzioni specifiche per il file e mettilo in `~/.mplayer` o nella stessa directory del file stesso.
Domanda: | I sottotitoli sono molto belli, i migliori ch'io abbia mai visto, ma rallentano la riproduzione! So che è strano ...
Risposta: | Dopo aver eseguito `./configure`, modifica `config.h` e sostituisci `#undef FAST_OSD` con `#define FAST_OSD`. Poi ricompila.
Domanda: | Non riesco ad aprire il menu della GUI. Premo il tasto destro, ma non accedo ad alcuna voce del menu!

Risposta:

Stai usando FVWM? Prova a fare così:

1. Start → Settings → Configuration → Base Configuration

2. Imposta `Use Applications position hints` a `Yes`

Domanda: | Come posso eseguire MPlayer in background?

Risposta:

Usa:

    mplayer opzioni nomefile < /dev/null &

### 8.4. Problemi di riproduzione

Domanda: Non riesco ad isolare la causa di qualche strano problema di riproduzione.
Domanda: Come faccio a far sì che i sottotitoli vengano visualizzati sui margini neri esterni al film?
Domanda: Come seleziono le tracce audio/sottotitoli di un file DVD, OGM, Matroska o NUT?
Domanda: Sto cercando di riprodurre un qualche file da internet ma non ce la fa.
Domanda: Ho scaricato un film da una rete P2P e non funziona!
Domanda: Ho problemi con la visualizzazione dei miei sottotitoli, aiuto!!
Domanda: Perché MPlayer non funziona in Fedora Core?
Domanda: MPlayer muore con MPlayer interrupted by signal 4 in module: decode_video
Domanda: Quando cerco di acquisire dal mio sintonizzatore, ci riesco, ma i colori sono strani. Con altre applicazioni è OK.
Domanda: Ottengo dei valori percentuali molto strani (decisamente troppo alti) riproducendo file sul mio portatile.
Domanda: Quando eseguo MPlayer da utente root sul mio portatile, l'audio e il video vanno totalmente fuori sincronia. Funziona normalmente quando lo eseguo da utente normale.
Domanda: Riproducendo un film, questo di colpo diventa scattoso e ottengo il messaggio seguente: Badly interleaved AVI file detected - switching to -ni mode...

Domanda: | Non riesco ad isolare la causa di qualche strano problema di riproduzione.

Risposta:

Hai un file randagio `codecs.conf` in `~/.mplayer/`, `/etc/`, `/usr/local/etc/` o in posti simili? Cancellalo, un file `codecs.conf` non aggiornato può causare strani problemi ed è usabile solo dagli sviluppatori che stanno lavorando sul supporto codec. Ha più importanza delle impostazioni codec interne di MPlayer, il che crea macello se vengono fatte delle modifiche incompatibili in nuove versioni del programma. A meno che non sia usato da esperti, è la ricetta per il disastro, nella forma di crash e problemi di riproduzione apparentemente casuali e difficili da localizzare. Se lo hai ancora in qualche dove sul tuo sistema, dovresti cancellarlo.

Domanda: | Come faccio a far sì che i sottotitoli vengano visualizzati sui margini neri esterni al film?

Risposta:

Usa il filtro video `expand` per aumentare l'area verticale su cui il film viene visualizzato, e posiziona il film stesso sul bordo superiore, per esempio:

    mplayer -vf expand=0:-100:0:0 -slang it dvd://1

Domanda: | Come seleziono le tracce audio/sottotitoli di un file DVD, OGM, Matroska o NUT?

Risposta:

Devi usare `-aid` ("audio ID") o `-alang` ("audio language"), `-sid` ("subtitle ID") o `-slang` ("subtitle language"), per esempio:

    mplayer -alang eng -slang eng esempio.mkv
    mplayer -aid 1 -sid 1 esempio.mkv

Per vedere quelle disponibili:

    mplayer -vo null -ao null -frames 0 -v nomefile | grep sid
    mplayer -vo null -ao null -frames 0 -v nomefile | grep aid

Domanda: | Sto cercando di riprodurre un qualche file da internet ma non ce la fa.
Risposta: | Prova a riprodurre il flusso con l'opzione `-playlist`.
Domanda: | Ho scaricato un film da una rete P2P e non funziona!
Risposta: | Il tuo file molto probabilmente è danneggiato o è un falso (fake). Se l'hai avuto da un amico e lui dice che si vede, prova a confrontarne gli hash md5sum.
Domanda: | Ho problemi con la visualizzazione dei miei sottotitoli, aiuto!!
Risposta: | Assicurati di avere i font correttamente installati. Ripeti di nuovo i passaggi nella parte Font e OSD della sezione installazione. Se stai usando dei font TrueType, controlla di avere la libreria `FreeType` installata. Altre soluzioni sono di controllare i tuoi sottotitoli con un editor di testo o con altri riproduttori. Prova anche a convertirli in altri formati.
Domanda: | Perché MPlayer non funziona in Fedora Core?

Risposta:

C'è un brutto rapporto in Fedora tra exec-shield, prelink, e una qualsiasi applicazione che usi le DLL di Windows (proprio come MPlayer).

Il problema è che exec-shield rende casuale l'indirizzo di caricamento di tutte le librerie di sistema. Questa casualità è al livello di prelink (una volta ogni due settimane).

Quando MPlayer cerca di caricare una DLL di Windows lo vuole fare ad un indirizzo specifico (0x400000). Se una libreria importante di sistema è già lì, MPlayer andrà in crash. (Un tipico sintomo potrebbe essere un segmentation fault cercando di riprodurre file Windows Media 9.)

Se hai questo problema hai due opzioni:

- Aspetta due settimane. Potrebbe ricominciare a funzionare.

- Ri-linka tutti i binari sul sistema con diverse opzioni di prelink. Qui ci sono le istruzioni passo per passo:

  1. Modifica il file `/etc/syconfig/prelink` e sostituisci

         PRELINK_OPTS=-mR

     con

         PRELINK_OPTS="-mR --no-exec-shield"

  2. touch /var/lib/misc/prelink.force

  3. /etc/cron.daily/prelink (Questo ri-linka tutte le applicazioni, e ci mette un po'.)

  4. execstack -s `/percorso/di/`mplayer (Questo disabilita exec-shield per il binario di MPlayer.)

Domanda:

MPlayer muore con

    MPlayer interrupted by signal 4 in module: decode_video

Risposta: | Non utilizzare MPlayer su una CPU diversa da quella per cui è stato compilato, o ricompilalo con rilevamento della CPU durante l'esecuzione (./configure --enable-runtime-cpudetection).
Domanda: | Quando cerco di acquisire dal mio sintonizzatore, ci riesco, ma i colori sono strani. Con altre applicazioni è OK.
Risposta: | Probabilmente la tua scheda riporta alcuni spazi colore come supportati mentre in verità non li supporta. Prova con YUY2 al posto dello YV12 di default (vedi la sezione TV).
Domanda: | Ottengo dei valori percentuali molto strani (decisamente troppo alti) riproducendo file sul mio portatile.
Risposta: | E' un effetto del sistema di gestione/risparmio energetico del tuo portatile (del BIOS, non del kernel). Collega l'alimentazione esterna prima di accendere il tuo portatile. Puoi anche provare se cpufreq può esserti d'aiuto (un'interfaccia SpeedStep per Linux).
Domanda: | Quando eseguo MPlayer da utente `root` sul mio portatile, l'audio e il video vanno totalmente fuori sincronia. Funziona normalmente quando lo eseguo da utente normale.
Risposta: | C'è un altro effetto del sistema di risparmio energetico (vedi sopra). Collega l'alimentazione esterna prima di accendere il tuo portatile o usa l'opzione `-nortc`.

Domanda:

Riproducendo un film, questo di colpo diventa scattoso e ottengo il messaggio seguente:

    Badly interleaved AVI file detected - switching to -ni mode...

Risposta: | File con interleave errato e `-cache` non funzionano bene insieme. Prova con `-nocache`.

### 8.5. Problemi dei driver video/audio (vo/ao)

Domanda: Quando riproduco a schermo intero ottengo solo bordi neri intorno all'immagine e nessun vero ridimensionamento in modalità a schermo intero.
Domanda: Ho appena installato MPlayer. Quando voglio aprire un file video causa un errore fatale: Errore aprendo/inizializzando il dispositivo uscita video (-vo) selezionato! Come posso risovlere il mio problema?
Domanda: Ho dei problemi con [il tuo window manager] e le modalità a schermo pieno di xv/xmga/sdl/x11 ...
Domanda: Riproducendo un file AVI, l'audio perde la sincronizzazione.
Domanda: Il mio computer riproduce gli AVI MS DivX a risoluzione ~ 640x300 e l'audio MP3 stereo è troppo lento. Quando uso l'opzione -nosound, tutto è OK (ma silenzioso).
Domanda: Come faccio ad usare dmix con MPlayer?
Domanda: Riproducendo un video non sento alcun suono e ricevo messaggi di errore simili a questo: AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian) audio_setup: Can't open audio device /dev/dsp: Device or resource busy couldn't open/init audio device -> NOSOUND Audio: no sound!!! Start playing...
Domanda: Avviando MPlayer in KDE ottengo solo una schermata nera e non succede nulla. Dopo circa un minuto inizia la riproduzione del video.
Domanda: Ho problemi di sincronia A/V. Alcuni miei AVI vengono riprodotti bene, ma alcuni vanno a velocià doppia!
Domanda: Quando riproduco questo film ho desincronizzazione video-audio e/o MPlayer va in crash con il seguente messaggio: DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!
Domanda: Come faccio ad eliminare la desincronizzazione A/V durante la ricerca attraverso flussi RealMedia?

Domanda: | Quando riproduco a schermo intero ottengo solo bordi neri intorno all'immagine e nessun vero ridimensionamento in modalità a schermo intero.

Risposta:

Il tuo driver di uscita video non gestisce il ridimensionamento via hardware e dato che il ridimensionamento software può essere incredibilmente lento, MPlayer non lo abilita in automatico. Molto probabilmente stai usando il driver di uscita video `x11` invece di `xv`. Prova ad aggiungere `-vo xv` alla riga comando oppure leggi la sezione video per trovare driver di uscita video alternativi. L'opzione `-zoom` abilita esplicitamente il ridimensionamento software.

Domanda:

Ho appena installato MPlayer. Quando voglio aprire un file video causa un errore fatale:

    Errore aprendo/inizializzando il dispositivo uscita video (-vo) selezionato!

Come posso risovlere il mio problema?

Risposta:

Cambia semplicemente il dispositivo di uscita video. Lancia i comandi seguenti per ottenere una lista dei driver di uscita video disponibili:

    mplayer -vo help

Dopo aver scelto il driver di uscita video corretto, aggiungilo al tuo file di configurazione. Aggiungi

    vo = selected_vo

in `~/.mplayer/config` e/o

    vo_driver = selected_vo

in `~/.mplayer/gui.conf`.

Domanda: | Ho dei problemi con `[il tuo window manager]` e le modalità a schermo pieno di xv/xmga/sdl/x11 ...
Risposta: | Leggi le linee guida per segnalare i bug e mandaci un appropriato rapporto sul bug. Prova anche facendo esperimenti con l'opzione `-fstype`.
Domanda: | Riproducendo un file AVI, l'audio perde la sincronizzazione.
Risposta: | Prova le opzioni `-bps` o `-nobps`. Se non migliora, leggi le linee guida per segnalare i bug e carica il file sul sito FTP.
Domanda: | Il mio computer riproduce gli AVI MS DivX a risoluzione ~ 640x300 e l'audio MP3 stereo è troppo lento. Quando uso l'opzione `-nosound`, tutto è OK (ma silenzioso).
Risposta: | La tua macchina è troppo lenta o il driver della tua scheda video è bucato. Consulta la documentazione per scoprire se puoi migliorare le prestazioni.
Domanda: | Come faccio ad usare dmix con MPlayer?
Risposta: | Dopo aver configurato il tuo asoundrc devi usare `-ao alsa:device=dmix`.

Domanda:

Riproducendo un video non sento alcun suono e ricevo messaggi di errore simili a questo:

    AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian)
    audio_setup: Can't open audio device /dev/dsp: Device or resource busy
    couldn't open/init audio device -> NOSOUND
    Audio: no sound!!!
    Start playing...

Risposta: | Stai usando KDE o GNOME con il demone audio aRts o ESD? Prova a disabilitare il demone audio o usa le opzioni `-ao arts` o `-ao esd` per far sì che MPlayer usi Arts o ESD. Potresti anche star utilizzando ALSA senza l'emulazione OSS, prova a caricare i moduli del kernel ALSA per OSS o ad aggiungere `-ao alsa` alla tua riga comando per usare direttamente il driver di uscita audio ALSA.
Domanda: | Avviando MPlayer in KDE ottengo solo una schermata nera e non succede nulla. Dopo circa un minuto inizia la riproduzione del video.

Risposta:

Il demone audio di KDE, aRts, blocca il dispositivo audio. O attendi fino a quando il video parte oppure disabiliti il demone aRts nel centro di controllo. Se vuoi utilizzare l'audio aRts, specifica l'uscita audio attraverso il nostro driver aRts nativo(`-ao arts`). Se va in errore o non è compilato, prova con SDL (`-ao sdl`) e assicurati che la tuo SDL possa gestire l'audio aRts. Un'ulteriore possibilità è avviare MPlayer con artsdsp.

Domanda: | Ho problemi di sincronia A/V. Alcuni miei AVI vengono riprodotti bene, ma alcuni vanno a velocià doppia!
Risposta: | Hai una scheda/driver audio bacati. Molto probabilmente sono fissati a 44100Hz, e stai cercando di riprodurre un file che ha un audio a 22050Hz. Prova il filtro audio `resample`.

Domanda:

Quando riproduco questo film ho desincronizzazione video-audio e/o MPlayer va in crash con il seguente messaggio:

    DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!

Risposta:

Questo può avere varie motivazioni.

- La tua CPU e/o la tua scheda video e/o il tuo bus sono troppo lenti. MPlayer emette un messaggio se il caso è questo (e il contatore dei fotogrammi scartati sale velocemente)

- Se è un AVI, magari ha un cattivo interleave, prova l'opzione `-ni` per aggirare il problema. Oppure potrebbe avere un'intestazione malformata, in questo caso possono aiutare `-nobps` e/o `-mc 0`.

- Molti file FLV saranno riprodotti correttamente solo con `-correct-pts`. Sfortunatamente MEncoder non ha questa opzione, ma puoi provare a specificare manualmente `-fps` con il valore giusto, se lo conosci.

- Il tuo driver audio è bacato.

Domanda: | Come faccio ad eliminare la desincronizzazione A/V durante la ricerca attraverso flussi RealMedia?
Risposta: | `-mc 0.1` può aiutare.

### 8.6. Riproduzione DVD

Domanda: Circa la navigazione/menu del DVD?
Domanda: Non riesco a guardare alcun DVD recente di Sony Pictures/BMG.
Domanda: Riguardo i sottotitoli? MPlayer può mostrarli?
Domanda: Come posso impostare il codice di zona del mio lettore DVD? Non ho Windows!
Domanda: Non riesco a riprodurre un DVD, MPlayer si blocca o emette degli errori tipo "Encrypted VOB file!".
Domanda: Devo essere (setuid) root per riuscire a riprodurre un DVD?
Domanda: E' possibile riprodurre/codificare solo dei capitoli voluti?
Domanda: La mia riproduzione DVD è fiacca!
Domanda: Ho copiato un DVD usando vobcopy. Come lo riproduco/codifico dal mio disco fisso?

Domanda: | Circa la navigazione/menu del DVD?
Risposta: | MPlayer non supporta i menu dei DVD a causa di severe limitazioni architetturali che impediscono la gestione corretta di fermi immagine e contenuto interattivo. Se vuoi avere degli attraenti menu, dovrai usare un altro riproduttore come xine, vlc o Ogle. Se vuoi vedere la navigazione del DVD in MPlayer dovrai implementarla tu stesso, ma fai attenzione che non è un'impresa da poco.
Domanda: | Non riesco a guardare alcun DVD recente di Sony Pictures/BMG.

Risposta:

Questo è normale; sei stato fregato e ti hanno venduto un disco intenzionalmente rovinato. L'unico modo di riprodurre questi DVD è aggirare i blocchi rovinati del disco usando DVDnav al posto di mpdvdkit2. Puoi farlo compilando MPlayer col supporto DVDnav a poi sostituendo dvdnav:// a dvd:// sulla riga comando. DVDnav è mutualmente esclusivo rispetto a mpdvdkit2, perciò assicurati di passare l'opzione `--disable-mpdvdkit` allo script configure.

Domanda: | Riguardo i sottotitoli? MPlayer può mostrarli?
Risposta: | Sì. Vedi il capitolo sui DVD.
Domanda: | Come posso impostare il codice di zona del mio lettore DVD? Non ho Windows!
Risposta: | Usa lo strumento regionset.
Domanda: | Non riesco a riprodurre un DVD, MPlayer si blocca o emette degli errori tipo "Encrypted VOB file!".
Risposta: | Il codice di decrittazione CSS non funziona con alcuni lettori DVD a meno che il codice di zona non sia correttamente impostato. Vedi la risposta alla domanda precedente.
Domanda: | Devo essere (setuid) root per riuscire a riprodurre un DVD?
Risposta: | No. Tuttavia devi avere i diritti adeguati per la voce del dispositivo del DVD (in `/dev/`).
Domanda: | E' possibile riprodurre/codificare solo dei capitoli voluti?
Risposta: | Sì, prova l'opzione `-chapter`.
Domanda: | La mia riproduzione DVD è fiacca!
Risposta: | Usa l'opzione `-cache` (descritta nella pagina man) e prova ad abilitare il DMA per il DVD con lo strumento hdparm (spiegato nel capitolo sui CD).
Domanda: | Ho copiato un DVD usando vobcopy. Come lo riproduco/codifico dal mio disco fisso?

Risposta:

Use the `-dvd-device` option to refer to the directory that contains the files: Usa l'opzione `-dvd-device` per indicare la directory che contiene i file:

    mplayer dvd://1 -dvd-device /percorso/della/directory

### 8.7. Richieste di funzionalità

Domanda: Se MPlayer è in pausa e provo a fare una ricerca o premo un qualsiasi tasto, MPlayer esce dalla pausa. Mi piacerebbe poter fare la ricerca nel film in pausa.
Domanda: Mi piacerebbe fare la ricerca di +/- 1 fotogramma, invece che di 10 secondi.

Domanda: | Se MPlayer è in pausa e provo a fare una ricerca o premo un qualsiasi tasto, MPlayer esce dalla pausa. Mi piacerebbe poter fare la ricerca nel film in pausa.
Risposta: | Questo è molto laborioso da implementare, senza perdere la sincronia A/V. Tutti i tentativi finora sono falliti, ma le patch sono benvenute.
Domanda: | Mi piacerebbe fare la ricerca di +/- 1 fotogramma, invece che di 10 secondi.
Risposta: | Puoi avanzare di un fotogramma premendo .. Se il film non era in pausa, dopo lo rimarrà (vedi la pagina man per i dettagli). I passi all'indietro difficilmente saranno implementati nel breve termine.

### 8.8. Codifica

Domanda: How can I encode? Come posso codificare?
Domanda: Come posso fare un dump completo di un DVD su un file?
Domanda: Come posso creare automaticamente dei (S)VCD?
Domanda: Come posso creare dei (S)VCD?
Domanda: Come posso unire due file video?
Domanda: Come posso correggere file AVI con indice danneggiato o cattivo interleave?
Domanda: Come posso correggere il rapporto di aspetto di un file AVI?
Domanda: Come posso fare il backup e la codifica di un file VOB con un'inizio rovinato?
Domanda: Non riesco a codificare i sottotitoli DVD dentro all'AVI!
Domanda: Come posso codificare solo determinati capitoli di un DVD?
Domanda: Sto cercando di lavorare con file di 2GB+ su un filesystem VFAT. Funziona?
Domanda: Qual'è il significato dei numeri sulla linea di stato durante il processo di codifica?
Domanda: Perché la frequenza consigliata emessa da MEncoder ha un valore negativo?
Domanda: Non riesco a codificare un ASF in AVI/MPEG-4 (DivX) perché usa 1000 fps.
Domanda: Come posso mettere i sottotitoli nel file di destinazione?
Domanda: Come faccio a codificare solo l'audio da un video musicale?
Domanda: Perché riproduttori di terze parti non riescono a riprodurre filmati MPEG-4 codificati da MEncoder con versione superiore alla 1.0pre7?
Domanda: Come posso codificare un file solo audio?
Domanda: Come posso riprodurre sottotitoli impacchettati in un AVI?
Domanda: MPlayer non potrebbe...

Domanda: | How can I encode? Come posso codificare?
Risposta: | Leggi la sezione su MEncoder.
Domanda: | Come posso fare un dump completo di un DVD su un file?

Risposta:

Una volta che hai scelto il tuo titolo, e ti sei assicurato che venga riprodotto correttamente con MPlayer, usa l'opzione `-dumpstream`. Per esempio:

    mplayer dvd://5 -dumpstream -dumpfile dvd_dump.vob

farà il dump del quinto titolo del DVD sul file `dvd_dump.vob`

Domanda: | Come posso creare automaticamente dei (S)VCD?
Risposta: | Prova lo script `mencvcd.sh` dalla sottodirectory `TOOLS`. Con quello puoi codificare DVD, o altri film, nel formato VCD o SVCD e anche scriverli direttamente su CD.
Domanda: | Come posso creare dei (S)VCD?

Risposta:

Versioni recenti di MEncoder possono generare direttamente dei file MPEG-2 che possono essere utilizzati come base per creare un VCD o un SVCD e sono probabilmente riproducibili al volo su tutte le piattaforme (per esempio, per condividere un video dalla camera digitale con i tuoi amici non avvezzi ai computer). Leggi per favore Usare MEncoder per creare file compatibili VCD/SVCD/DVD per ulteriori dettagli.

Domanda: | Come posso unire due file video?

Risposta:

I file MPEG possono venir concatenati in un singolo file con fortuna. Per il file AVI, devi usare il supporto di MEncoder per file multipli nel modo seguente:

    mencoder -ovc copy -oac copy -o out.avi file1.avi file2.avi

Questo funzionerà solo se i file hanno la stessa risoluzione e usano lo stesso codec. Puoi anche provare avidemux e avimerge (parte del pacchetto di strumenti transcode).

Domanda: | Come posso correggere file AVI con indice danneggiato o cattivo interleave?

Risposta:

Per evitare di dover usare `-idx` per essere in grado di fare la ricerca in file AVI con indice danneggiato oppure `-ni` per riprodurre file AVI con un cattivo interleave, usa il comando

    mencoder origine.avi -idx -ovc copy -oac copy -o destinazione.avi

per copiare i flussi video e audio su di un nuovo file AVI rigenerando l'indice e facendo l'interleave corretto dei dati. Di certo questo non può correggere possibili problemi nei flussi video e/o audio.

Domanda: | Come posso correggere il rapporto di aspetto di un file AVI?

Risposta:

Puoi fare ciò grazie all'opzione `-force-avi-aspect` di MEncoder, che sovrascrive l'aspetto memorizzato nell'opzione vprp dell'intestazione AVI OpenDML. Per esempio:

    mencoder origine.avi -ovc copy -oac copy -o destinazione.avi -force-avi-aspect 4/3

Domanda: | Come posso fare il backup e la codifica di un file VOB con un'inizio rovinato?

Risposta:

Il problema principale di quando vuoi codificare un file VOB rovinato [3] è che sarà difficile ottenere una condifica con sincronia A/V perfetta. Una soluzione è semplicemente tagliar via la parte rovinata e codificare solo quella a posto. Per prima cosa devi trovare dove inizia la parte a posto:

    mplayer origine.vob -sb num_di_byte_da_saltare

Poi puoi creare un nuovo file che contiene solo la parte a posto:

    dd if=origine.vob of=destinazione_tagliata.vob skip=1 ibs=num_di_byte_da_saltare

Domanda: | Non riesco a codificare i sottotitoli DVD dentro all'AVI!
Risposta: | Devi specificare correttamente l'opzione `-sid`.
Domanda: | Come posso codificare solo determinati capitoli di un DVD?
Risposta: | Usa adeguatamente l'opzione `-chapter`, così: `-chapter 5-7`.
Domanda: | Sto cercando di lavorare con file di 2GB+ su un filesystem VFAT. Funziona?
Risposta: | No, VFAT non supporta file di 2GB+.
Domanda: | Qual'è il significato dei numeri sulla linea di stato durante il processo di codifica?

Risposta:

Esempio:

    Pos: 264.5s   6612f ( 2%)  7.12fps Trem: 576min 2856mb  A-V:0.065 [2126:192]

`Pos: 264.5s`

  posizione temporale nel flusso codificato

`6612f`

  numero di fotogrammi codificati

`( 2%)`

  porzione del flusso in entrata codificato

`7.12fps`

  velocità di codifica

`Trem: 576min`

  tempo rimanente di codifica stimato

`2856mb`

  dimensione stimata della codifica definitiva

`A-V:0.065`

  ritardo corrente tra i flussi audio e video

`[2126:192]`

  frequenza video media (in kb/s) e frequenza audio media (in kb/s)

Domanda: | Perché la frequenza consigliata emessa da MEncoder ha un valore negativo?
Risposta: | Perché la frequenza (bitrate) in cui hai codificato l'audio è troppo grande per poter far stare un film su un CD. Controlla di avere libmp3lame installata correttamente.
Domanda: | Non riesco a codificare un ASF in AVI/MPEG-4 (DivX) perché usa 1000 fps.
Risposta: | Visto che ASF usa una frequenza dei fotogrammi variabile mentre AVI ne usa una fissa, devi impostarla a mano con l'opzione `-ofps`.
Domanda: | Come posso mettere i sottotitoli nel file di destinazione?
Risposta: | Passa semplicemente a MEncoder l'opzione `-sub <filename>` (o `-sid`, rispettivamente).
Domanda: | Come faccio a codificare solo l'audio da un video musicale?

Risposta:

Direttamente non è possibile, ma puoi provare questo (nota la & alla fine del comando di mplayer):

    mkfifo encode
    mplayer -ao pcm -aofile encode dvd://1 &
    lame le_tue_opzioni encode musica.mp3
    rm encode

Questo ti permette di usare un qualsiasi codificatore, non solo LAME, nel comando suddetto sostituisci semplicemente lame con il tuo codificatore audio preferito.

Domanda: | Perché riproduttori di terze parti non riescono a riprodurre filmati MPEG-4 codificati da MEncoder con versione superiore alla 1.0pre7?

Risposta:

`libavcodec`, la libreria nativa per la codifica MPEG-4 distribuita usualmente con MEncoder, quando codificava video MPEG-4 era solita impostare il FourCC a 'DIVX' (il FourCC è una tag AVI per identificare il software usato per la codifica e il software relativo da usare per decodificare il video). Ciò portava molte persone a pensare che `libavcodec` fosse una libreria di codifica DivX, mentre in realtà è una libreria di codifica completamente diversa, che implementa lo standard MPEG-4 molto meglio di come faccia DivX. Così, il nuovo FourCC di default usato da `libavcodec` è 'FMP4', ma puoi modificare questo comportamente usando l'opzione `-ffourcc` di MEncoder. Puoi anche cambiare allo stesso modo il FourCC di file esistenti:

    mencoder origine.avi -o destinazione.avi -ffourcc XVID

Fai attenzione che questo imposterà il FourCC a XVID invece che a DIVX. Si consiglia così, dato che DIVX significa DivX4, che è un codec MPEG-4 molto basilare, mentre DX50 e XVID indicano entrambi un MPEG-4 completo (ASP). Inoltre, se imposti il FourCC a DIVX, dei brutti software o lettori da tavolo potrebbero annsapare su alcune caratteristiche avanzate che `libavcodec` supporta, ma DivX no; dall'altro lato `Xvid` è più simile a `libavcodec` in termini di funzinalità, ed è supportato da tutti i riproduttori decenti.

Domanda: | Come posso codificare un file solo audio?
Risposta: | Usa `aconvert.sh` dalla sottodirectory `TOOLS` dei sorgenti di MPlayer.
Domanda: | Come posso riprodurre sottotitoli impacchettati in un AVI?
Risposta: | Usa `avisubdump.c` dalla sottodirectory questa documentazione sull'estrazione/demultiplex dei sottotitoli impacchettati in file AVI OpenDML.
Domanda: | MPlayer non potrebbe...
Risposta: | Dai un'occhiata alla sottodirectory `TOOLS` per una raccolta di vari script e hack. `TOOLS/README` contiene la documentazione.

[3] In parte, alcune forme di protezione di copia usate nei DVD possono esser considerate contenuto rovinato.

# Appendice A. Come segnalare i bug (errori)

Buone segnalazioni di errori sono un contributo molto valido per lo sviluppo di un qualsiasi progetto software. Ma proprio come nello scrivere un buon software, scrivere buoni rapporti sui problemi richiede dell'impegno. Per favore considera che molti sviluppatori sono estremamente impegnati e ricevono immensi volumi di email. Perciò, mentre da un lato il tuo feedback è cruciale per migliorare MPlayer e molto apprezzato, per favore cerca di capire che devi fornire tutte le informazioni che chiediamo e seguire fedelmente le istruzioni qui documentate.

## A.1. Come segnalare i bug di sicurezza (errori)

Nel caso in cui tu abbia trovato un bug pericoloso e vuoi fare la cosa giusta e lasciarcelo correggere prima di sfruttarlo, saremmo felici di avere la tua segnalazione di sicurezza a security@mplayerhq.hu. Per favore aggiungi nell'oggetto [SECURITY] o [ADVISORY]. Assicurati che il rapporto contenga l'analisi completa e dettagliata del bug. L'invio di una correzione è decisamente apprezzato. Per piacere non ritardare la segnalazione per scrivere un exploit che la provi, puoi inviarlo eventualmente con un'altra mail.

## A.2. Come correggere i bug

Se pensi di avere le capacità necessarie, sei esortato a provare a correggere il bug per conto tuo. O forse lo hai già fatto? Leggi per favore questo breve documento per scoprire come far sì che il tuo codice venga incluso in MPlayer. Le persone sulla mailing list MPlayer-dev-eng ti aiuteranno se avrai dei dubbi.

## A.3. Come fare delle prove retroattive usando Subversion

Un problema che può capitare delle volte è 'prima funzionava, ora non funziona più...'. C'è una procedura passo passo per cercare di scoprire dove il problema si sia presentato. Non è destinata agli utenti casuali.

Per prima cosa, dovresti scaricare l'alberatura dei sorgenti di MPlayer da Subversion. Le istruzioni si possono trovare nella sezione su Subversion nella pagina dei download.

Troverai ora un immagine dell'archivio Subversion dentro alla directory mplayer/, dal lato client. Ora aggiorna questa immagine alla data che desideri:

    cd mplayer/
    svn update -r {"2004-08-23"}

Il formato della data è YYYY-MM-DD HH:MM:SS. Usando questo formato di data ti garantisce di essere in grado di estrarre le path in base alla data in cui sono state applicate, come nell'archivio MPlayer-cvslog.

Ora procedi come per un normale aggiornamento:

    ./configure
    make

Per chi sta leggendo e non è un programmatore, il modo più veloce di trovare il punto dove si è presentato il problema è effettuare una ricerca binaria — che significa cercare la data della 'rottura' dividendo ripetutamente a metà l'intervallo di ricerca. Per esempio, se il problema si è presentato nel 2003, inizia da metà anno, poi chiediti "C'è già il problema qui?". Se sì, retrocedi fino al primo di aprile; se no, vai al primo di ottobre, e così via.

Se hai tanto spazio libero sul disco rigido (una compilazione completa occupa attualmente 100 MB, e circa 300-350 MB se si abilitano i simboli di debug), copiati la versione funzionante più vecchia prima di aggiornarla; questo ti farà risparmiare tempo se devi retrocedere. (Solitamente bisogna eseguire 'make distclean' prima di ricompilare una versione precedente, perciò se non ne hai una salvata, dovrai ricompilare tutto quanto quando ritorni alla verisone attuale.)

Dopo aver trovato il giorno in cui è nato l'errore, continua a cercare usando l'archivio mplayer-cvslog (ordinato per data) e un più preciso aggiornamento su svn con ora, minuto e secondo:

    svn update -r {"2004-08-23 15:17:25"}

Questo ti permetterà di trovare facilmente la patch esatta che lo ha generato.

Se trovi la patch che è stata la causa del problema, hai quasi vinto; fai un rapporto su MPlayer Bugzilla o iscriviti a MPlayer-users e postalo là. C'è anche la possibilità che l'autore intervenga consigliando una correzione. Puoi anche controllare attentamente la patch fino a quando la costringi a rivelarti dove stia il bug :-).

## A.4. Come segnalare i bug

Per prima cosa per favore prova la versione Subversion di MPlayer più recente visto che in essa il tuo bug potrebbe già essere stato risolto. Lo sviluppo avanza velocemente, la maggior parte dei problemi nei rilasci ufficiali sono segnalati in pochi giorni o poche ore, perciò parti solo da Subversion per segnalare i bug. Ciò include i pacchetti compilati di MPlayer. Le istruzioni per Subversion si possono trovare in fondo a questa pagina o nel README. Se ciò non ti è stato di aiuto, per favore fai riferimento al resto della documentazione. Se il tuo problema è sconosciuto oppure non risolvibile con le nostre indicazioni, allora per favore segnala il bug.

Per piacere non inviare segnalazioni di bug ai singoli sviluppatori in privato. Questo è un lavoro di comunità e quindi ci possono essere varie persone interessate ad esso. Alcune volte altri utenti hanno già avuto i tuoi problemi e sanno come aggirare un problema anche quando è un bug nel codice di MPlayer.

Per favore descrivi il tuo problema il più dettagliatamente possibile. Fai un piccolo lavoro di ricerca per evidenziare le circostanze in cui succede il problema. Il bug si presenta solo in alcune occasioni? E' specifico per certi file o tipi di file? Capita solo con un codec e è indipendente dal codec? Puoi riprodurlo con tutti i driver di uscita? Più informazioni fornisci, maggiori sono le nostre possibilità di correggere il tuo problema. Per favore non dimenticare di includere anche le importanti informazioni richieste qui sotto, altrimenti non saremo in grado di diagnosticare il problema.

Una guida eccellente e ben scritta su come fare domande in forum pubblici è How To Ask Questions The Smart Way (Come porre domande in modo intelligente) di Eric S. Raymond. Ce n'è un'altra chiamata Come segnalare bug efficacemente di Simon Tatham. Se segui queste linee guida dovresti poter ottenere aiuto.. Ma per favore tieni conto che tutti noi seguiamo le mailing list volontariamente nel tempo libero. Siamo molto occupati e non possiamo garantire che otterrai una soluzione per il tuo problema o anche solo una risposta.

## A.5. Dove segnalare i bug

Iscriviti alla mailing list MPlayer-users: http://lists.mplayerhq.hu/mailman/listinfo/mplayer-users e invia il tuo rapporto sul bug a mailto:mplayer-users@mplayerhq.hu dove puoi discuterlo.

Se preferisci puoi invece usare il nostro bel nuovo Bugzilla.

La lingua di questa lista è l'inglese. Per favore segui gli standard delle Linee guida della Netiquette e non inviare email in HTML ad alcuna delle nostre mailing list. Verrai semplicemente ignorato bandito. Se non sai cosa sia una mail in HTML o perché sia il male, leggi questo buon documento. Ti spiega tutto in dettaglio e contiene le istruzioni per disabilitare l'HTML. Inoltre nota che non rispondiamo in CC (copia carbone) alle persone, quindi è una buona idea iscriversi per poter effettivamente ricevere la risposta.

## A.6. Cosa riportare

Potrebbe servire che tu includa nel tuo rapporto sul bug registrazioni, configurazioni o file di esempio. Se alcune di queste cose sono abbastanza grandi, è meglio caricarle sul nostro server HTTP in un formato compresso (si preferiscono gzip e bzip2) e inserisci nel rapporto solo il nome e il percorso del file. Le nostre mailing list hanno un limite sulla dimensione di 80k, se hai qualcosa di più grande devi comprimerlo o caricarlo.

### A.6.1. Informazioni di Sistema

- La tua distribuzione Linux o il sistema operativo e la versione, per es.:

  - Red Hat 7.1

  - Slackware 7.0 + pacchetti sviluppo dalla 7.1 ...

- La versione del kernel:

      uname -a

- La versione di libc:

      ls -l /lib/libc[.-]*

- Le versioni di gcc e di ld:

      gcc -v
      ld -v

- La versione di binutils:

      as --version

- Se hai dei problemi con la modalità a schermo intero:

  - Il tipo di gestore di finestre e la versione

- Se hai dei problemi con XVIDIX:

  - La profondità colore di X:

        xdpyinfo | grep "depth of root"

- Se i bug sono solo nella GUI:

  - La versione di GTK

  - La versione di GLIB

  - La situazione della GUI in cui il bug si presenta

### A.6.2. Hardware e driver

- Informazioni CPU (questo funziona solo in Linux):

      cat /proc/cpuinfo

- La marca della scheda video ed il modello, per es.:

  - ASUS V3800U chip: nVidia TNT2 Ultra pro 32MB SDRAM

  - Matrox G400 DH 32MB SGRAM

- Il tipo di driver video & la versione, per es.:

  - X built-in driver

  - nVidia 0.9.623

  - Utah-GLX CVS 2001-02-17

  - DRI from X 4.0.3

- Il tipo di scheda video & driver, per es.:

  - Creative SBLive! Gold with OSS driver from oss.creative.com

  - Creative SB16 with kernel OSS drivers

  - GUS PnP with ALSA OSS emulation

- Se hai dei dubbi includi l'emissione di lspci -vv su sitemi Linux.

### A.6.3. Problemi del configure

Se ricevi degli errori eseguendo ./configure, o se fallisce la rilevazione automatica di qualcosa, leggi `config.log`. Puoi travarci la soluzione, per esempio varie versioni della stessa libreria mescolate sul tuo sistema, o hai dimenticato di installare il pacchetto di scviluppo (quelli con il suffisso -dev). Se pensi ci sia un bug, includi `config.log` nel tuo rapporto sul bug stesso.

### A.6.4. Problemi di compilazione

Per favore includi questi file:

- config.h

- config.mak

### A.6.5. Problemi in riproduzione

Per favore includi l'output di MPlayer al livello di verbosità 1, ma ricorda di non troncare tale output quando lo incolli nella tua mail. Agli sviluppatori servono tutti i messaggi per diagnosticare correttamente un problema. Puoi redirigere l'output in un file in questo modo:

    mplayer -v options filename > mplayer.log 2>&1

Se il tuo problema è specifico per uno o più file, allora per favore carica quello/i incriminato/i in: http://streams.videolan.org/upload/

Carica anche un piccolo file di testo con lo stesso nome di base del file, con un'estensione .txt. Descrivi il problema che hai con quel particolare file e includi il tuo indirizzo email così come ll'ouptut di MPlayer all livello 1 di verbosità. Solitamente i primi 1-5 MB di un file sono abbastanza per riprodurre il problema, ma per esserne certi ti chiediamo di fare:

    dd if=tuo_file of=piccolo_file bs=1024k count=5

Questo copierà i primi 5 mega di 'tuo_file' e li scriverà su 'piccolo_file'. Dopo prova di nuovo con il file piccolo e se il problema si presenta ancora per noi è sufficiente. Per piacere non inviare mai questi file via mail! Caricali sull'FTP, e manda solo il percorso/nome del file nel server FTP. Se il file è raggiungibile in rete, allora è sufficiente inviare l'URL preciso.

### A.6.6. Crash

Devi eseguire MPlayer dentro a gdb e mandarci l'output completo oppure se hai un `core` dump del crash puoi ricavare informazioni utili dal Core file. Qui spiega come:

#### A.6.6.1. Come conservare le informazioni di un crash riproducibile

Ricompila MPlayer con il codice di debug abilitato:

    ./configure --enable-debug=3
    make

e poi esegui MPlayer da dentro gdb usando:

    gdb ./mplayer

Ora sei dentro gdb, Scrivi:

    run -v opzioni-per-mplayer nomefile

e riproduci il tuo crash. Appena ci sei riuscito, gdb ti ripresenterà il prompt dei comandi, dove devi digitare

    bt
    disass $pc-32,$pc+32
    info all-registers

#### A.6.6.2. Come ricavare informazioni significative da un core dump

Genera il file di comandi seguente:

    bt
    disass $pc-32,$pc+32
    info all-registers

Poi lancia semplicemente questo comando:

    gdb mplayer --core=core -batch --command=file_comandi > mplayer.bug

## A.7. So quello che sto facendo...

Se hai generato un rapporto adeguato sul bug seguendo i passi suddetti e sei certo che sia un bug in MPlayer e non un problema del compilatore o di un file danneggiato, se hai già letto la documentazione non sei riuscito a trovare una soluzione, i tuoi driver audio sono OK, allora potresti voler iscriverti alla lista MPlayer-advusers e inviare lì il tuo rapporto per ottenere una riposta migliore e più rapida.

Renditi per favore conto che se invii lì domande da niubbo o domande che hanno già una risposta nel manuale, sarai ignorato o alimenterai un flame, invece di ottenere una risposta adeguata. Non generare flame contro di noi e iscriviti a -advusers solo se sai davvero cosa stai facendo e senti di essere un utente avanzato di MPlayer o uno sviuppatore. Se rientri in questi ranghi non dovrebbe esserti difficile scoprire come iscriverti...

# Appendice B. MPlayer skin format

## B.1. Overview

### B.1.1. Skin components

Skins are quite free-format (unlike the fixed-format skins of Winamp/XMMS, for example), so it is up to you to create something great.

Currently there are four windows to be decorated: the main window, the video window, the playbar, and the skin menu.

- The main window is where you can control MPlayer. The playbar shows up in fullscreen mode when moving the mouse to the bottom of the screen. The background of the windows is an image. Various items can (and must) be placed in the window: buttons, potmeters (sliders) and labels. For every item, you must specify its position and size.

  A button has three states (pressed, released, disabled), thus its image must be divided into three parts placed below each other. See the button item for details.

  A potmeter (mainly used for the seek bar and volume/balance control) can have any number of phases by dividing its image into different parts. See hpotmeter for details.

  Labels are a bit special: The characters needed to draw them are taken from an image file, and the characters in the image are described by a font description file. The latter is a plain text file which specifies the x,y position and size of each character in the image (the image file and its font description file form a font together). See dlabel and slabel for details.

  ### Nota

  All images can have full transparency as described in the section about image formats. If the X server doesn't support the XShape extension, the parts marked transparent will be black. If you'd like to use this feature, the width of the main window's background image must be dividable by 8.

- The video window is where the video appears. It can display a specified image if there is no movie loaded (it is quite boring to have an empty window :-)) Note: transparency is not allowed here.

- The skin menu is just a way to control MPlayer by means of menu entries (which can be activated by a middle mouse button click). Two images are required for the menu: one of them is the base image that shows the menu in its normal state, the other one is used to display the selected entries. When you pop up the menu, the first image is shown. If you move the mouse over the menu entries, the currently selected entry is copied from the second image over the menu entry below the mouse pointer (the second image is never shown as a whole).

  A menu entry is defined by its position and size in the image (see the section about the skin menu for details).

There is an important thing not mentioned yet: For buttons, potmeters and menu entries to work, MPlayer must know what to do if they are clicked. This is done by messages (events). For these items you must define the messages to be generated when they are clicked.

### B.1.2. Image formats

Images must be PNGs—either truecolor (24 or 32 bpp) or 8 bpp with a RGBA color palette.

In the main window and in the playbar (see below) you can use images with `transparency': Regions filled with the color #FF00FF (magenta) are fully transparent when viewed by MPlayer. This means that you can even have shaped windows if your X server has the XShape extension.

### B.1.3. Files

You need the following files to build a skin:

- The configuration file named skin tells MPlayer how to put different parts of the skin together and what to do if you click somewhere in the window.

- The background image for the main window.

- Images for the items in the main window (including one or more font description files needed to draw labels).

- The image to be displayed in the video window (optional).

- Two images for the skin menu (they are needed only if you want to create a menu).

With the exception of the skin configuration file, you can name the other files whatever you want (but note that font description files must have a `.fnt` extension).

## B.2. The skin file

As mentioned above, this is the skin configuration file. It is line oriented; comments start with a '`;`' character and continue until the end of the line, or start with a '`#`' character at the beginning of the line (in that case only spaces and tabs are allowed before the '`#`').

The file is made up of sections. Each section describes the skin for an application and has the following form:

    section = section name
    .
    .
    .
    end

Currently there is only one application, so you need only one section: its name is movieplayer.

Within this section each window is described by a block of the following form:

    window = window name
    .
    .
    .
    end

where `window name` can be one of these strings:

- main - for the main window

- video - for the video window

- playbar - for the playbar

- menu - for the skin menu

(The video, playbar and menu blocks are optional - you do not need to decorate the video window, have a playbar or create a menu. A default menu is always available by a right mouse button click.)

Within a window block, you can define each item for the window by a line in this form:

    item = parameter

Where `item` is a string that identifies the type of the GUI item, `parameter` is a numeric or textual value (or a list of values separated by commas).

Putting the above together, the whole file looks something like this:

    section = movieplayer
      window = main
      ; ... items for main window ...
      end

      window = video
      ; ... items for video window ...
      end

      window = menu
      ; ... items for menu ...
      end

      window = playbar
      ; ... items for playbar ...
      end
    end

The name of an image file must be given without leading directories - images are searched for in the `skins` directory. You may (but you need not) specify the extension of the file. If the file does not exist, MPlayer tries to load the file `<filename>.<ext>`, where `png` and `PNG` are tried for `<ext>` (in this order). The first matching file will be used.

Finally some words about positioning. The main window and the video window can be placed in the different corners of the screen by giving `X` and `Y` coordinates. `0` is top or left, `-1` is center and `-2` is right or bottom, as shown in this illustration:

    (0, 0)----(-1, 0)----(-2, 0)
      |          |          |
      |          |          |
    (0,-1)----(-1,-1)----(-2,-1)
      |          |          |
      |          |          |
    (0,-2)----(-1,-2)----(-2,-2)

Here is an example to make this clear. Suppose that you have an image called `main.png` that you use for the main window:

    base = main, -1, -1

MPlayer tries to load `main`, `main.png`, `main.PNG` files and centers it.

### B.2.1. Main window and playbar

Below is the list of entries that can be used in the '`window = main`' ... '`end`', and the '`window = playbar`' ... '`end`' blocks.

`decoration = enable|disable`

  Enable or disable window manager decoration of the main window. Default is disable.

  ### Nota

  This isn't available for the playbar.

`base = image, X, Y`

  Lets you specify the background image to be used for the main window. The window will appear at the given `X,Y` position on the screen. It will have the size of the image.

  ### Avvertimento

  Transparent regions in the image (colored #FF00FF) appear black on X servers without the XShape extension. The image's width must be dividable by 8.

`button = image, X, Y, width, height, message`

  Place a button of `width` * `height` size at position `X,Y`. The specified `message` is generated when the button is clicked. The image given by `image` must have three parts below each other (according to the possible states of the button), like this:

      +------------+
      |  pressed   |
      +------------+
      |  released  |
      +------------+
      |  disabled  |
      +------------+

  A special value of `NULL` can be used if you want no `image`.

`hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message`

`vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message`

`rpotmeter = button, bwidth, bheight, phases, numphases, x0, y0, x1, y1, default, X, Y, width, height, message`

  Place a horizontal (`hpotmeter`), vertical (`vpotmeter`) or rotary (`rpotmeter`) potmeter of `width` * `height` size at position `X,Y`. The image can be divided into different parts for the different phases of the potmeter (for example, you can have a pot for volume control that turns from green to red while its value changes from the minimum to the maximum). All potentiometers can have a button that can be dragged with a `hpotmeter` and `vpotmeter`. A `rpotmeter` can be spun even without a button. The parameters are:

  - `button` - the image to be used for the button (must have three parts below each other, like in case of button). A special value of `NULL` can be used if you want no image.

  - `bwidth`, `bheight` - size of the button

  - `phases` - the image to be used for the different phases of the potentiometer. A special value of `NULL` can be used if you want no such image. The image must be divided into `numphases` parts below each other (resp. side by side for `vpotmeter`) like this:

        +------------+
        |  phase #1  |                vpotmeter only:
        +------------+
        |  phase #2  |                +------------+------------+     +------------+
        +------------+                |  phase #1  |  phase #2  | ... |  phase #n  |
             ...                      +------------+------------+     +------------+
        +------------+
        |  phase #n  |
        +------------+

  - `numphases` - number of phases stored in the `phases` image

  - `x0`, `y0` and `x1`, `y1` - position of the 0% start point and 100% stop point for the potentiometer (`rpotmeter` only)

    The first coordinate `x0,y0` defines the 0% start point (on the edge of the potentiometer) in the individual image of phase #1 and the second coordinate `x1,y1` the 100% stop point in the individual image of phase #n - in other words, the coordinates of the tip of the mark on the potentiometer in the two single images (not in the image of all phases).

  - `default` - default value for the potentiometer (in the range `0` to `100`)

    (If message is `evSetVolume`, it's allowed to use a plain hyphen-minus as value. This will cause the currently set volume to remain unchanged.)

  - `X`, `Y` - position for the potentiometer

  - `width`, `height` - width and height of the potentiometer

  - `message` - the message to be generated when the value of the potentiometer is changed

`pimage = phases, numphases, default, X, Y, width, height, message`

  Place different phases of an image at position `X,Y`. This element goes nicely with potentiometers to visualize their state. `phases` can be `NULL`, but this is quite useless, since nothing will be displayed then. For a description of the parameters see hpotmeter. There is only a difference concerning the message:

  - `message` - the message to be reacted on, i.e. which shall cause a change of `pimage`.

`font = fontfile`

  Defines a font. `fontfile` is the name of a font description file with a `.fnt` extension (do not specify the extension here) and is used to refer to the font (see dlabel and slabel). Up to 25 fonts can be defined.

`slabel = X, Y, fontfile, "text"`

  Place a static label at the position `X,Y`. `text` is displayed using the font identified by `fontfile`. The text is just a raw string (`$x` variables do not work) that must be enclosed between double quotes (but the " character cannot be part of the text). The label is displayed using the font identified by `fontfile`.

`dlabel = X, Y, width, align, fontfile, "text"`

  Place a dynamic label at the position `X,Y`. The label is called dynamic because its text is refreshed periodically. The maximum width of the label is given by `width` (its height is the height of a character). If the text to be displayed is wider than that, it will be scrolled, otherwise it is aligned within the specified space by the value of the `align` parameter: `0` is for left, `1` is for center, `2` is for right.

  The text to be displayed is given by `text`: It must be written between double quotes (but the " character cannot be part of the text). The label is displayed using the font identified by `fontfile`. You can use the following variables in the text:

  Variable | Meaning
  --- | ---
  $1 | elapsed time in hh:mm:ss format
  $2 | elapsed time in mmmm:ss format
  $3 | elapsed time in hh format (hours)
  $4 | elapsed time in mm format (minutes)
  $5 | elapsed time in ss format (seconds)
  $6 | running time in hh:mm:ss format
  $7 | running time in mmmm:ss format
  $8 | elapsed time in h:mm:ss format
  $v | volume in xxx.xx% format
  $V | volume in xxx.x format
  $U | volume in xxx format
  $b | balance in xxx.xx% format
  $B | balance in xxx.x format
  $D | balance in xxx format
  $$ | the $ character
  $a | a character according to the audio type (none: n, mono: m, stereo: t, surround: r)
  $t | track number (DVD, VCD, CD or playlist)
  $o | filename
  $O | filename (if no title name available) otherwise title
  $f | filename in lower case
  $F | filename in upper case
  $T | a character according to the stream type (file: f, CD: a, Video CD: v, DVD: d, URL: u, TV/DVB: b, CUE: c)
  $P | a character according to the playback state (stopped: s, playing: p, paused: e)
  $p | the p character (if a movie is playing)
  $s | the s character (if the movie is stopped)
  $e | the e character (if playback is paused)
  $g | the g character (if ReplayGain is active)
  $x | video width
  $y | video height
  $C | name of the codec used

  ### Nota

  The `$a, $T, $P, $p, $s` and `$e` variables all return characters that should be displayed as special symbols (for example, e is for the pause symbol that usually looks something like ||). You should have a font for normal characters and a different font for symbols. See the section about symbols for more information.

### B.2.2. Video window

The following entries can be used in the '`window = video`' . . . '`end`' block.

`base = image, X, Y, width, height`

  The image to be displayed in the window. The window will be as large as the image. `width` and `height` denote the size of the window; they are optional (if they are missing, the window is the same size as the image). A special value of `NULL` can be used if you want no image (in which case `width` and `height` are mandatory).

`background = R, G, B`

  Lets you set the background color. It is useful if the image is smaller than the window. `R`, `G` and `B` specifies the red, green and blue component of the color (each of them is a decimal number from 0 to 255).

### B.2.3. Skin menu

As mentioned earlier, the menu is displayed using two images. Normal menu entries are taken from the image specified by the `base` item, while the currently selected entry is taken from the image specified by the `selected` item. You must define the position and size of each menu entry through the menu item.

The following entries can be used in the '`window = menu`'. . .'`end`' block.

`base = image`

  The image for normal menu entries.

`selected = image`

  The image showing the menu with all entries selected.

`menu = X, Y, width, height, message`

  Defines the `X,Y` position and the size of a menu entry in the image. `message` is the message to be generated when the mouse button is released over the entry.

## B.3. Fonts

As mentioned in the section about the parts of a skin, a font is defined by an image and a description file. You can place the characters anywhere in the image, but make sure that their position and size is given in the description file exactly.

The font description file (with `.fnt` extension) can have comments like the skin configuration file starting with '`;`' (or '`#`', but only at the beginning of the line). The file must have a line in the form

    image = image

Where ``image`` is the name of the image file to be used for the font (you do not have to specify the extension).

    "char" = X, Y, width, height

Here `X` and `Y` specify the position of the `char` character in the image (`0,0` is the upper left corner). `width` and `height` are the dimensions of the character in pixels. The character `char` shall be in UTF-8 encoding.

This example defines the A, B, C characters using `font.png`.

    ; Can be "font" instead of "font.png".
    image = font.png

    ; Three characters are enough for demonstration purposes :-)
    "A" =  0,0, 7,13
    "B" =  7,0, 7,13
    "C" = 14,0, 7,13

### B.3.1. Symbols

Some characters have special meanings when returned by some of the variables used in dlabel. These characters are meant to be shown as symbols so that things like a nice DVD logo can be displayed instead of the character '`d`' for a DVD stream.

The following table lists all the characters that can be used to display symbols (and thus require a different font).

Character | Symbol
--- | ---
p | play
s | stop
e | pause
n | no sound
m | mono sound
t | stereo sound
r | surround sound
g | replay gain
space | no (known)stream
f | stream is a file
a | stream is a CD
v | stream is a Video CD
d | stream is a DVD
u | stream is a URL
b | stream is a TV/DVB broadcast
c | stream is a cue sheet

## B.4. GUI messages

These are the messages that can be generated by buttons, potmeters and menu entries.

evNone

  Empty message, it has no effect.

Playback control:

evPlay

  Start playing.

evStop

  Stop playing.

evPause

  Pause playing.

evPrev

  Jump to previous track in the playlist.

evNext

  Jump to next track in the playlist.

evLoad

  Load a file (by opening a file selector dialog box, where you can choose a file).

evLoadPlay

  Does the same as `evLoad`, but it automatically starts playing after the file is loaded.

evLoadAudioFile

  Loads an audio file (with the file selector).

evLoadSubtitle

  Loads a subtitle file (with the file selector).

evDropSubtitle

  Disables the currently used subtitle.

evPlaylist

  Open/close the playlist window.

evPlayCD

  Tries to open the disc in the given CD-ROM drive.

evPlayVCD

  Tries to open the disc in the given CD-ROM drive.

evPlayDVD

  Tries to open the disc in the given DVD-ROM drive.

evPlayImage

  Loads an CD/(S)VCD/DVD image or DVD copy (with the file selector) and plays it as if it were a real disc.

evLoadURL

  Displays the URL dialog window.

evPlayTV

  Tries to start TV/DVB broadcast.

evPlaySwitchToPause

  The opposite of `evPauseSwitchToPlay`. This message starts playing and the image for the `evPauseSwitchToPlay` button is displayed (to indicate that the button can be pressed to pause playing).

evPauseSwitchToPlay

  Forms a switch together with `evPlaySwitchToPause`. They can be used to have a common play/pause button. Both messages should be assigned to buttons displayed at the very same position in the window. This message pauses playing and the image for the `evPlaySwitchToPause` button is displayed (to indicate that the button can be pressed to continue playing).

Seeking:

evBackward10sec

  Seek backward 10 seconds.

evBackward1min

  Seek backward 1 minute.

evBackward10min

  Seek backward 10 minutes.

evForward10sec

  Seek forward 10 seconds.

evForward1min

  Seek forward 1 minute.

evForward10min

  Seek forward 10 minutes.

evSetMoviePosition

  Seek to position (can be used by a potmeter; the relative value (0-100%) of the potmeter is used).

Video control:

evHalfSize

  Set the video window to half size.

evDoubleSize

  Set the video window to double size.

evFullScreen

  Switch fullscreen mode on/off.

evNormalSize

  Set the video window to its normal size.

evSetAspect

  Set the video window to its original aspect ratio.

evSetRotation

  Set the video to its original orientation.

Audio control:

evDecVolume

  Decrease volume.

evIncVolume

  Increase volume.

evSetVolume

  Set volume (can be used by a potmeter; the relative value (0-100%) of the potmeter is used).

evMute

  Mute/unmute the sound.

evSetBalance

  Set balance (can be used by a potmeter; the relative value (0-100%) of the potmeter is used).

evEqualizer

  Turn the equalizer on/off.

Miscellaneous:

evAbout

  Open the about window.

evPreferences

  Open the preferences window.

evSkinBrowser

  Open the skin browser window.

evMenu

  Open the (default) menu.

evIconify

  Iconify the window.

evExit

  Quit the program.

## B.5. Creating quality skins

So you have read up on creating skins for the MPlayer GUI, done your best with the Gimp and wish to submit your skin to us? Read on for some guidelines to avoid common mistakes and produce a high quality skin.

We want skins that we add to our repository to conform to certain quality standards. There are also a number of things that you can do to make our lives easier.

As an example you can look at the `Blue` skin, it satisfies all the criteria listed below since version 1.5.

- Each skin should come with a `README` file that contains information about you, the author, copyright and license notices and anything else you wish to add. If you wish to have a changelog, this file is a good place.

- There must be a file `VERSION` with nothing more than the version number of the skin on a single line (e.g. 1.0).

- Horizontal and vertical controls (sliders like volume or position) should have the center of the knob properly centered on the middle of the slider. It should be possible to move the knob to both ends of the slider, but not past it.

- Skin elements shall have the right sizes declared in the skin file. If this is not the case you can click outside of e.g. a button and still trigger it or click inside its area and not trigger it.

- The `skin` file should be prettyprinted and not contain tabs. Prettyprinted means that the numbers should line up neatly in columns and definitions should be indented appropriately.