Ffmpeg Reference
shop software
Home Shop Software Forum Guide Le Vostre Guide FAQ    
 ^ Le Guide
NeoDivX 9.3
L' Xmpeg
L' IniEditor
L' EasyDivX
Il VirtualDub
Il Vidomi
Il VCD
Il NanDub
Il MicroDVD
Il GordianKnot
Il FlaskMpeg
Il DVD Decrypter
Il Bit-Rate Calculator
I SVCD
Ffmpeg Reference
DVDx 2.1
DVD Reaper
Da DVD a ratDVD
(S)VCD con bbMPEG 1.24b18 e FlaskMpeg
 ^ Gli Articoli
Xvid Vs. DivX 5
Ogg Vorbis
MovieJack, DivX Duplicator
La guerra dei Codec
L' Xvid
Il DivX 5.x
Il DivX 4.x
Il DivX
DVD -> DivX MP3 ( Parte 2 )
DVD -> DivX MP3 ( Parte 1 )
DivX 4 Vs DivX 5
Da Wmv in formato DivX
Da DVD a DivX (Mp3)
Da DVD a DivX (Ac3)
Avisynth 1.0 (Beta 3)
(S)VCD con Nero
 ^ Le Vostre Guide
 > Backup di un DVD-9 in ..
 > Guida - Pinnacle DC10+
 > Backup Dvd con Dvd2one
 > Da DV a DivX
 > Comprimere con Gordian..
 > Dal Dvd al DiVX per Ps..
 > Guida ai formati video..
 > DivX con audio AC3, DT..
 > DivX di qualità
 > Guida al Resize di un ..
 > Guida da DVD a Divx + ..
 > Il NeoDivx 9.2
 > Da DVD a DivX
 > DVD to divx+mp3 v.2
 > Come creare un DivX
 > Divx Factory 2.0
 > Il Divx 4 video codec
 > Da DvD a DivX in Ac3
 > Il Virtual Dub
 > Convertire DVD in DivX..
 > DivX Spettacolari
 > Guida DivX
 > Guida (S)VCD
 > DivX Super test
 > Da DivX a VCD
 > Cut Join di un file AV..
 > Il NeoDivX
 > Masterizzazione in Ove..
 > Guida per l'AutoRv9
 ^ Top 10 Download
DVD Decrypter 3.5... 379931
XviD 254630
VirtualDub EXP 242890
DVDX 194725
XviD Video Codec 185706
DVDX 184244
TMPGEnc 158694
Radium Mp3 Codec 154010
Divx Video Codec 3.. 153737
AC3 Filter 140108
Ffmpeg Reference
Software Utilizzato :
Ffmpeg

Autore :
anonimoanemico
FFmpeg Documentazione (Traduzione dal documento ufficiale http://ffmpeg.sourceforge.net)

Indice
1 Introduzione
2 Avvio rapido
  2.1 Estrazione Video ed Audio
  2.2 Conversione dei formati dei file Video ed Audio
3 Comandi
  3.1 Sintassi
  3.2 Opzioni principali
  3.3 Opzioni video
  3.4 Opzioni audio
  3.5 Opzioni avanzate
  3.6 Protocolli
4 Tips
5 Formati file e codec supportati
  5.1 Formati file
  5.2 Formati di immagine
  5.3 Codec video
  5.4 Codec audio
6 Informazioni sulle specifiche di piattaforma
  6.1 Linux
  6.2 BSD
  6.3 Windows
  6.4 MacOS X
  6.5 BeOS
7 Guida allo sviluppo
  7.1 Le API
  7.2 Integrazione di libavcodec o libavformat nel tuo programma
  7.3 Regole di codifica
  7.4 Invio delle Patch
  7.5 Test regressivi


1. Introduzione
L'FFmpeg è un convertitore audio e video molto veloce. Può anche estrarre un flusso audio/video da una sorgente dal vivo. L'interfaccia a linea di comando è progettata per essere intuitiva, nel senso che l'FFmpeg tenta di stabilire, da se, tutti i suoi parametri, quando possibile. Solitamente bisogna soltanto specificare il bitrate che si mira ad ottenere. L'FFmpeg può anche convertire, al volo, un video da un valore di bitrate ad un altro ed eseguirne il suo ridimensionamento, attraverso un filtro polifase ad alta qualità.
^top

2. Avvio rapido
2.1 Estrazione Video ed Audio
FFmpeg può usare un sorgente compatibile con video4linux e qualsiasi sorgente audio OSS (Open Sound System):

ffmpeg /tmp/out.mpg

Nota che è necessario attivare il canale e la sorgente video corretti prima di avviare ffmpeg. Puoi usare[, come flusso sorgente,] anche qualsiasi visualizzatore TV, come l'xawtv di Gerd Knorr che io reputo molto valido. Devi anche impostare correttamente il livello di registrazione audio con l'ausilio di un normale mixer.
^top

2.2 Conversione dei formati dei file Video ed Audio
* ffmpeg può usare qualsiasi tipo di protocollo e di formati file supportati come ingresso:


Ad esempio:
* Puoi usare come ingresso un file YUV:
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg


Userà i file:
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...


I file Y usano il doppio della risoluzione dei file U e V. Loro sono dei file puri (RAW file), senza alcun header. Possono essere generati da un qualsiasi decoder video decente. E' necessario che venga specificata la dimensione dell'immagine con l'opzione '-s', nel caso l'ffmpeg non sia in grado di stabilirla.

* Puoi usare come ingresso un file RAW YUV420P:

ffmpeg -i /tmp/test.yuv /tmp/out.avi

Il file RAW YUV420P contiene una specifica sequenza di frame, che si ripetono secondo una stessa struttura: per ogni frame, prima viene uno di livello Y e quelli di livelli U e V, che presentano metà risoluzione verticale ed orizzontale.

* Puoi ottenere come uscita un file RAW YUV420P:

ffmpeg -i mydivx.avi -o hugefile.yuv

* Puoi impostare diversi file di ingresso e di uscita:

ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

Converte il file audio a.wav e il file video RAW YUV a.yuv nel file a.mpg

* Puoi anche eseguire una conversione audio e video nello stesso tempo:

ffmp -i /tmp/a.wav -ar 22050 /tmp/a.mp2

Converte la frequenza campione di a.wav in quella di 22050 Hz e la codifica nel formato audio MPEG.

* Puoi codificare diversi formati nello stesso tempo e definire un "mappa degli indici" dal flusso di ingresso a quelli di uscita:

ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

Converte il file a.wav nel file a.mp2 a 64Kbit e nel file b.mp2 a 128 kbit. '-map file:indice' specifica che il flusso di ingresso è usato per ogni flusso d'uscita, nell'ordine di definizione dei flussi di uscita.

* Puoi decodificare i VOB decriptati:

ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

Questo è un tipico esempio di rippaggio di un DVD, l'ingresso corrisponde ad un file VOB, e l'uscita ad un file AVI con video in formato MPEG-4 e audio in formato MP3; occorre notare che in questo comando vengono impiegati i frame B in modo che il flusso MPEG-4 sia compatibile con codec DivX5, la dimensione del GOP (group of picture) è di 300, e ciò significa un frame INTRA ogni 10 secondi per un video a 29.97 fps. Anche il flusso audio viene codificato in MP3 perciò vi è bisogno del supporto LAME che viene abilitato usando --enable-mp3lame durante la configurazione. Il "mappaggio" è particolarmente utile nella decodifica dei DVD per la selezione dell'audio nella lingua desiderata.

NOTA: per vedere i formati file supportati, il comando è il seguente: ffmpeg -formats.
^top

3 Comandi

3.1 Sintassi
La sintassi generica è:

ffmpeg [[options][-i ingresso_file]]... {[options] uscita_file}...

Se nessun file in ingresso viene fornito, viene eseguita la cattura audio/video.

Come regola generale, le opzioni vengono applicate al file che viene successivamente specificato. Ad esempio, fornendo l'opzione '-b 64', viene impostato il bitrate relativo al prossimo file. Potrebbe essere necessario fornire l'opzione sul tipo di formato quando usati come ingresso i file privi di header (RAW file).

Di default, ffmpeg prova a convertire con la minor perdita possibile di qualità: per i file di uscita viene usato lo stesso parametro riferito all’audio ed al video specificato per i file in ingresso.
^top
3.2 Opzioni principali
'-L' mostra licenza
'-h'
mostra help
'-formats'
mostra i formati, codec, protocolli ecc. disponibili.
'-f fmt'
forza il formato
'-i filename'
nome file in ingresso
'-y'
sovrascrivi il file in uscita
'-t duration'
imposta (in secondi) il tempo di registrazione. La sintassi "hh:mm:ss[.xxx]" è anche supportata.
'-title string'
imposta il titolo
'-author string'
imposta l'autore
'-copyright string'
imposta i diritti d'autore
'-comment string'
imposta un commento
'-b bitrate'
imposta il bitrate video (in kbit/s)
^top

3.3 Opzioni video
'-s size'
imposta la dimensione dei frame [160x128]
'-r fps'
imposta il frame rate [25]
'-b bitrate'
imposta il bitrate video (in kbit/s) [200]
'-vn'
disabilita la registrazioni video [no]
'-bt tolerance'
imposta la tolleranza di bitrate per il video (in kbit/s)
'-sameq'
usa la stessa qualità video della sorgente (implica VBR)
'-pass n'
seleziona il numero di passaggi (1 o 2) da eseguire nella codifica. E' quindi necessario per effettuare la codifica a due passaggi (two pass encoding). Le statistiche del video (log) vengono registrare nel primo passaggio ed il video invece viene generato, all’esatto bitrate richiesto, durante il secondo passaggio.
`-passlogfile file'
seleziona il nome del file log per la codifica a due passaggi
^top

3.4 Opzioni audio
'-ar freq'
imposta la frequenza di campionamento audio [44100]
'-ab bitrate'
imposta il bitrate del flusso audio in kbit/s [64]
'-ac channels'
imposta il numero di canali audio [1]
'-an'
disabilita la registrazione audio [no]
^top

3.5 Opzioni avanzate
'-map file:stream'
imposta il valore corrispondente ad un flusso d’ingresso (mapping)
'-g gop_size'
imposta il valore della dimensione del GOP (group of picture)
'-intra'
usa solo INTRA frame
'-qscale q'
usa un valore fisso per il video quantiser scale (VBR)
'-qmin q'
minimo valore del video quantizer scale (VBR)
'-qmax q'
massimo valore del video quantizer scale (VBR)
'-qdiff q'
massima differenza fra le video quantiser scale (VBR)
'-qblur blur'
video quantiser scale con sfocamento (VBR)
'-qcomp compression'
video quantiser scale con compressione (VBR)
'-vd device'
imposta la periferica video
'-vcodec codec'
forza il codec video
'-me method'
imposta il metodo di stima (predizione) di movimento
'-bf frames'
usa 'frames' B frame (solo MPEG-4)
'-hq'
attiva impostazioni ad alta qualità
'-4mv'
usa 4 vettori di movimento (solo MPEG-4)
'-ad device'
imposta la periferica audio
'-acodec codec'
forza il codec audio
'-deinterlace'
deinterlaccia le immagini
'-benchmark'
imposta la tempistica di rilevazione del benchmark
'-hex'
salva ogni pacchetto di ingresso
'-psnr'
calcola il PSNR dei frame compressi
'-vstats'
salva le statistiche di codifica video su file
^top

3.6 Protocolli
Il nome del file può essere “-“, per indicare la lettura o la scrittura dalla periferica d’ingresso o di uscita standard.
L’Ffmpeg gestisce molti protocolli specificati anche via URL.
Usa 'ffmpeg -formats' per una lista dei protocolli supportati.
Il protocollo http: è attualmente usato solo per comunicare con il ffserver (riferimento alla documentazione dell’ffserver). Quando l’ffmpeg sarà un riproduttore video sarà, infatti, anche impiegato per lo streaming J.
^top

4. Tips
· Per lo streaming di applicazioni a bitrate molto ridotti, usa un basso numero di frame rate e una piccola dimensione del gop. Questa soluzione è molto efficiente per i video in tempo reale in cui il player di linux non sembra essere molto veloce, così che qualche frame possa essere ignorato. Un esempio è:
ffmpeg -g 3 -r 3 -t 10 -b 50 -s qcif -f rv10 /tmp/b.rm
· Il parametro ‘q’ che è mostrato durante la codifica è l’attuale quantizer. Il valore 1 indica che una ottima qualità può essere raggiunta. Se q=31 troppo spesso, questo significa che l’encoder non può comprimere a sufficienza per raggiungere il valore del bitrate impostato tramite parametro. Devi, quindi, sia aumentare il bit rate, che diminuire il frame rate o diminuire la dimensione dei frame.
· Se il tuo computer non è abbastanza veloce, puoi aumentare la velocità di compressione a spese del rapporto di compressione. Puoi usare ‘-me zero’ per velocizzare la stima di movimento, e ‘-intra’ per disattivare completamente la stima di movimento (si ottengono soltanto frame tipo I, che significa qualità pari alla compressione JPEG)
· Per ottenere l’audio ad un bitrate molto basso, bisogna ridurre la frequenza di campionamento (diminuire a 22050 kHz per audio mpeg , a 22050 o 11025 per ac3).
· Per avere una qualità costante (ma a bitrate comunque variabile), usare l’opzione '-qscale n', dove 'n' è un valore compreso tra 1 (qualità eccellente) e 31 (qualità peggiore).
· Durante la conversione di un file video, si può usare l’opzione '-sameq' che usa nell’encoder lo stesso fattore di qualità del decoder. Ciò consente una codifica quasi senza perdita di qualità.
^top

5. Formati file e codec supportati
Puoi usare l’opzione -formats per avere la lista esaustiva.
^top

5.1 Formati file
FFmpeg supporta I seguenti formati di file attraverso la libreria libavformat:
Formati file supportati Encoding Decoding Commenti
MPEG audio X X
MPEG1 systems X X muxed audio e video
MPEG2 PS X X anche conosciuto come VOB file
MPEG2 TS X anche conosciuto come DVB Transport Stream
ASF X X
AVI X X
WAV X X
Macromedia Flash X X solo l’audio incorporato viene decodificato
Real Audio e Video X X
Raw AC3 X X
Raw MJPEG X X
Raw MPEG video X X
Raw PCM8/16 bits, mulaw/Alaw X X
SUN AU format X X
Quicktime X
MPEG4 X MPEG4 è una variante di Quicktime
Raw MPEG4 video X X
DV X solo la traccia video viene decodificata
X significa che la codifica (risp. Decodifica) è supportata.
^top

5.2 Formati di Immagine
L’FFmpeg può leggere e scrivere le immagini di ogni singolo frame in una sequenza video. I seguenti formati di immagine sono supportati:

Formati di imagine supportati Encoding Decoding Commenti
PGM, PPM X X
PGMYUV X X PGM con componenti U e V in 420
JPEG X X Progressive JPEG non è supportato
.Y.U.V X X Solo un file raw per componente
GIF Animata X Solo una GIF non compressa viene generata
X significa che la codifica (risp. Decodifica) è supportata.
^top

5.3 Codec Video
Codec Supportati Encoding Decoding Commenti
MPEG1 video X X
MPEG2 video X
MPEG4 X X Anche conosciuto come DIVX4/5
MSMPEG4 V1 X X
MSMPEG4 V2 X X
MSMPEG4 V3 X X Anche conosciuto come DIVX3
WMV7 X X
H263(+) X X Anche conosciuto come Real Video 1.0
MJPEG X X
DV X
Huff YUV X X
X significa che la codifica (risp. Decodifica) è supportata.
Verifica presso http://www.mplayerhq.hu/~michael/codec-features.html per avere un precisa confronto del codec FFmpeg MPEG4 con le altre soluzioni.
^top

5.4 Codec Audio
Codec Supportati Encoding Decoding Commenti
MPEG audio layer 2 IX IX
MPEG audio layer 1/3 IX IX
MP3 in codifica è supportato grazie alla libreria esterna LAME
AC3 IX X
liba52 viene impiegato internamente per la decodifica
Vorbis X X
supportato grazie alla libreria esterna libvorbis.
WMA V1/V2 X
X significa che la codifica (risp. Decodifica) è supportata.
I significa che soltanto una versione a calcolo intero è disponibile (assicura le prestazioni più elevate su sistemi sprovvisti del supporto a virgola mobile).

^top
6 Informazioni sulle specifiche di piattaforma

6.1 Linux
L’ffmpeg dovrebbe essere compilato almeno con GCC 2.95.3. La versione GCC 3.2 è, adesso, il compilatore preferito dall’ffmpeg. Tutte le ottimizzazione future dipenderanno dalle caratteristiche, presenti soltanto in GCC 3.2.
^top
6.2 BSD
^top

6.3 Windows
^top

6.4 MacOS X
^top
6.5 BeOS
Lo script di configurazione dovrebbe stabilire da se la configurazione. Il supporto di rete è attualmente ancora non completato. Il codice errno è stato corretto da Andrew Bachmann.
Vecchio materiale:
François Revol - revol at free dot fr - April 2002
Lo script di configurazione dovrebbe stabilire da se la configurazione, ad ogni modo ancora non testato il building su BeOS versione net_server.
ffserver non è funzionante (è necessaria l’implementazione di poll()).

Ci sono ancora aspetti del codice errno, che sono negativi su BeOS, e che ffmpeg nega in seguito ad un return. Questo si conclude traducendo gli errori in risultati validi, e quindi produce un crash. (Da sistemare)
^top

7 Guida allo sviluppo

7.1 Le API
· La libreria libavcodec contiene i codec (sia di codifica che decodifica). Osserva `libavcodec/apiexample.c' per capire come usarla.
· La libreria libavformat contiene i formati dei file gestiti (mux e demux per diversi formati). (ancora nessun esempio, l’API sembra che sia in evoluzione)
^top

7.2 Integrazione di libavcodec o libavformat nel tuo programma
Puoi integrare tutto il codice sorgente delle librerie per eseguire il collegamento a loro (link agli oggetti) staticamente in modo da evitare problemi di versione. Tutto ciò di cui hai bisogno è inserire un 'config.mak' e un 'config.h' nella directory padre. Osserva le definizioni generate da ./configure per capire cosa sia necessario.
Puoi usare libavcodec o libavformat nel tuo programma commerciale, ma qualsiasi patch che realizzi deve essere pubblicata. Il miglior modo di procedere è di inviare le tue patch alla mailing list di ffmpeg (in inglese).
^top
7.3 Regole di codifica
L’ffmpeg è scritto in linguaggio C ANSI. Le estensioni GCC sono tollerate. La dimensione dell’Indent è pari a 4. Il carattere TAB dovrebbe non essere usato.
La presentazione è quella specifica da 'indent -i4 -kr'.
Priorità più importante in ffmpeg è semplicità e la brevità del codice (= meno bachi)
Commenti: per le funzioni visibili da altri moduli, usa il formato JavaDoc (osserva gli esempi in `libav/utils.c') così che una documentazione possa essere generata automaticamente.
^top

7.4 Invio delle Patch
Quando invii una tua patch, prova a spedire come unified diff (opzione diff '-u'). Non posso leggere altri tipi di diffs:-)
Esegui i test regressivi prima di inviare una patch così che tu possa verificare che non vi siano grossi problemi.
Ad eccezione se la tua patch è molto lunga ed aggiunge importanti caratteristiche, inviandola a me, tu accetti implicitamente di metterla sotto i miei diritti d'autore. Io preferisco fare così per evitare potenziali problemi nel caso la licenza di ffmpeg cambiasse.
Le Patch devono essere postate come allegati in codifica base64 (o altri tipi di codifica che assicurino che la patch che non venga, irrimediabilmente, danneggiata durante la trasmissione) alla mailinglist ffmpeg-devel, guarda http://lists.sourceforge.net/lists/listinfo/ffmpeg-devel
^top

7.5 Test regressivi
Prima di inviare una patch (o di realizzare un CVS), devi almeno testare che tu non abbia danneggiato nulla.
I test regressivi costruiscono un breve flusso video ed un breve flusso audio. Successivamente questi vengono codificati e poi decodificati con tutti i codec o i formati. Il CRC (o MD5) di ogni file generato viene registrato in un file dei risultati.
Dopo il 'diff' viene avviato con riferimento ai risultati ed al file dei risultati. I test regressivi, in seguito, testano il codice ffserver con un insieme limitato di flussi. E' importante che anche questo passaggio si concluda a buon fine. Esegui 'make test' per il test di tutti codec.
Esegui 'make libavtest' per il test di tutti codec.
[Ovviamente, qualche patch potrebbero modificare i risultati del test regressivo. In questo caso, il riferimento dei test regressivi dovrebbe essere modificato in accordo].
^top

Questo documento è stato modificato il 28 Dicembre 2002 usando texi2html 1.56k.
La traduzione di questo documento è stata curata da anonimoanemico, per eventuali segnalazioni riguardo questa traduzione rivolgersi a anonimoanemico@divax.it

I diritti di traduzione, riproduzione e/o adattamento, totale o parziale, sono riservati per tutti i Paesi. Nessuna parte di questo sito può essere riprodotta, registrata o trasmessa con qualsiasi mezzo, senza previa autorizzazione dei webmaster o dei redattori. Ogni marchio registrato appartiene al rispettivo proprietario. DivX(R) un marchio registrato da DivX, Inc.
web design