Diritto d'autore © 2000-2018 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.
libcaca
– Libreria Color ASCII Art
libavcodec
codec familyXvid
codecx264
codecVideo For Windows
codec family
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.
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.
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.
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
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.
La GUI abbisogna di GTK 1.2.x o GTK 2.0 (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
,
o la voce nomeskin
skin=nomeskin
nel file di configurazione, per
utilizzare la skin nella directory
*/skins/nomeskin
.
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.
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.
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.
MPlayer possiede un'interfaccia per i Menu OSD completamente personalizzabile.
il menu Preferenze attualmente NON E' IMPLEMENTATO!
Installazione
compila MPlayer passando
a ./configure
l'opzione --enable-menu
assicurati di avere un font OSD installato
copia etc/menu.conf
nella tua directory
.mplayer
copia etc/input.conf
nella tua directory
.mplayer
, oppure nella directory di
configurazione di sistema di MPlayer (default:
/usr/local/etc/mplayer
)
controlla e modifica input.conf
per abilitare i tasti
di movimento nel menu (è lì spiegato)
avvia MPlayer come nell'esempio seguente:
mplayer -menu file.avi
premi quualcuno dei tasti menu che hai definito
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:
cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login
cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore
cd xvidcore/build/generic
./bootstrap.sh && ./configure
Puoi dover aggiungere alcune opzioni (controlla quello che emette ./configure --help).
make && make install
Ricompila MPlayer.
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
.
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.
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
.
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.
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 ffmpegmovie1.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
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
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
(facoltativo),
esempio.ifo
- devi passare a
MPlayer le opzioni esempio.idx
-vobsub esempio
[-vobsubid
(il percorso completo è facoltativo). L'opzione id
]-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
, devi passare
l'opzione esempio.txt
-sub
(il percorso completo è facoltativo).
esempio.txt
Regolazione tempi e posizionamento dei sottotitoli:
-subdelay sec
Differisce i sottotitoli di
secondi.
Può essere un valore negativo. Il valore viene aggiunto al contatore
della posizione nel filmato.
sec
-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 -fpsfps_sottotitoli
-subfpsfps_avi
\ -subnomefile_sottotitoli
dummy.avi
Riguardo i sottotitoli DVD, leggi la sezione DVD.
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.
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
(i percorsi sono relativi a conf
$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
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
per indicare un altro file.
nomefile
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.
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 -
Si raccomanda inoltre di abilitare -cache
riproducendo da rete:
wget ftp://micorsops.com/qualcosa.avi
-O - | mplayer -cache 8192 -
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:
mplayerhttp://217.71.208.37:8006
-dumpstream -dumpfilestream.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.
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.
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/
"
per regolare con precisione il tuo CD-ROM.
[dispositivo cdrom]
/settings
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.
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à.
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.
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.
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
.
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.
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).
Includi l'opzione -edl <nomefile>
quando esegui
MPlayer, con il nome del file EDL che vuoi sia
applicato al video.
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.
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.
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.
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.
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
***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:
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
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
centrale
stereo
sinistro
destro
quadrifonico
sinistro frontale
destro frontale
sinistro posteriore
destro posteriore
surround 4.0
sinistro frontale
destro frontale
centrale posteriore
centrale frontale
surround 5.0
sinistro frontale
destro frontale
sinistro posteriore
destrale posteriore
centrale frontale
surround 5.1
sinistro frontale
destro frontale
sinistro posteriore
destro posteriore
centrale frontale
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.
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
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.
Decidi quanti canali di uscita ti servono. Questa è la prima sotto-opzione.
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
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
.
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:
In modo da fornire un canale di uscita per ognuno dei due altoparlanti, la prima sotto-opzione deve essere "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".
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.
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.
Un'altra operazione comune è duplicare il canali frontali e riprodurli anche sugli altoparlanti posteriori in un'impostazione quadrifonica.
Ci devono essere quattro canali di uscita. La prima sotto-opzione è "4".
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".
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
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.
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.
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.
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.
Qui c'è un altro esempio per riprodurre il canale sinistro in due altoparlanti. Segui i passaggi suddetti:
pan
deve uscire con due canali, indi la prima sotto-opzione
è "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".
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.
Il decodificatore di MPlayer per PCM a 6 canali non
è in grado di sottomiscelare. C'è un modo di sottomiscelare PCM usando
pan
:
Il numero di canali di uscita è 2, indi la prima sotto-opzione è "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.
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
:
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.
pan
outputs to only five channels, the first suboption is 5.
pan emette solo cinque canali, così la prima sotto-opzione è 5.
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
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.
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.
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
).
Assicurati che il tuo sintonizzatore funzioni con altri software TV per Linux, per esempio XawTV.
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.
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.
Il televideo è attualmente disponibile solo in MPlayer per i driver v4l e v4l2.
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.
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
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.
Per prima cosa devi compilare MPlayer usando
./configure
con --enable-radio
e
(se vuoi il supporto per la cattura) --enable-radio-capture
.
Assicurati che il tuo sintonizzatore funzioni con altri software radio per Linux, per esempio XawTV.
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).
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
Usando i nomi dispositivi ALSA, i due punti devono esser sostituiti con il segno di uguale, le virgole con punti.
libcaca
– Libreria Color ASCII Art
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:
dai messaggi di avvio di X11, per esempio:
(--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000 (--) SVGA: Linear framebuffer at 0xD8000000
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)
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).
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:
Che tu usi XFree86 4.0.2 o superiore (le versioni precedenti non hanno XVideo)
Che la tua scheda supporti l'accelerazione hardware (le schede moderne la supportano)
Che X carichi l'estensione XVideo, è un qualcosa del genere:
(II) Loading extension XVideo
in /var/log/XFree86.0.log
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!
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.
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
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
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).
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.
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.
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.
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
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.
Se vuoi usare Xv con una scheda basata su Kyro (per esempio la Hercules Prophet 4000XT), dovresti scaricare i driver dal sito di PowerVR.
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
.
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.
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).
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).
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.
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
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.
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 -fbmodenome_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
La modifica della modalità video di FBdev non funziona con il framebuffer VESA, e non chiederla, visto che non è una limitazione di MPlayer.
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:
Per usarlo devi innanzitutto compilare drivers/mga_vid.o
:
cd drivers make drivers
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
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
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
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.
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
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:
Compila drivers/tdfx_vid.o
:
cd drivers make drivers
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
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.
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
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.
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
!
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.
<terminale>
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.
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.
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.
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.
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.
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:
Scarica la versione di sviluppo di svgalib (1.9.x).
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.
Per creare i dispositivi necessari nella directory
/dev
, esegui, da utente root,
make device
nella directory
svgalib_helper
.
Poi esegui di nuovo configure
passando i parametri
--enable-svgalib_helper
e
--extra-cflags=
,
dove /percorso/dei/sorgenti/di/svgalib_helper
kernel/svgalib_helper/percorso/dei/sorgenti/di/svgalib_helper
deve
puntare al percorso dove hai estratto i sorgenti di svgalib_helper.
Ricompila.
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.
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.
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.
Anche se esiste un driver per i chip 3DLabs GLINT R3 e Permedia3, nessuno lo ha provato, perciò delle informazioni sono benvenute.
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
"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)
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.
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 mpegpestuofile.ext
mplayer -ao mpegpes -vo mpegpes -vf expandtuofile.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 -dumpfiler1.ts
-dumpstream dvb://R1
Se vuoi registrarlo in un formato diverso (ri-codificandolo) puoi invece lanciare un comando come
mencoder -or1.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).
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.
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.
= numero del dipositivo da usare se hai più di una scheda em8300. Ognuna di queste opzioni può essere
tralasciata.
dispositivo
: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=
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.
qualità
:25
-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.
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.
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.
Sotto Linux hai due modi per far funzionare l'uscita TV delle G400:
Per le istruzioni per l'uscita TV-out su Matrox G450/G550, vedi per favore la sezione successiva!
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).
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).
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!).
Dopodiché imposta il monitor e la TV come ti garba usando gli strumenti citati sopra.
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
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...
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).
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/
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)
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.
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.
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.
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.
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
To build an RPM package, run the following command in the MPlayer source directory:
FIXME: insert proper commands here
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.
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).
If your CPU has SSE, recompile your kernel with
"options CPU_ENABLE_SSE
" (FreeBSD-STABLE or kernel
patches required).
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.
See the Mac OS section.
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.
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=
option to tell the /wherever/you/have/installed/gnu-as
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).
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.)
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
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=
will keep it from being used. Add this to your config file to permanently
keep it from being used.
colorspace
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=
(alternatively
c:/path/to/your/codecs
--codecsdir=
only on Cygwin) to /path/to/your/codecs
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-deviced:
DVDs also work, adjust -dvd-device
for the drive letter
of your DVD-ROM:
mplayer dvd://<title>
-dvd-deviced:
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.
If you have a Pentium 4 and are experiencing a crash using the RealPlayer codecs, you may need to disable hyperthreading support.
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.
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.
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
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.
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.
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:
mencoderinput.avi
-ooutput.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
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.
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
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
-ooutput.psp
Nota che puoi impostare il titolo del video con
-info name=
.
TitoloFilmato
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:
mencoderinput.avi
-of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \ -oac copyaltre_opzioni
-ooutput.mpg
Creare un file MPEG-1 che possa essere riprodotto da sistemi con un supporto multimediale minimale, come l'installazione di default di Windows:
mencoderinput.avi
-of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \ -ooutput.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
:
mencoderinput.avi
-oVCD.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
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.
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=
.
La sua qualità può essere impostata con l'opzione larghezza
:altezza
-sws
.
Se non è specificato, MEncoder userà 2: bicubico.
Uso:
mencoderinput.mpg
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \ -vf scale=640:480 -ooutput.avi
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
per farlo.
nomefile
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:
mencoderinput.nsv
-oac copy -fafmttag 0x706D \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -ooutput.avi
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:
MEncoder decodifica le
immagini in entrata con libjpeg
(decodificando PNG, userà libpng
).
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 -ooutput.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 -ooutput.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
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
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
rmsottotitoli.idx
sottotitoli.sub
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \ -vobsuboutsottotitoli
-vobsuboutindex 0 -sid 2 mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -vobsuboutsottotitoli
-vobsuboutindex 1 -sid 5
Esempio 6.6. Copiare i sottotitoli francesi da un file MPEG
rmsottotitoli.idx
sottotitoli.sub
mencoderfilm.mpg
-ifofilm.ifo
-vobsuboutsottotitoli
-vobsuboutindex 0 \ -vobsuboutid fr -sid 1 -nosound -ovc copy
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
mencodersvcd-di-esempio.mpg
-vf crop=714:548:0:14 -oac copy -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -ooutput.avi
libavcodec
codec familyXvid
codecx264
codecVideo For Windows
codec family
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.
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.
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.
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.
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.
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.
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
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.
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:
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.
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.
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.
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.
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ò:
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).
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.
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.
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.
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
.
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:
Altezza e scostamento del taglio devono essere multipli di 4.
Qualsiasi ridimensionamento verticale va fatto in modalità interlacciata.
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
.
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.
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.
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.
mplayerfile_sorgente.vob
-aid 129 -dumpaudio -dumpfilesuono.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:
mplayerfile_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.
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 -ofilm_in_uscita.avi
\ -audiofileaudio_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 -ofilm_di_uscita.asf
-audiofileaudio_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à).
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.
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:
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.
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.
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 -odestinazione.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.
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]
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.
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
mplayer dvd://1
Ricerca una parte con movimento.
Usa il tasto . per avanzare di un fotogramma per volta.
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.
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.
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.
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.
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.
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].
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.
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).
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
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
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
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
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.
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.
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.
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.
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%.
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):
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
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.
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.
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 |
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:
mencoderinput.avi
-ooutput.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
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
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.
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.
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.
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 |
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 |
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.
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.
This guide considers two major categories of encoding options:
Options which mainly trade off encoding time vs. quality
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.
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.
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).
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.
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 |
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.
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-devicezeiram.iso
dvd://7 -otrailer.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
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.
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 …).
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.
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.
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
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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
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.
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
libavcodec
can be used to
create VCD/SVCD/DVD compliant video by using the appropriate options.
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.
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
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
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.
This section shows some complete commands for creating VCD/SVCD/DVD compliant videos.
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 \ -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
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 -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
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 \ -omovie.mpg
movie.avi
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 \ -omovie.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.
8.1. Sviluppo | |
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
|
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: | |
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
|
Domanda: |
Ho una Matrox G200/G400/G450/G550, come compilo/uso il driver
|
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 |
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
gunzip < CompatFrameworks.tgz | tar xvf -
In config.mak, dovresti aggiungere
Il binario di MPlayer risultante userà
effettivamente il framework installato sul tuo sistema attraverso i link
dinamici risolti durante l'esecuzione
(Puoi verificarlo usando |
8.3. Domande generali | |
| |
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,
Alternativamente puoi eseguire MPlayer con il filtro
video |
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
Molti di essi sono presenti per finalità di debug, usa l'opzione
|
Domanda: |
Ci sono dei messaggi di errore circa un file non trovato
|
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. |
Risposta: |
Crea un file con nome |
Domanda: | I sottotitoli sono molto belli, i migliori ch'io abbia mai visto, ma rallentano la riproduzione! So che è strano ... |
Risposta: |
Dopo aver eseguito |
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ì:
|
Domanda: | Come posso eseguire MPlayer in background? |
Risposta: | Usa: mplayer
|
8.4. Problemi di riproduzione | |
| |
Domanda: | Non riesco ad isolare la causa di qualche strano problema di riproduzione. |
Risposta: |
Hai un file randagio |
Domanda: | Come faccio a far sì che i sottotitoli vengano visualizzati sui margini neri esterni al film? |
Risposta: |
Usa il filtro video 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 mplayer -alang eng -slang eng Per vedere quelle disponibili: mplayer -vo null -ao null -frames 0 -v
|
Domanda: | Sto cercando di riprodurre un qualche file da internet ma non ce la fa. |
Risposta: |
Prova a riprodurre il flusso con l'opzione |
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
|
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:
|
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
|
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 |
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 |
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. |
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
|
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 =
in
vo_driver =
in |
Domanda: |
Ho dei problemi con |
Risposta: |
Leggi le linee guida per segnalare i bug e
mandaci un appropriato rapporto sul bug.
Prova anche facendo esperimenti con l'opzione |
Domanda: | Riproducendo un file AVI, l'audio perde la sincronizzazione. |
Risposta: |
Prova le opzioni |
Domanda: |
Il mio computer riproduce gli AVI MS DivX a risoluzione ~ 640x300 e l'audio
MP3 stereo è troppo lento.
Quando uso l'opzione |
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 |
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 |
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( |
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 |
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.
|
Domanda: | Come faccio ad eliminare la desincronizzazione A/V durante la ricerca attraverso flussi RealMedia? |
Risposta: |
|
8.6. Riproduzione DVD | |
| |
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 |
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 |
Domanda: | E' possibile riprodurre/codificare solo dei capitoli voluti? |
Risposta: |
Sì, prova l'opzione |
Domanda: | La mia riproduzione DVD è fiacca! |
Risposta: |
Usa l'opzione |
Domanda: | Ho copiato un DVD usando vobcopy. Come lo riproduco/codifico dal mio disco fisso? |
Risposta: |
Use the
mplayer dvd://1 -dvd-device
|
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. |
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? |
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
mplayer dvd://5 -dumpstream -dumpfile
farà il dump del quinto titolo del DVD sul file
|
Domanda: | Come posso creare automaticamente dei (S)VCD? |
Risposta: |
Prova lo script |
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 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 mencoder 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 mencoder
|
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 Poi puoi creare un nuovo file che contiene solo la parte a posto: dd if=
|
Domanda: | Non riesco a codificare i sottotitoli DVD dentro all'AVI! |
Risposta: |
Devi specificare correttamente l'opzione |
Domanda: | Come posso codificare solo determinati capitoli di un DVD? |
Risposta: |
Usa adeguatamente l'opzione |
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]
|
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 |
Domanda: | Come posso mettere i sottotitoli nel file di destinazione? |
Risposta: |
Passa semplicemente a MEncoder l'opzione
|
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 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: |
mencoder
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
|
Domanda: | Come posso codificare un file solo audio? |
Risposta: |
Usa |
Domanda: | Come posso riprodurre sottotitoli impacchettati in un AVI? |
Risposta: |
Usa |
Domanda: | MPlayer non potrebbe... |
Risposta: |
Dai un'occhiata alla sottodirectory |
[3] In parte, alcune forme di protezione di copia usate nei DVD possono esser considerate contenuto rovinato.
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.
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.
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.
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 :-).
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.
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.
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.
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
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.
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.
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 -voptions
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.
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:
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 -vopzioni-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
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...
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.
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.
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.
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).
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.
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.
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.
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
image for phase #1 and the second coordinate x1,y1
the 100% stop point in the image for phase #n - in other words, the
coordinates of the tip of the mark on the potentiometer in the two
individual images.
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 |
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.
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).
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.
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
is the name of the
image file to be used for the font (you do not have to specify the extension).
image
"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
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 |
These are the messages that can be generated by buttons, potmeters and menu entries.
Empty message, it has no effect.
Playback control:
Start playing.
Stop playing.
Pause playing.
Jump to previous track in the playlist.
Jump to next track in the playlist.
Load a file (by opening a file selector dialog box, where you can choose a file).
Does the same as evLoad
, but it automatically starts
playing after the file is loaded.
Loads an audio file (with the file selector).
Loads a subtitle file (with the file selector).
Disables the currently used subtitle.
Open/close the playlist window.
Tries to open the disc in the given CD-ROM drive.
Tries to open the disc in the given CD-ROM drive.
Tries to open the disc in the given DVD-ROM drive.
Loads an CD/(S)VCD/DVD image or DVD copy (with the file selector) and plays it as if it were a real disc.
Displays the URL dialog window.
Tries to start TV/DVB broadcast.
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).
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:
Seek backward 10 seconds.
Seek backward 1 minute.
Seek backward 10 minutes.
Seek forward 10 seconds.
Seek forward 1 minute.
Seek forward 10 minutes.
Seek to position (can be used by a potmeter; the relative value (0-100%) of the potmeter is used).
Video control:
Set the video window to half size.
Set the video window to double size.
Switch fullscreen mode on/off.
Set the video window to its normal size.
Set the video window to its original aspect ratio.
Set the video to its original orientation.
Audio control:
Decrease volume.
Increase volume.
Set volume (can be used by a potmeter; the relative value (0-100%) of the potmeter is used).
Mute/unmute the sound.
Set balance (can be used by a potmeter; the relative value (0-100%) of the potmeter is used).
Turn the equalizer on/off.
Miscellaneous:
Open the about window.
Open the preferences window.
Open the skin browser window.
Open the (default) menu.
Iconify the window.
Quit the program.
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.