• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
FFmpeg - lo strumento multimediale universale
 

FFmpeg - lo strumento multimediale universale

on

  • 1,285 views

Introduzione a FFmpeg, storia, sviluppo, architettura ed esempi.

Introduzione a FFmpeg, storia, sviluppo, architettura ed esempi.

Presentato al Java User Group Sardegna, Summer Labs 2011, Cagliari.

Statistics

Views

Total Views
1,285
Views on SlideShare
1,268
Embed Views
17

Actions

Likes
0
Downloads
8
Comments
0

3 Embeds 17

http://www.jugsardegna.org 13
url_unknown 3
http://jugsardegna.org 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    FFmpeg - lo strumento multimediale universale FFmpeg - lo strumento multimediale universale Presentation Transcript

    • Presentazionee storiaIntroduzione FFmpeg - lo strumento multimedialeai concetti delmultimedia universaleArchitetturadel progettoInstallazione Stefano SabatiniEsempi d’usodei progammi mailto:stefasab@gmail.coma linea dicomando Java User Group SardegnaIntroduzioneai filtri diFFmpegEsempi d’uso JUGS Summer Labs - 1 Luglio 2011della libreriaSviluppi futuriAppendici 1 / 31
    • Sommario 1 Presentazione e storiaPresentazionee storia 2 Introduzione ai concetti del multimediaIntroduzioneai concetti del 3 Architettura del progettomultimediaArchitetturadel progetto 4 InstallazioneInstallazione 5 Esempi d’uso dei progammi a linea di comandoEsempi d’usodei progammia linea di 6 Introduzione ai filtri di FFmpegcomandoIntroduzione 7 Esempi d’uso della libreriaai filtri diFFmpegEsempi d’uso 8 Sviluppi futuridella libreriaSviluppi futuri 9 AppendiciAppendici 2 / 31
    • PresentazionePresentazione Progetto software multipiattaforma (Linux, Mac,e storia Windows, embedded, Android, etc...)Introduzioneai concetti del Contiene strumenti a linea di comando che usano lemultimedia librerie: ffmpeg, ffplay, ffprobe, ffserverArchitetturadel progetto Contiene librerie in C per gestire il multimediaInstallazione programmaticamente.Esempi d’usodei progammi Software libero (LGPL/GPL)a linea dicomando Efficiente (ottimizzata per varie piattaforme)Introduzioneai filtri di Molti formati sono supportati tramiteFFmpegEsempi d’uso ingegnerizzazione a rovescio (reverse engineering)della libreria (esempi: WMV, RV)Sviluppi futuriAppendici 3 / 31
    • Obiettivi del progettoPresentazionee storiaIntroduzioneai concetti delmultimedia Supporto universale e nativo al multimedia:Architettura supportare potenzialmente tutti i possibili formatidel progetto multimedialiInstallazioneEsempi d’uso Supporto completo a livello di libreria: fornire unodei progammi strato di astrazione completo per gestire flussia linea dicomando multimediali.Introduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 4 / 31
    • Storia 2000: nasce il progetto (Fabrice Bellard), inizialmente per implementare una libreria di codifica/decodificaPresentazionee storia MPEG. Viene integrata come motore multimediale diIntroduzione MPlayer, il progetto è ospite di MPlayerai concetti delmultimedia 2003: Fabrice Bellard abbandona il progetto, laArchitettura maintainership viene passata informalmente a Michaeldel progettoInstallazione Niedermayer.Esempi d’uso Marzo 2009: il primo rilascio ufficiale, corrispondentedei progammia linea di alla versione 0.5comando Maggio 2010: rilascio della version 0.6Introduzioneai filtri di Gennaio 2011: a seguito di contestazioni verso laFFmpeg leadership del progetto, un gruppo di sviluppatori primaEsempi d’usodella libreria prende controllo del server e crea un repository GitSviluppi futuri alternativo, in seguito crea un fork (Libav).Appendici Giugno 2011: rilascio delle versioni 0.7 e 0.8 5 / 31
    • StatusPresentazione Attualmente esistono due progetti distinti cone storia repository distinti, uno per FFmpeg e uno per Libav.Introduzioneai concetti delmultimedia Esiste uno scambio di codice tra i due progetti (tutteArchitettura le modifiche su Libav vengono quotidianamente portatedel progetto su FFmpeg, le modifiche di FFmpeg vengono portate aInstallazione Libav caso per caso)Esempi d’usodei progammi I due progetti tendono a divergere a livello di API ed ABIa linea dicomando Possibilità di conflitto a livello di distribuzioniIntroduzioneai filtri di (dipende dalla scelta dei vari progetti che scelgono unaFFmpeg dipendenza piuttosto che un’altra, sia per motivi tecniciEsempi d’usodella libreria o politici)Sviluppi futuriAppendici 6 / 31
    • Modello di sviluppoPresentazione Nonostante le release formali, viene incoraggiato l’usoe storia dell’ultima versione di sviluppo (Git)Introduzioneai concetti del Il codice sorgente è gestito tramite Git (dal Gennaio delmultimediaArchitettura 2011)del progetto Le patch sono discusse e approvate nella mailing-listInstallazione ffmpeg-devel, quindi (eventualmente) applicateEsempi d’usodei progammia linea di I manutentori principali si occupano di effetuare lacomando revisione delle patch proposte ed eventualmente dellaIntroduzioneai filtri di loro applicazioneFFmpeg Dal 2006 partecipa al progetto Google Summer ofEsempi d’usodella libreria CodeSviluppi futuriAppendici 7 / 31
    • OrganizzazionePresentazionee storiaIntroduzioneai concetti delmultimediaArchitettura Non esiste un organismo ufficiale che gestisce il progetto edel progetto detiene il copyright sul codice, in futuro forse sarà la FreeInstallazione Multimedia Technology Foundation (Work in progress)Esempi d’usodei progammia linea dicomandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 8 / 31
    • ConcettiPresentazione pixel (picture element)e storia audio sample (campione audio)Introduzioneai concetti delmultimedia immagineArchitettura frame A/Vdel progettoInstallazione pacchettoEsempi d’usodei progammi stream (flusso)a linea dicomando decoder/encoderIntroduzioneai filtri di muxer/demuxerFFmpeg protocolloEsempi d’usodella libreria filtroSviluppi futuriAppendici 9 / 31
    • Gerarchia degli elementi multimedialiPresentazionee storiaIntroduzioneai concetti del file o flusso o stream multimediale: contiene unamultimedia serie di flussi multimediali (audio, video, testo)Architetturadel progetto flusso o stream: contiene pacchetti di dati (codificati)Installazione pacchetto: contiene uno o piu` frame A/V/TEsempi d’usodei progammia linea di frame: contiene un’immagine, una sequenza dicomando caratteri, una serie di campioni audioIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 10 / 31
    • LibreriePresentazionee storia libavutil routine di baseIntroduzioneai concetti delmultimedia libswscale libreria per la conversione e lo scaling diArchitettura immaginidel progetto libavfilter libreria di filtri A/VInstallazioneEsempi d’uso libavcodec libreria di codifica/decodificadei progammia linea di libavformat libreria di muxing/demuxing/streamingcomandoIntroduzione libavdevice libreria per la cattura di flussi e l’output suai filtri diFFmpeg dispositiviEsempi d’usodella libreriaSviluppi futuriAppendici 11 / 31
    • Relazione tra le libreriePresentazionee storiaIntroduzioneai concetti delmultimediaArchitetturadel progettoInstallazioneEsempi d’usodei progammia linea dicomandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 12 / 31
    • ProgrammiPresentazionee storiaIntroduzioneai concetti delmultimedia ffmpeg Usato per effettuare la transcodifica diArchitettura file/streamdel progettoInstallazione ffplay Semplice player basato su SDLEsempi d’uso ffprobe Strumento di analisi di file/stream multimedialidei progammia linea dicomando ffserver Server di transcodificaIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 13 / 31
    • Installazione da sorgenti Scaricamento dei sorgenti:Presentazionee storia ExampleIntroduzioneai concetti del git clone git://git.videolan.org/ffmpeg.git ffmpegmultimediaArchitetturadel progetto ConfigurazioneInstallazioneEsempi d’uso Exampledei progammia linea di configure –enable-libx264 –enable-frei0r –enable-gpl ...comandoIntroduzioneai filtri di Compilazione/InstallazioneFFmpegEsempi d’uso Exampledella libreriaSviluppi futuri make -j4; make installAppendici 14 / 31
    • Usare l’auto-documentazione Mostra la versione usataPresentazionee storia ExampleIntroduzioneai concetti del ffmpeg -versionmultimediaArchitetturadel progetto Mostra l’aiuto in lineaInstallazione ExampleEsempi d’usodei progammia linea di ffmpeg -hcomandoIntroduzioneai filtri di RTFMFFmpegEsempi d’uso Exampledella libreriaSviluppi futuri man ffmpegAppendici 15 / 31
    • Mostra i formati supportatiPresentazionee storia Mostra i formati/codec/formati/filtri supportatiIntroduzioneai concetti delmultimedia ExampleArchitetturadel progetto ffmpeg -pixelsInstallazione ffmpeg -codecsEsempi d’usodei progammi ffmpeg -formatsa linea dicomando ffmpeg -bsfsIntroduzione ffmpeg -filtersai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 16 / 31
    • Analizza il contenuto di un file Mosta informazioni di base su un file:Presentazionee storia ExampleIntroduzioneai concetti del ffprobe -show_format FILEmultimediaArchitetturadel progetto Mosta i flussi contenuti in un fileInstallazione ExampleEsempi d’usodei progammia linea di ffprobe -show_streams FILEcomandoIntroduzione Mostra i pacchetti all’interno di un fileai filtri diFFmpegEsempi d’uso Exampledella libreriaSviluppi futuri ffprobe -show_packets FILEAppendici 17 / 31
    • Transcodifica Comando base:Presentazione Examplee storiaIntroduzione ffmpeg -i INPUT OUTPUTai concetti delmultimedia Comando generico:Architetturadel progetto ExampleInstallazioneEsempi d’uso ffmpeg INPUT_OPTIONS -i INPUT OUTPUT_OPTIONSdei progammia linea di OUTPUTcomandoIntroduzioneai filtri di Esempio concreto:FFmpegEsempi d’uso Exampledella libreriaSviluppi futuri ffmpeg -ss 10 -t 10 -i INPUT.avi -vcodec libx264 -acodecAppendici libmp3lame out.mpg 18 / 31
    • Cattura da dispositivo di inputPresentazionee storiaIntroduzioneai concetti del ExamplemultimediaArchitetturadel progetto ffmpeg -f video4linux2 -i /dev/video0 OUTPUTInstallazioneEsempi d’uso Exampledei progammia linea dicomando ffmpeg -f x11grab -video_size vga -i :0.0 OUTPUTIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 19 / 31
    • IntroduzionePresentazionee storiaIntroduzione libavfilter nasce come sostituto di VHOOK, progettoai concetti delmultimedia GSoC 2007Architetturadel progetto integrazione recente, integrato in ffmpeg a partireInstallazione dalla release 0.7/0.8Esempi d’usodei progammi ancora in fase sperimentale, API/ABI instabilea linea dicomando l’integrazione audio è ancora in via di sviluppo (GSoCIntroduzione 2010, GSoC 2011)ai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 20 / 31
    • CaratteristichePresentazionee storiaIntroduzioneai concetti del sistema di negoziazione dei formati - minimizzamultimedia conversioniArchitetturadel progetto permette di gestire grafi di filtriInstallazione supporta la generazione di flussi video (medianteEsempi d’usodei progammi sorgenti) e elementi lavandino (sink)a linea dicomando transmedia filteringIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 21 / 31
    • Anatomia di un filtroPresentazionee storiaIntroduzioneai concetti del Ogni filtro contiene 0 o più input and output padmultimediaArchitettura Ogni pad è associato a un tipo di input e supporta unodel progetto o più formati (A/V)Installazione Input e output possono essere difformi (differentiEsempi d’usodei progammi media, differente grandezza / formato gestito)a linea dicomando input e output pad sono uniti da linkIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 22 / 31
    • Esempi di grafi di filtri ExamplePresentazionee storia color,vflip,hflip,nullsinkIntroduzioneai concetti delmultimediaArchitettura Exampledel progettoInstallazione movie=logo.png [logo]; color=blue [color];Esempi d’uso [color][logo] overlay [out]dei progammia linea dicomando ExampleIntroduzioneai filtri diFFmpeg movie=input.flv, split[in1][in2];Esempi d’uso [in1] scale=100:-1 [out1];della libreria [in2] negate [out2]Sviluppi futuriAppendici 23 / 31
    • Overlay di un logoPresentazionee storiaIntroduzioneai concetti del Overlay di un logo:multimediaArchitettura Exampledel progettoInstallazione ffplay -vfEsempi d’usodei progammi movie=jugs-logo.png, scale=50:-1 [logo]a linea di [in][logo] overlay -f video4linux2 /dev/video0comandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 24 / 31
    • Esempi di overlay di video sinteticoPresentazionee storiaIntroduzioneai concetti delmultimediaArchitettura Exampledel progettoInstallazione ffplay -vf testsrc=100x100, format=rgba, lut=a=128 [logo];Esempi d’uso [in][logo] overlay -f video4linux2 /dev/video0dei progammia linea dicomandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 25 / 31
    • Corrispondenze tra elementi multimediali e strutture di libav*Presentazionee storia pacchetto -> AVPacketIntroduzioneai concetti del frame video -> AVFramemultimediaArchitettura codec -> AVCodecdel progettoInstallazione contesto di un codec -> AVCodecContextEsempi d’uso demuxer/input device -> AVInputFormatdei progammia linea dicomando muxer/output device -> AVOutputFormatIntroduzione contesto di un de/muxer -> AVFormatContextai filtri diFFmpeg filtro -> AVFilterEsempi d’usodella libreriaSviluppi futuriAppendici 26 / 31
    • Alcuni esempiPresentazionee storiaIntroduzioneai concetti delmultimedia doc/examples/encoding-example.cArchitetturadel progetto doc/examples/muxing-example.cInstallazione ffprobe.cEsempi d’usodei progammi libavfilter/vsrc_movie.ca linea dicomandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 27 / 31
    • Sviluppi futuriPresentazionee storia più filtri video (composizione, movie sink, port filtri diIntroduzione MPlayer)ai concetti delmultimedia supporto a filtri audio (GSoC 2011)Architetturadel progetto supporto a concatenazione logica dei file (GSoC 2011)Installazione miglioramento supporto formati di sottotitoliEsempi d’usodei progammi integrazione testo all’interno di libavfiltera linea dicomando libavresampleIntroduzioneai filtri di binding a linguaggi di alto livello (e.g. Haskell, Lisp,FFmpeg etc...)(?)Esempi d’usodella libreriaSviluppi futuriAppendici 28 / 31
    • Licenza di questo documentoPresentazionee storiaIntroduzione Rilasciato con licenza Creative Commons con clausoleai concetti delmultimedia Attribuzione-NonCommerciale-CondividiAlloStessoModoArchitettura (vedi: http://creativecommons.org/licenses/del progetto by-nc-sa/3.0/)InstallazioneEsempi d’usodei progammia linea dicomandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 29 / 31
    • RisorsePresentazione FFmpeg project web site: http://www.ffmpeg.orge storiaIntroduzione Mike Melanson multimedia wikiai concetti del http://wiki.multimedia.cx/ contienemultimediaArchitettura informazioni su codec, formati, e informazioni relative adel progetto FFmpegInstallazione Digital Image Processing - Gonzalez, Woods - PearsonEsempi d’usodei progammi 2008a linea dicomando Digital Video Compression - Peter Symes - Mc GrawIntroduzioneai filtri di Hills 2003FFmpeg Video Demystified, a handbook for the digital engineer -Esempi d’usodella libreria Jack Keith - Elsevier 2004Sviluppi futuriAppendici 30 / 31
    • ColophonPresentazionee storiaIntroduzioneai concetti delmultimedia Per realizzare questo documento sono stati usati i seguentiArchitettura programmi:del progetto emacs editing dei sorgentiInstallazioneEsempi d’uso A LTEX/Beamer creazione del documentodei progammia linea di Dia creazione di alcuni diagrammicomandoIntroduzioneai filtri diFFmpegEsempi d’usodella libreriaSviluppi futuriAppendici 31 / 31