Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
FFmpeg - lo strumento multimediale universale
1. Presentazione
e storia
Introduzione
FFmpeg - lo strumento multimediale
ai concetti del
multimedia universale
Architettura
del progetto
Installazione Stefano Sabatini
Esempi d’uso
dei progammi
mailto:stefasab@gmail.com
a linea di
comando
Java User Group Sardegna
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
JUGS Summer Labs - 1 Luglio 2011
della libreria
Sviluppi futuri
Appendici
1 / 31
2. Sommario
1 Presentazione e storia
Presentazione
e storia 2 Introduzione ai concetti del multimedia
Introduzione
ai concetti del 3 Architettura del progetto
multimedia
Architettura
del progetto
4 Installazione
Installazione
5 Esempi d’uso dei progammi a linea di comando
Esempi d’uso
dei progammi
a linea di 6 Introduzione ai filtri di FFmpeg
comando
Introduzione 7 Esempi d’uso della libreria
ai filtri di
FFmpeg
Esempi d’uso
8 Sviluppi futuri
della libreria
Sviluppi futuri 9 Appendici
Appendici
2 / 31
3. Presentazione
Presentazione
Progetto software multipiattaforma (Linux, Mac,
e storia Windows, embedded, Android, etc...)
Introduzione
ai concetti del Contiene strumenti a linea di comando che usano le
multimedia
librerie: ffmpeg, ffplay, ffprobe, ffserver
Architettura
del progetto
Contiene librerie in C per gestire il multimedia
Installazione
programmaticamente.
Esempi d’uso
dei progammi Software libero (LGPL/GPL)
a linea di
comando
Efficiente (ottimizzata per varie piattaforme)
Introduzione
ai filtri di Molti formati sono supportati tramite
FFmpeg
Esempi d’uso
ingegnerizzazione a rovescio (reverse engineering)
della libreria (esempi: WMV, RV)
Sviluppi futuri
Appendici
3 / 31
4. Obiettivi del progetto
Presentazione
e storia
Introduzione
ai concetti del
multimedia
Supporto universale e nativo al multimedia:
Architettura
supportare potenzialmente tutti i possibili formati
del progetto multimediali
Installazione
Esempi d’uso
Supporto completo a livello di libreria: fornire uno
dei progammi strato di astrazione completo per gestire flussi
a linea di
comando multimediali.
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
4 / 31
5. Storia
2000: nasce il progetto (Fabrice Bellard), inizialmente
per implementare una libreria di codifica/decodifica
Presentazione
e storia MPEG. Viene integrata come motore multimediale di
Introduzione MPlayer, il progetto è ospite di MPlayer
ai concetti del
multimedia 2003: Fabrice Bellard abbandona il progetto, la
Architettura maintainership viene passata informalmente a Michael
del progetto
Installazione
Niedermayer.
Esempi d’uso
Marzo 2009: il primo rilascio ufficiale, corrispondente
dei progammi
a linea di
alla versione 0.5
comando
Maggio 2010: rilascio della version 0.6
Introduzione
ai filtri di Gennaio 2011: a seguito di contestazioni verso la
FFmpeg
leadership del progetto, un gruppo di sviluppatori prima
Esempi d’uso
della libreria prende controllo del server e crea un repository Git
Sviluppi futuri alternativo, in seguito crea un fork (Libav).
Appendici Giugno 2011: rilascio delle versioni 0.7 e 0.8
5 / 31
6. Status
Presentazione Attualmente esistono due progetti distinti con
e storia
repository distinti, uno per FFmpeg e uno per Libav.
Introduzione
ai concetti del
multimedia
Esiste uno scambio di codice tra i due progetti (tutte
Architettura
le modifiche su Libav vengono quotidianamente portate
del progetto su FFmpeg, le modifiche di FFmpeg vengono portate a
Installazione
Libav caso per caso)
Esempi d’uso
dei progammi I due progetti tendono a divergere a livello di API ed ABI
a linea di
comando
Possibilità di conflitto a livello di distribuzioni
Introduzione
ai filtri di (dipende dalla scelta dei vari progetti che scelgono una
FFmpeg
dipendenza piuttosto che un’altra, sia per motivi tecnici
Esempi d’uso
della libreria o politici)
Sviluppi futuri
Appendici
6 / 31
7. Modello di sviluppo
Presentazione Nonostante le release formali, viene incoraggiato l’uso
e storia
dell’ultima versione di sviluppo (Git)
Introduzione
ai concetti del Il codice sorgente è gestito tramite Git (dal Gennaio del
multimedia
Architettura
2011)
del progetto
Le patch sono discusse e approvate nella mailing-list
Installazione
ffmpeg-devel, quindi (eventualmente) applicate
Esempi d’uso
dei progammi
a linea di
I manutentori principali si occupano di effetuare la
comando
revisione delle patch proposte ed eventualmente della
Introduzione
ai filtri di loro applicazione
FFmpeg
Dal 2006 partecipa al progetto Google Summer of
Esempi d’uso
della libreria Code
Sviluppi futuri
Appendici
7 / 31
8. Organizzazione
Presentazione
e storia
Introduzione
ai concetti del
multimedia
Architettura Non esiste un organismo ufficiale che gestisce il progetto e
del progetto
detiene il copyright sul codice, in futuro forse sarà la Free
Installazione
Multimedia Technology Foundation (Work in progress)
Esempi d’uso
dei progammi
a linea di
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
8 / 31
9. Concetti
Presentazione pixel (picture element)
e storia
audio sample (campione audio)
Introduzione
ai concetti del
multimedia
immagine
Architettura frame A/V
del progetto
Installazione pacchetto
Esempi d’uso
dei progammi
stream (flusso)
a linea di
comando decoder/encoder
Introduzione
ai filtri di
muxer/demuxer
FFmpeg
protocollo
Esempi d’uso
della libreria filtro
Sviluppi futuri
Appendici
9 / 31
10. Gerarchia degli elementi multimediali
Presentazione
e storia
Introduzione
ai concetti del file o flusso o stream multimediale: contiene una
multimedia
serie di flussi multimediali (audio, video, testo)
Architettura
del progetto flusso o stream: contiene pacchetti di dati (codificati)
Installazione
pacchetto: contiene uno o piu`
frame A/V/T
Esempi d’uso
dei progammi
a linea di
frame: contiene un’immagine, una sequenza di
comando
caratteri, una serie di campioni audio
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
10 / 31
11. Librerie
Presentazione
e storia
libavutil routine di base
Introduzione
ai concetti del
multimedia
libswscale libreria per la conversione e lo scaling di
Architettura
immagini
del progetto
libavfilter libreria di filtri A/V
Installazione
Esempi d’uso libavcodec libreria di codifica/decodifica
dei progammi
a linea di libavformat libreria di muxing/demuxing/streaming
comando
Introduzione libavdevice libreria per la cattura di flussi e l’output su
ai filtri di
FFmpeg
dispositivi
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
11 / 31
12. Relazione tra le librerie
Presentazione
e storia
Introduzione
ai concetti del
multimedia
Architettura
del progetto
Installazione
Esempi d’uso
dei progammi
a linea di
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
12 / 31
13. Programmi
Presentazione
e storia
Introduzione
ai concetti del
multimedia ffmpeg Usato per effettuare la transcodifica di
Architettura file/stream
del progetto
Installazione
ffplay Semplice player basato su SDL
Esempi d’uso ffprobe Strumento di analisi di file/stream multimediali
dei progammi
a linea di
comando
ffserver Server di transcodifica
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
13 / 31
14. Installazione da sorgenti
Scaricamento dei sorgenti:
Presentazione
e storia Example
Introduzione
ai concetti del git clone git://git.videolan.org/ffmpeg.git ffmpeg
multimedia
Architettura
del progetto Configurazione
Installazione
Esempi d’uso
Example
dei progammi
a linea di configure –enable-libx264 –enable-frei0r –enable-gpl ...
comando
Introduzione
ai filtri di Compilazione/Installazione
FFmpeg
Esempi d’uso Example
della libreria
Sviluppi futuri make -j4; make install
Appendici
14 / 31
15. Usare l’auto-documentazione
Mostra la versione usata
Presentazione
e storia Example
Introduzione
ai concetti del ffmpeg -version
multimedia
Architettura
del progetto Mostra l’aiuto in linea
Installazione
Example
Esempi d’uso
dei progammi
a linea di ffmpeg -h
comando
Introduzione
ai filtri di
RTFM
FFmpeg
Esempi d’uso
Example
della libreria
Sviluppi futuri
man ffmpeg
Appendici
15 / 31
16. Mostra i formati supportati
Presentazione
e storia
Mostra i formati/codec/formati/filtri supportati
Introduzione
ai concetti del
multimedia Example
Architettura
del progetto ffmpeg -pixels
Installazione
ffmpeg -codecs
Esempi d’uso
dei progammi ffmpeg -formats
a linea di
comando
ffmpeg -bsfs
Introduzione ffmpeg -filters
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
16 / 31
17. Analizza il contenuto di un file
Mosta informazioni di base su un file:
Presentazione
e storia Example
Introduzione
ai concetti del ffprobe -show_format FILE
multimedia
Architettura
del progetto Mosta i flussi contenuti in un file
Installazione
Example
Esempi d’uso
dei progammi
a linea di ffprobe -show_streams FILE
comando
Introduzione Mostra i pacchetti all’interno di un file
ai filtri di
FFmpeg
Esempi d’uso
Example
della libreria
Sviluppi futuri
ffprobe -show_packets FILE
Appendici
17 / 31
18. Transcodifica
Comando base:
Presentazione
Example
e storia
Introduzione
ffmpeg -i INPUT OUTPUT
ai concetti del
multimedia
Comando generico:
Architettura
del progetto
Example
Installazione
Esempi d’uso ffmpeg INPUT_OPTIONS -i INPUT OUTPUT_OPTIONS
dei progammi
a linea di OUTPUT
comando
Introduzione
ai filtri di
Esempio concreto:
FFmpeg
Esempi d’uso
Example
della libreria
Sviluppi futuri
ffmpeg -ss 10 -t 10 -i INPUT.avi -vcodec libx264 -acodec
Appendici
libmp3lame out.mpg
18 / 31
19. Cattura da dispositivo di input
Presentazione
e storia
Introduzione
ai concetti del Example
multimedia
Architettura
del progetto
ffmpeg -f video4linux2 -i /dev/video0 OUTPUT
Installazione
Esempi d’uso Example
dei progammi
a linea di
comando ffmpeg -f x11grab -video_size vga -i :0.0 OUTPUT
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
19 / 31
20. Introduzione
Presentazione
e storia
Introduzione libavfilter nasce come sostituto di VHOOK, progetto
ai concetti del
multimedia GSoC 2007
Architettura
del progetto integrazione recente, integrato in ffmpeg a partire
Installazione dalla release 0.7/0.8
Esempi d’uso
dei progammi
ancora in fase sperimentale, API/ABI instabile
a linea di
comando l’integrazione audio è ancora in via di sviluppo (GSoC
Introduzione 2010, GSoC 2011)
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
20 / 31
21. Caratteristiche
Presentazione
e storia
Introduzione
ai concetti del sistema di negoziazione dei formati - minimizza
multimedia
conversioni
Architettura
del progetto permette di gestire grafi di filtri
Installazione
supporta la generazione di flussi video (mediante
Esempi d’uso
dei progammi sorgenti) e elementi lavandino (sink)
a linea di
comando
transmedia filtering
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
21 / 31
22. Anatomia di un filtro
Presentazione
e storia
Introduzione
ai concetti del Ogni filtro contiene 0 o più input and output pad
multimedia
Architettura
Ogni pad è associato a un tipo di input e supporta uno
del progetto o più formati (A/V)
Installazione
Input e output possono essere difformi (differenti
Esempi d’uso
dei progammi media, differente grandezza / formato gestito)
a linea di
comando
input e output pad sono uniti da link
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
22 / 31
23. Esempi di grafi di filtri
Example
Presentazione
e storia
color,vflip,hflip,nullsink
Introduzione
ai concetti del
multimedia
Architettura
Example
del progetto
Installazione
movie=logo.png [logo]; color=blue [color];
Esempi d’uso
[color][logo] overlay [out]
dei progammi
a linea di
comando
Example
Introduzione
ai filtri di
FFmpeg movie=input.flv, split[in1][in2];
Esempi d’uso [in1] scale=100:-1 [out1];
della libreria
[in2] negate [out2]
Sviluppi futuri
Appendici
23 / 31
24. Overlay di un logo
Presentazione
e storia
Introduzione
ai concetti del Overlay di un logo:
multimedia
Architettura Example
del progetto
Installazione ffplay -vf
Esempi d’uso
dei progammi
movie=jugs-logo.png, scale=50:-1 [logo]
a linea di [in][logo] overlay -f video4linux2 /dev/video0
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
24 / 31
25. Esempi di overlay di video sintetico
Presentazione
e storia
Introduzione
ai concetti del
multimedia
Architettura
Example
del progetto
Installazione
ffplay -vf testsrc=100x100, format=rgba, lut=a=128 [logo];
Esempi d’uso [in][logo] overlay -f video4linux2 /dev/video0
dei progammi
a linea di
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
25 / 31
26. Corrispondenze tra elementi multimediali e
strutture di libav*
Presentazione
e storia
pacchetto -> AVPacket
Introduzione
ai concetti del frame video -> AVFrame
multimedia
Architettura codec -> AVCodec
del progetto
Installazione
contesto di un codec -> AVCodecContext
Esempi d’uso demuxer/input device -> AVInputFormat
dei progammi
a linea di
comando
muxer/output device -> AVOutputFormat
Introduzione contesto di un de/muxer -> AVFormatContext
ai filtri di
FFmpeg filtro -> AVFilter
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
26 / 31
27. Alcuni esempi
Presentazione
e storia
Introduzione
ai concetti del
multimedia doc/examples/encoding-example.c
Architettura
del progetto doc/examples/muxing-example.c
Installazione
ffprobe.c
Esempi d’uso
dei progammi libavfilter/vsrc_movie.c
a linea di
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
27 / 31
28. Sviluppi futuri
Presentazione
e storia più filtri video (composizione, movie sink, port filtri di
Introduzione MPlayer)
ai concetti del
multimedia supporto a filtri audio (GSoC 2011)
Architettura
del progetto supporto a concatenazione logica dei file (GSoC 2011)
Installazione
miglioramento supporto formati di sottotitoli
Esempi d’uso
dei progammi integrazione testo all’interno di libavfilter
a linea di
comando
libavresample
Introduzione
ai filtri di binding a linguaggi di alto livello (e.g. Haskell, Lisp,
FFmpeg
etc...)(?)
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
28 / 31
29. Licenza di questo documento
Presentazione
e storia
Introduzione
Rilasciato con licenza Creative Commons con clausole
ai concetti del
multimedia
Attribuzione-NonCommerciale-CondividiAlloStessoModo
Architettura (vedi: http://creativecommons.org/licenses/
del progetto
by-nc-sa/3.0/)
Installazione
Esempi d’uso
dei progammi
a linea di
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
29 / 31
30. Risorse
Presentazione FFmpeg project web site: http://www.ffmpeg.org
e storia
Introduzione
Mike Melanson multimedia wiki
ai concetti del http://wiki.multimedia.cx/ contiene
multimedia
Architettura
informazioni su codec, formati, e informazioni relative a
del progetto FFmpeg
Installazione
Digital Image Processing - Gonzalez, Woods - Pearson
Esempi d’uso
dei progammi 2008
a linea di
comando
Digital Video Compression - Peter Symes - Mc Graw
Introduzione
ai filtri di Hills 2003
FFmpeg
Video Demystified, a handbook for the digital engineer -
Esempi d’uso
della libreria Jack Keith - Elsevier 2004
Sviluppi futuri
Appendici
30 / 31
31. Colophon
Presentazione
e storia
Introduzione
ai concetti del
multimedia
Per realizzare questo documento sono stati usati i seguenti
Architettura
programmi:
del progetto
emacs editing dei sorgenti
Installazione
Esempi d’uso
A
LTEX/Beamer creazione del documento
dei progammi
a linea di Dia creazione di alcuni diagrammi
comando
Introduzione
ai filtri di
FFmpeg
Esempi d’uso
della libreria
Sviluppi futuri
Appendici
31 / 31