Post on 08-Jun-2015
description
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:stefasab@gmail.com
Java User Group Sardegna
JUGS Summer Labs - 1 Luglio 2011
1 / 31
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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