FFmpeg - lo strumento multimediale universale

31
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 FFmpeg - lo strumento multimediale universale Stefano Sabatini mailto:[email protected] Java User Group Sardegna JUGS Summer Labs - 1 Luglio 2011 1 / 31

description

Introduzione a FFmpeg, storia, sviluppo, architettura ed esempi. Presentato al Java User Group Sardegna, Summer Labs 2011, Cagliari.

Transcript of FFmpeg - lo strumento multimediale universale

Page 1: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

FFmpeg - lo strumento multimedialeuniversale

Stefano Sabatinimailto:[email protected]

Java User Group Sardegna

JUGS Summer Labs - 1 Luglio 2011

1 / 31

Page 2: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Sommario

1 Presentazione e storia

2 Introduzione ai concetti del multimedia

3 Architettura del progetto

4 Installazione

5 Esempi d’uso dei progammi a linea di comando

6 Introduzione ai filtri di FFmpeg

7 Esempi d’uso della libreria

8 Sviluppi futuri

9 Appendici

2 / 31

Page 3: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Presentazione

Progetto software multipiattaforma (Linux, Mac,Windows, embedded, Android, etc...)Contiene strumenti a linea di comando che usano lelibrerie: ffmpeg, ffplay, ffprobe, ffserverContiene librerie in C per gestire il multimediaprogrammaticamente.Software libero (LGPL/GPL)Efficiente (ottimizzata per varie piattaforme)Molti formati sono supportati tramiteingegnerizzazione a rovescio (reverse engineering)(esempi: WMV, RV)

3 / 31

Page 4: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Obiettivi del progetto

Supporto universale e nativo al multimedia:supportare potenzialmente tutti i possibili formatimultimedialiSupporto completo a livello di libreria: fornire unostrato di astrazione completo per gestire flussimultimediali.

4 / 31

Page 5: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Storia

2000: nasce il progetto (Fabrice Bellard), inizialmenteper implementare una libreria di codifica/decodificaMPEG. Viene integrata come motore multimediale diMPlayer, il progetto è ospite di MPlayer2003: Fabrice Bellard abbandona il progetto, lamaintainership viene passata informalmente a MichaelNiedermayer.Marzo 2009: il primo rilascio ufficiale, corrispondentealla versione 0.5Maggio 2010: rilascio della version 0.6Gennaio 2011: a seguito di contestazioni verso laleadership del progetto, un gruppo di sviluppatori primaprende controllo del server e crea un repository Gitalternativo, in seguito crea un fork (Libav).Giugno 2011: rilascio delle versioni 0.7 e 0.8

5 / 31

Page 6: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Status

Attualmente esistono due progetti distinti conrepository distinti, uno per FFmpeg e uno per Libav.Esiste uno scambio di codice tra i due progetti (tuttele modifiche su Libav vengono quotidianamente portatesu FFmpeg, le modifiche di FFmpeg vengono portate aLibav caso per caso)I due progetti tendono a divergere a livello di API ed ABIPossibilità di conflitto a livello di distribuzioni(dipende dalla scelta dei vari progetti che scelgono unadipendenza piuttosto che un’altra, sia per motivi tecnicio politici)

6 / 31

Page 7: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Modello di sviluppo

Nonostante le release formali, viene incoraggiato l’usodell’ultima versione di sviluppo (Git)Il codice sorgente è gestito tramite Git (dal Gennaio del2011)Le patch sono discusse e approvate nella mailing-listffmpeg-devel, quindi (eventualmente) applicateI manutentori principali si occupano di effetuare larevisione delle patch proposte ed eventualmente dellaloro applicazioneDal 2006 partecipa al progetto Google Summer ofCode

7 / 31

Page 8: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Organizzazione

Non esiste un organismo ufficiale che gestisce il progetto edetiene il copyright sul codice, in futuro forse sarà la FreeMultimedia Technology Foundation (Work in progress)

8 / 31

Page 9: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Concetti

pixel (picture element)audio sample (campione audio)immagineframe A/Vpacchettostream (flusso)decoder/encodermuxer/demuxerprotocollofiltro

9 / 31

Page 10: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Gerarchia degli elementi multimediali

file o flusso o stream multimediale: contiene unaserie di flussi multimediali (audio, video, testo)flusso o stream: contiene pacchetti di dati (codificati)pacchetto: contiene uno o piuf̀rame A/V/Tframe: contiene un’immagine, una sequenza dicaratteri, una serie di campioni audio

10 / 31

Page 11: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Librerie

libavutil routine di baselibswscale libreria per la conversione e lo scaling di

immaginilibavfilter libreria di filtri A/V

libavcodec libreria di codifica/decodificalibavformat libreria di muxing/demuxing/streaminglibavdevice libreria per la cattura di flussi e l’output su

dispositivi

11 / 31

Page 12: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Relazione tra le librerie

12 / 31

Page 13: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Programmi

ffmpeg Usato per effettuare la transcodifica difile/stream

ffplay Semplice player basato su SDLffprobe Strumento di analisi di file/stream multimedialiffserver Server di transcodifica

13 / 31

Page 14: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Installazione da sorgenti

Scaricamento dei sorgenti:

Example

git clone git://git.videolan.org/ffmpeg.git ffmpeg

Configurazione

Example

configure –enable-libx264 –enable-frei0r –enable-gpl ...

Compilazione/Installazione

Example

make -j4; make install

14 / 31

Page 15: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Usare l’auto-documentazione

Mostra la versione usata

Example

ffmpeg -version

Mostra l’aiuto in linea

Example

ffmpeg -h

RTFM

Example

man ffmpeg

15 / 31

Page 16: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Mostra i formati supportati

Mostra i formati/codec/formati/filtri supportati

Example

ffmpeg -pixelsffmpeg -codecsffmpeg -formatsffmpeg -bsfsffmpeg -filters

16 / 31

Page 17: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Analizza il contenuto di un file

Mosta informazioni di base su un file:

Example

ffprobe -show_format FILE

Mosta i flussi contenuti in un file

Example

ffprobe -show_streams FILE

Mostra i pacchetti all’interno di un file

Example

ffprobe -show_packets FILE

17 / 31

Page 18: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Transcodifica

Comando base:

Example

ffmpeg -i INPUT OUTPUT

Comando generico:

Example

ffmpeg INPUT_OPTIONS -i INPUT OUTPUT_OPTIONSOUTPUT

Esempio concreto:

Example

ffmpeg -ss 10 -t 10 -i INPUT.avi -vcodec libx264 -acodeclibmp3lame out.mpg

18 / 31

Page 19: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Cattura da dispositivo di input

Example

ffmpeg -f video4linux2 -i /dev/video0 OUTPUT

Example

ffmpeg -f x11grab -video_size vga -i :0.0 OUTPUT

19 / 31

Page 20: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Introduzione

libavfilter nasce come sostituto di VHOOK, progettoGSoC 2007integrazione recente, integrato in ffmpeg a partiredalla release 0.7/0.8ancora in fase sperimentale, API/ABI instabilel’integrazione audio è ancora in via di sviluppo (GSoC2010, GSoC 2011)

20 / 31

Page 21: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Caratteristiche

sistema di negoziazione dei formati - minimizzaconversionipermette di gestire grafi di filtrisupporta la generazione di flussi video (mediantesorgenti) e elementi lavandino (sink)transmedia filtering

21 / 31

Page 22: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Anatomia di un filtro

Ogni filtro contiene 0 o più input and output padOgni pad è associato a un tipo di input e supporta unoo più formati (A/V)Input e output possono essere difformi (differentimedia, differente grandezza / formato gestito)input e output pad sono uniti da link

22 / 31

Page 23: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Esempi di grafi di filtri

Example

color,vflip,hflip,nullsink

Example

movie=logo.png [logo]; color=blue [color];[color][logo] overlay [out]

Example

movie=input.flv, split[in1][in2];[in1] scale=100:-1 [out1];[in2] negate [out2]

23 / 31

Page 24: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Overlay di un logo

Overlay di un logo:

Example

ffplay -vfmovie=jugs-logo.png, scale=50:-1 [logo][in][logo] overlay -f video4linux2 /dev/video0

24 / 31

Page 25: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Esempi di overlay di video sintetico

Example

ffplay -vf testsrc=100x100, format=rgba, lut=a=128 [logo];[in][logo] overlay -f video4linux2 /dev/video0

25 / 31

Page 26: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Corrispondenze tra elementi multimediali estrutture di libav*

pacchetto -> AVPacket

frame video -> AVFrame

codec -> AVCodec

contesto di un codec -> AVCodecContext

demuxer/input device -> AVInputFormat

muxer/output device -> AVOutputFormat

contesto di un de/muxer -> AVFormatContext

filtro -> AVFilter

26 / 31

Page 27: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Alcuni esempi

doc/examples/encoding-example.c

doc/examples/muxing-example.c

ffprobe.c

libavfilter/vsrc_movie.c

27 / 31

Page 28: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Sviluppi futuri

più filtri video (composizione, movie sink, port filtri diMPlayer)supporto a filtri audio (GSoC 2011)supporto a concatenazione logica dei file (GSoC 2011)miglioramento supporto formati di sottotitoliintegrazione testo all’interno di libavfilterlibavresample

binding a linguaggi di alto livello (e.g. Haskell, Lisp,etc...)(?)

28 / 31

Page 29: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Licenza di questo documento

Rilasciato con licenza Creative Commons con clausoleAttribuzione-NonCommerciale-CondividiAlloStessoModo(vedi: http://creativecommons.org/licenses/by-nc-sa/3.0/)

29 / 31

Page 30: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Risorse

FFmpeg project web site: http://www.ffmpeg.orgMike Melanson multimedia wikihttp://wiki.multimedia.cx/ contieneinformazioni su codec, formati, e informazioni relative aFFmpegDigital Image Processing - Gonzalez, Woods - Pearson2008Digital Video Compression - Peter Symes - Mc GrawHills 2003Video Demystified, a handbook for the digital engineer -Jack Keith - Elsevier 2004

30 / 31

Page 31: FFmpeg - lo strumento multimediale universale

Presentazionee storia

Introduzioneai concetti delmultimedia

Architetturadel progetto

Installazione

Esempi d’usodei progammia linea dicomando

Introduzioneai filtri diFFmpeg

Esempi d’usodella libreria

Sviluppi futuri

Appendici

Colophon

Per realizzare questo documento sono stati usati i seguentiprogrammi:

emacs editing dei sorgentiLATEX/Beamer creazione del documento

Dia creazione di alcuni diagrammi

31 / 31