# Codec

## Codec video

La tabella di stato dei codec è un elenco completo di tutti i codec supportati, aggiornata giornalmente. Nella sezione download del nostro sito sono disponibili alcuni codec binari da usare con MPlayer.

I più importanti su tutti:

- video MPEG-1 (VCD) e MPEG-2 (DVD)

- decodificatori nativi per tutte le tipologie di DivX, 3ivX, M$ MPEG-4 v1, v2 e altre varianti di MPEG-4.

- decodificatore nativi per Windows Media Video 7/8 (WMV1/WMV2), e decodificatori su DLL Win32 per Windows Media Video 9 (WMV3), entrambi usati in file `.wmv`.

- decodificatore nativo Sorenson 1 (SVQ1)

- decodificatore nativo Sorenson 3 (SVQ3)

- decodificatore 3ivx v1, v2

- codec Cinepak e Intel Indeo (3.1,3.2,4.1,5.0)

- formati hardware MJPEG, AVID, VCR2, ASV2 e altri

- varianti VIVO 1.0, 2.0, I263 e altre H.263(+)

- FLI/FLC

- RealVideo 1.0 & 2.0 atraverso libavcodec, e codec RealVideo 3.0 & 4.0 usando le librerie di RealPlayer

- decodificatore nativo per HuffYUV

- vari vecchi formati semplici tipo RLE

Se hai un codec Win32 non elencato qui che non è ancora supportato, leggi per favore l'HOWTO sull'importazione codec e aiutaci ad aggiungerne il decodificatore relativo.

### FFmpeg/libavcodec

FFmpeg contiene libavcodec, la libreria open source dominante di codec audio e video. E' in grado di decodificare molti formati multimediali, di solito a velocità più elevate delle alternative, e punta ad aggiungere prima o poi il supporto di decodifica per i restanti. E' il decodificatore di default usato da MPlayer. Anche la codifica è possibile per alcuni formati, ed è permessa da MEncoder.

Per una lista completa dei codec video e audio supportati per favore visita la homepage di FFmpeg.

MPlayer contiene libavcodec. Esegui semplicemente `./configure` e compila.

### Xvid

Xvid è un codec video libero compatibile MPEG-4 ASP, che contempla codifica a doppio pasaggio e supporto completo MPEG-4 ASP, rendendolo molto più efficiente del ben noto codec DivX. Porta una buona qualità video e delle buone prestazionu, grazie alle ottimizzazioni per CPU per molti processori moderni.

Nacque come un fork di sviluppo del codec OpenDivX. Ciò è accaduto quando ProjectMayo portò OpenDivX in DivX4 a sorgenti chiusi, e le persone non di ProjectMayo che lavoravano su OpenDivX si arrabbiarono, così iniziarono Xvid. Perciò tutti e due i progetti hanno la stessa origine.

Nota che Xvid non è necessario per decodificare video codificato in Xvid. Viene usata di default libavcodec visto che ha maggior velocità.

#### 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 (ti servono almeno autoconf 2.50, automake, e libtool):

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

5.     ./configure

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

6.     make && make install

7. Se hai specificato `--enable-divxcompat`, copia `../../src/divx4.h` in `/usr/local/include/`.

8. Ricompila MPlayer con `--with-xvidlibdir=/percorso/di/libxvidcore.a` `--with-xvidincdir=/percorso/di/xvid.h`.

### x264

#### Cos'è x264?

x264 è una libreria per creare flussi video H.264. Non è completa al 100%, ma attualmente ha perlomeno qualche tipo di supporto per la maggior parte delle caratteristiche di H.264 che influenzano la qualità. Ci sono anche molte caratteristiche avanzate nelle specifiche H.264 che non hanno nulla ha che fare con la qualità video di per sé; molte di queste non sono ancora implementate in x264.

##### Caratteristiche del codificatore

- CAVLC/CABAC

- Multi-referenza

- Intra: tutti i tipi di macroblocco (16x16, 8x8, e 4x4 con tutte le predizioni)

- Inter P: tutti i partizionamenti (da 16x16 fino a 4x4)

- Inter B: partizionamenti da 16x16 fino a 8x8 (includendo SKIP/DIRECT)

- Controllo frequenza: quantizzatore costante, frequenza bit costante, ABR a passaggio singolo o multiplo, VBV facoltativo

- Rilevazione cambi scena

- Posizionamento fotogrammi B adattivo

- Fotogrammi B come referenza / ordine arbitrario dei fotogrammi

- Trasformazione spaziale adattivo 8x8 e 4x4

- Modalità senza perdita (lossless)

- Matrici di quantizzazione personalizzate

- Codifica parallela di sezioni multiple

- Interlacciamento

#### Cos'è H.264?

H.264 è un nome per un nuovo codec video digitale sviluppato in comunione dall'ITU e da MPEG. Può anche essere correttamente chiamato coi nomi altisonanti di "ISO/IEC 14496-10" o "MPEG-4 Part 10". Più frequentemente, viene chiamato "MPEG-4 AVC" o solo "AVC".

In qualsiasi modo tu lo chiami, può valer la pena provare l'H.264 dato che tipicamente raggiunge la qualità di MPEG-4 ASP con il 5%-30% in meno della frequenza bit. I risultati reali dipenderanno sia dal materiale sorgente che dal codificatore. I guadagni ottenuti usando H.264 non arrivano senza un costo: per decodificare flussi H.264 pare richiedere CPU potenti e memoria. Per esempio, su un Athlon 1733 MHz, un H.264 a risoluzione video DVD a 1500kbps richiede circa il 35% della CPU, per la decodifica. Per contronto, decodificare un flusso MPEG-4 ASP a risoluzione video DVD a 1500kbps richiede circa il 10% della CPU. Ciò significa che anche un DVD rip decente può delle volte saltellare su CPU più lente di 2.0 GHz o giù di lì.

Almeno con x264, le risorse richieste per la codifica non sono peggiori di quelle cui sei abituato per MPEG-4 ASP. Per esempio, su un Athlon 1733 MHz una codifica tipica di un DVD girerebbe a 5-15fps.

Questa documentazione non vuole spiegare i dettagli di H.264, ma se sei interessato in un breve resoconto, potresti voler leggere The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions.

#### Come posso riprodurre video H.264 con MPlayer?

MPlayer usa il decodificatore H.264 di libavcodec. libavcodec ha avuto una decodifica almeno minimalmente usabile da circa luglio 2004, tuttavia grandi modifiche e sviluppi sono stati implementati da quel momento, sia in termini di maggiori funzionalità supportate che in termini di miglior utilizzo della CPU. Tanto per esser sicuri, è sempre una buona idea usare un checkout recente di libavcodec da SubVersion.

If you want a quick and easy way to know whether there have been recent changes to libavcodec's H.264 decoding, you might keep an eye on FFmpeg Subversion repository's web interface. Se vuoi un modo rapido ed indolore di sapere se ci sono state modifiche recenti alla decodifica H.264 di libavcodec, puoi poter dare un'occhiata all'interfaccia web del repository SubVersion di FFmpeg.

#### Come posso codificare video usando MEncoder e x264?

Se hai il client di subversion installato, i sorgenti più recenti di x264 possono esser ottenuti con questo comando:

    svn co svn://svn.videolan.org/x264/trunk x264

I sorgenti di MPlayer vengono aggiornati ogniqualvolta c'è una modifica nelle API di x264, per cui si consiglia sempre di usare allo stesso modo la versione da SubVersion di MPlayer. Forse questa situazione cambierà quando e se ci sarà un rilascio di x264. Nel frattempo, x264 dovrebbe esser considerato molto instabile, nel senso che la sua interfaccia di programmazione è soggetta a cambiamenti.

x264 so compila e installa nel solito modo:

    ./configure && make && sudo make install

Questo installa libx264 in /usr/local/lib e x264.h viene posto in /usr/local/include.

Con la libreria x264 e gli header nei percorsi standard, compilare il supporto per x264 in MPlayer è facile. Lancia semplicemente il comando:

    ./configure && make && sudo make install

Lo script `./configure` controllerà automaticamente che tu abbia i requisiti richiesti per x264.

## Codec audio

### I codec più importanti su tutti:

- audio MPEG layer 1/2/3 (MP1/2/3) (codice nativo, con ottimizzazione MMX/SSE/3DNow!)

- Windows Media Audio 7 e 8 (AKA WMAv1 and WMAv2) (codice nativo, con libavcodec)

- Windows Media Audio 9 (WMAv3) (usando le DLL DMO)

- audio AC-3 Dolby (codice nativo, con ottimizzazione MMX/SSE/3DNow!)

- AC-3 passando attraverso l'hardware della scheda audio

- AAC

- codec audio Ogg Vorbis (libreria nativa)

- RealAudio: DNET (AC-3 a bassa frequenza), Cook, Sipro and ATRAC3

- QuickTime: codec audio Qualcomm e QDesign

- audio VIVO (g723, Vivo Siren)

- audio Voxware (usando le DLL DirectShow)

- alaw e ulaw, svariati formati gsm, adpcm e pcm e altri vecchi codec audio semplici

- codec voce Adaptive Multi-Rate (AMR)

### Decodifica software AC-3

Questo è il decodificatore di default usato per file con audio AC-3.

Il decodificatore AC-3 può creare mix audio in uscita per 2, 4, o 6 altoparlanti. Quando è configurato per 6 altoparlanti, questo decodificatore fornisce uscite separate di tutti i canali AC-3 verso il driver audio, permettendo un'esperienza completa "surround sound" senza il decodificatore esterno AC-3 richiesto per usare il codec hwac3.

Usa l'opzione `-channels` per impostare il numero dei canali di uscita. Usa `-channels 2` per un sottomissaggio stereo. Per un sottomissaggio a 4 canali (uscite Frontale sinistro, Frontale destro, Surround sinistro, Surround destro), usa `-channels 4`. In questo caso, un qualsiasi canale centrale verrà miscelato in parti uguali nei canali frontali. `-channels 6` farà uscire tutti i canali AC-3 così come sono stati codificati - nell'ordine, sinistro, destro, Surround sinistro, Surround destro, centrale e LFE.

Il numero di default dei canali di uscita è 2.

Per usare più di 2 canali, ti servirà OSS, e avere una scheda audio che supporti l'appropriato numero di canali di uscita attraverso l'ioctl SNDCTL_DSP_CHANNELS. Un esempio di un diver utilizzabile è emu10k1 (usato dalle schede Soundblaster Live!) dall'agosto 2001 o dopo (anche il CVS ALSA si suppone funzioni).

### Decodifica hardware AC-3

Ti serve una scheda audio capace di decodificare AC-3, con uscita digitale (S/PDIF). Il driver della scheda deve supportare correttamente il formato AFMT_AC3 (C-Media lo fa). Collega il tuo decodificatore AC-3 all'uscita S/PDIF, e usa l'opzione `-ac hwac3`. E' sperimentale ma si sa che funziona con schede C-Media e driver Soundblaster Live! + ALSA (ma non OSS) e schede di decodifica MPEG DXR3/Hollywood+.

### Supporto per libmad

libmad è una libreria multipiattaforma di decodifica audio, per MPEG solo interi (internamente PCM a 24bit). Non gestisce bene file danneggiati, e delle volte ha problemi con la ricerca, ma può lavorare meglio su piattaforme senza FPU (come ARM) rispetto ad mp3lib.

Se hai una corretta installazione di libmad, `./configure` se ne accorgerà e il supporto per audio MPEG attraverso libmad verrà automaticamente compilato.

### Codec hardware audio MPEG

This codec (selected by `-ac hwmpa`) passes through MPEG audio packets to hardware decoders, such as the ones found in full-featured DVB cards and DXR2 adapters. Don't use it in combination with any other audio output device (such as OSS and ALSA) that isn't able to decode it (you will hear only white noise). Questo codec (selezionato con `-ac hwmpa`) trasferisce direttamente i pacchetti audio MPEG ai decodificatori audio, come quelli che si trovano nelle schede DVB full-option e negli adattatori DXR2. Non usarlo in combinazione con alcun altro dispositivo di uscita audio (come OSS o ALSA) che non sia capace di decodificarlo (sentirai solo rumore bianco).

### Codec AAC

AAC (Advanced Audio Coding) è un codec audio che si trova delle volte nei file MOV e MP4. E' disponibile da un decodificatore open source chiamato FAAD. MPlayer include uno snapshot CVS di libfaad 2.1 beta, così non hai bisogno di recuperarlo separatamente.

Se usi gcc 3.2 che fallirà nel compilare la nostra FAAD interna oppure vuoi usare la libreria esterna per qualche altra ragione, scarica la libreria della pagina di download e passa `--enable-faad-external` a `./configure`. Non ti serve tutto di faad2 per decodificare i file AAC, è sufficiente libfaad. Compilala così:

    cd faad2/
    sh bootstrap
    ./configure
    cd libfaad
    make
    make install

I binari non sono disponibili da audiocoding.com, ma puoi apt-gettare i pacchetti Debian dal sito di Christian Marillat, gli RPM per Mandrake/Mandriva da P.L.F e gli RPM per Fedora RPMs da Livna.

### Codec 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.

## HOWTO sull'importazione dei codec Win32

### Codec VFW

VFW (Video for Windows) sono le vecchie API Video per Windows. I loro codec hanno un'estensione `.DLL` o (raramente) `.DRV`. Se MPlayer non riesce a riprodurre il tuo AVI dando un messaggio del tipo:

    UNKNOWN video codec: HFYU (0x55594648)

significa che il tuo AVI è codificato con un codec che ha HFYU come fourcc (HFYU = HuffYUV codec, DIV3 = DivX Low Motion, etc.). Ora che lo sai, devi scoprire quale DLL di Windows viene caricata per reiprodurre quel file. Nel nostro caso il `system.ini` contiene questa informazione in una riga siffatta:

    VIDC.HFYU=huffyuv.dll

Perciò ti serve il file `huffyuv.dll`. Nota che i codec audio vengono specificati con il prefisso MSACM:

    msacm.l3acm=L3codeca.acm

Questo è il codec MP3. Ora che hai tutte le informazioni necessarie (fourcc, file del codec, AVI di esempio), invia via mail la tua richiesta di supporto per il codec, e carica questi file sul sito FTP: ftp://upload.mplayerhq.hu/MPlayer/incoming/<nomecodec>/

In Windows NT/2000/XP cerca queste informazioni nel registro, per es. cerca "VIDC.HFYU". Per scoprire come farlo, guarda il vecchio metodo per DirectShow più sotto.

### Codec DirectShow

DirectShow sono le API Video più recenti, che sono ancora peggio delle precedenti. Le cose sono più difficili con le DirectShow, dato che

- `system.ini` non contiene le informazioni che servono, sono invece scritte nel registro e

- bisogna sapere il GUID del codec.

#### Nuovo Metodo:

Usando Microsoft GraphEdit (veloce)

1. Ottieni GraphEdit o dall'SDK delle DirectX o da doom9.

2. Avvia `graphedit.exe`.

3. Dal menu scegli Graph Insert Filters.

4. Espandi DirectShow Filters.

5. Seleziona il nome giusto del codec e espandilo.

6. Nella voce DisplayName guarda il testo tra parentesi graffe dopo il backslash e segnatelo (cinque blocchi separati da trattini, il GUID).

7. Il codec binario è il file specificato nella voce Filename.

Se non c'è alcun Filename e DisplayName contiene qualcosa del tipo device:dmo, allora è un codec DMO.

#### Vecchio Method:

Fai un grosso respiro e inizia a cercare nel registro...

1. Avvia `regedit`.

2. Premi CtrlT, disabilita le prime due opzioni, e abilita la terza. Scrivi il fourcc del codec (per es. `TM20`).

3. Dovresti trovare un campo che contiene il percorso e il nome del file (per es. `C:\WINDOWS\SYSTEM\TM20DEC.AX`).

4. Ora che sai il file, ci serve il GUID. Prova a fare di nuovo la ricerca, ma ora cerca il nome del codec, e non più il fourcc. Il suo nome si può scoprire quando Media Player sta riproducendo il file, controllando File Properties Advanced. Se non c'è, sei sfortunato. Prova ad indovinarlo (per es. cerca TrueMotion).

5. Se trovi il GUID, dovresti trovare un campo "FriendlyName" e un "CLSID". Segnati il CLSID di 16 caratteri, questo è il GUID che ci serve.

Se la ricerca fallisce, prova ad abilitare tutte le opzioni. Puoi avere dei falsi positivi, ma potresti essere fortunato...

Ora che hai tutte le informazioni necessarie (fourcc, GUID, file del codec, AVI di esempio), invia via mail la tua richiesta di supporto per il codec, e carica questi file sul sito FTP: ftp://upload.mplayerhq.hu/MPlayer/incoming/<nomecodec>/

Se ti garba aggiungere un codec per conto tuo, leggi DOCS/tech/codecs.conf.txt.