SlideShare a Scribd company logo
1 of 20
Download to read offline
Introduzione
al progetto

Introduzione
all’architettura
                     Introduzione a Libavfilter
di libavfilter

Esempi

Sviluppi futuri           Stefano Sabatini
Appendici           mailto:stefasab@gmail.com

                                  GULCH


                   Linux Day Cagliari - 22 Ottobre 2011




                                                          1 / 20
Sommario



Introduzione
al progetto        1   Introduzione al progetto
Introduzione
all’architettura
di libavfilter      2   Introduzione all’architettura di libavfilter
Esempi

Sviluppi futuri

Appendici
                   3   Esempi

                   4   Sviluppi futuri

                   5   Appendici




                                                                     2 / 20
Obiettivi



Introduzione
al progetto

Introduzione           fornisce supporto a filtraggio a contenuti multimediali
all’architettura
di libavfilter
                       implementato come libreria, interfaccia accessibili dagli
Esempi
                       strumenti a linea di comando
Sviluppi futuri

Appendici
                       semplifica il progetto dei tools ff*, estende la
                       flessibilità/versatilità
                       estende l’infrastruttura di test, supporto a filtri/sorgenti
                       di test




                                                                                     3 / 20
Dipendenze di libavfilter



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter

Esempi

Sviluppi futuri

Appendici




                                              4 / 20
Caratteristiche


                       focus sulla performance (evita copie addizionali, evita
Introduzione
al progetto
                       conversioni)
Introduzione           supporta tutti i formati supportati da FFmpeg
all’architettura
di libavfilter          implementa un sistema sofisticato di negoziazione dei
Esempi
                       formati, minimizza il numero di conversioni di formato
Sviluppi futuri
                       audio/video
Appendici
                       presenta supporto embrionale a caratteristiche
                       interattive (comandi/eventi processati in modo
                       interattivo)
                       gestisce grafi di filtri, piuttosto che catene lineari
                       supporta sorgenti e pozzi (sink)
                       supporta filtraggio transmedia

                                                                                 5 / 20
Stato di sviluppo



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter
                       filtraggio video (-vf) integrato in ffmpeg.c nel Maggio
Esempi
                       2010, incluso negli ultimi rilasci formali di
Sviluppi futuri

Appendici
                       FFmpeg/Libav (0.7/0.8)
                       integrazione audio è in corso




                                                                                6 / 20
Anatomia di un filtro



Introduzione
al progetto

Introduzione
                       Un filtro contiene uno o più input/output pad
all’architettura
di libavfilter          Ogni pad è associato a un tipo particolare di media
Esempi                 (A/V), supporta uno o più formati di input/output
Sviluppi futuri        input e output pad sono connessi da un link
Appendici
                       vari filtri possono essere collegati in modo da formare
                       un grafo
                       un grafo può essere rappresentato tramite un
                       descrizione testuale




                                                                                7 / 20
Anatomia di un filtro - 2



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter

Esempi

Sviluppi futuri

Appendici




                                              8 / 20
Modello di filtraggio



Introduzione
al progetto

Introduzione
all’architettura       un filtro processa buffer, un buffer può contenere un
di libavfilter
                       frame video o dei campioni audio
Esempi

Sviluppi futuri        le proprietà di ogni buffer (tipo del frame I/P/B etc.,
Appendici              timestamp, posizione nel file) possono essere acceduti
                       e modificati durante la fase di filtraggio
                       modello ibrido pull/push




                                                                              9 / 20
Lavfi input



Introduzione
al progetto

Introduzione           Fornisce un dispositivo di input virtuale, legge la
all’architettura
di libavfilter          descrizione di un grafo di filtri e associa ogni output
Esempi                 aperto ad uno stream in uscita.
Sviluppi futuri

Appendici
                   Example
                   ffplay -f lavfi "testsrc[out0];
                   aevalsrc=0.5*sin(2*PI*440*t)[out1]"




                                                                                10 / 20
Filtri



Introduzione
al progetto
                            scale - basato su libswscale
Introduzione
all’architettura
di libavfilter
                            pad, crop, vflip, hflip
Esempi                      frei0r / frei0r_src wrapper
Sviluppi futuri
                            mp wrapper (wrapper dei filtri di MPlayer)
Appendici
                            altri: boxblur, delogo, drawtext, lutyuv, lutrgb, yadif,
                            select, unsharp...
                            correntemente 60 tra filtri/sorgenti/sink (vedi l’opzione
                            -filters)




                                                                                       11 / 20
Example
Introduzione
al progetto
                   color=pink,nullsink
Introduzione
all’architettura
di libavfilter      Example
Esempi
                   pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2:bikeshed"
Sviluppi futuri

Appendici
                   Example
                   crop="iw/2:ih/2:(iw-ow)/2+((iw-ow)/2)*sin(n/10):(ih-oh)/2
                   +((ih-oh)/2)*sin(n/7)"

                   Example
                   scale="3/2*oh:5/3*ih"

                                                                               12 / 20
Introduzione
al progetto

Introduzione
                   Example
all’architettura
di libavfilter      drawtext="fontsize=40:fontcolor=black@0.3:box=1:boxcolor=pin
Esempi             fontfile=FreeSerif.ttf:text=hello:x=50+20*t:y=(h/2)"
Sviluppi futuri

Appendici
                   Example
                   movie=linuxday-logo.png,scale=50:-1 [logo]; [in][logo]
                   overlay=(W-w)/2:(H-h)/2"




                                                                            13 / 20
Introduzione
al progetto

Introduzione
all’architettura   Example
di libavfilter

Esempi             frei0r=sobel
Sviluppi futuri

Appendici
                   Example
                   ocv="dilate=5x5+2x2/cross:2"




                                                  14 / 20
Introduzione
al progetto

Introduzione
all’architettura
di libavfilter
                   Example
Esempi

Sviluppi futuri    ffplay -f lavfi "aevalsrc=sin(2*PI*440*t) * 0.5*abs(sin(2*PI*t))
Appendici          - 0.1+0.2*random(1)"




                                                                                15 / 20
Sviluppi futuri - 1



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter
                       integrazione del supporto a filtri audio, wrapper
Esempi
                       sox+ladspa
Sviluppi futuri

Appendici              modifiche a livello di infrastruttura - e.g. integrazione
                       più stretta con libavcodec, supporto a direct rendering




                                                                              16 / 20
Sviluppi futuri - 2



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter          filtraggio transmedia (A -> V)
Esempi                 filtraggio di sottotitoli
Sviluppi futuri
                       transmedia+filtraggio di sottotitoli: riconoscimento voce
Appendici
                       / sintesi vocale / rendering di sottotitoli
                       più filtri!




                                                                             17 / 20
Come contribuire



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter

Esempi                 feedback: report di bug, richieste di nuove feature
Sviluppi futuri        patches are welcome!
Appendici
                       soldi/cartoline/altro




                                                                             18 / 20
Risorse



Introduzione
al progetto

Introduzione
all’architettura
di libavfilter         http://ffmpeg.org/libavfilter.html
Esempi
                      libavfilter/*.{h,c}
Sviluppi futuri

Appendici             doc/examples/filtering.c
                      ffmpeg-user, ffmpeg-devel mailing-list, IRC




                                                                    19 / 20
Licenza di questo documento



Introduzione
al progetto

Introduzione
all’architettura
                   Rilasciato con licenza Creative Commons
di libavfilter      Attribution-NonCommercial-ShareAlike (vedi: http://
Esempi             creativecommons.org/licenses/by-nc-sa/3.0/)
Sviluppi futuri

Appendici




                                                                         20 / 20

More Related Content

Viewers also liked

Ekiga - telefonare con GNU/Linux
Ekiga - telefonare con GNU/LinuxEkiga - telefonare con GNU/Linux
Ekiga - telefonare con GNU/LinuxStefano Sabatini
 
Pasaroom1maxcreative
Pasaroom1maxcreativePasaroom1maxcreative
Pasaroom1maxcreativemaxtheawesome
 
Introduzione al software libero
Introduzione al software liberoIntroduzione al software libero
Introduzione al software liberoStefano Sabatini
 
Sk1 kd1-2-kelangkaan
Sk1 kd1-2-kelangkaanSk1 kd1-2-kelangkaan
Sk1 kd1-2-kelangkaanDwi Dn
 
Ppt uang hyperlink
Ppt uang hyperlinkPpt uang hyperlink
Ppt uang hyperlinkDwi Dn
 

Viewers also liked (7)

pasadena max room 1
pasadena max room 1pasadena max room 1
pasadena max room 1
 
Ekiga - telefonare con GNU/Linux
Ekiga - telefonare con GNU/LinuxEkiga - telefonare con GNU/Linux
Ekiga - telefonare con GNU/Linux
 
Pasaroom1maxcreative
Pasaroom1maxcreativePasaroom1maxcreative
Pasaroom1maxcreative
 
Introduzione al software libero
Introduzione al software liberoIntroduzione al software libero
Introduzione al software libero
 
Libavfilter
LibavfilterLibavfilter
Libavfilter
 
Sk1 kd1-2-kelangkaan
Sk1 kd1-2-kelangkaanSk1 kd1-2-kelangkaan
Sk1 kd1-2-kelangkaan
 
Ppt uang hyperlink
Ppt uang hyperlinkPpt uang hyperlink
Ppt uang hyperlink
 

Similar to Introduzione a libavfilter

Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioAntonio Musarra
 
Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...
Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...
Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...Francesco Ciclosi
 
Esame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e SoftwareEsame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e SoftwareFabio Mora
 
Corso Avanzato Alfresco Ecm
Corso Avanzato Alfresco EcmCorso Avanzato Alfresco Ecm
Corso Avanzato Alfresco Ecmedoardo fraioli
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfrescoMirco Leo
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Alberto Lagna
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoDaniele Megna
 
Che cosa è il Qt Framework
Che cosa è il Qt FrameworkChe cosa è il Qt Framework
Che cosa è il Qt FrameworkPaolo Sereno
 
Revisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitRevisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitFabio Alessandrelli
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Giacomo Russo
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaMarcello Teodori
 
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...CMDBuild org
 

Similar to Introduzione a libavfilter (20)

Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...
Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...
Implementare il paradigma Software-Defined Networking utilizzando OpenFlow sw...
 
S354 php-5.x-e-my sql-5.x
S354 php-5.x-e-my sql-5.xS354 php-5.x-e-my sql-5.x
S354 php-5.x-e-my sql-5.x
 
Esame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e SoftwareEsame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e Software
 
Corso Avanzato Alfresco Ecm
Corso Avanzato Alfresco EcmCorso Avanzato Alfresco Ecm
Corso Avanzato Alfresco Ecm
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)
 
Git best practices
Git best practicesGit best practices
Git best practices
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Java&Solidarieta
Java&SolidarietaJava&Solidarieta
Java&Solidarieta
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciuto
 
Tools & librerie PHP
Tools & librerie PHPTools & librerie PHP
Tools & librerie PHP
 
Che cosa è il Qt Framework
Che cosa è il Qt FrameworkChe cosa è il Qt Framework
Che cosa è il Qt Framework
 
Revisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitRevisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con git
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
Stato di avanzamento dei lavori e roadmap del progetto CMDBuild - CMDBuild Da...
 

More from Stefano Sabatini

FFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkitFFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkitStefano Sabatini
 
Software libero: verso un modello di business
Software libero: verso un modello di businessSoftware libero: verso un modello di business
Software libero: verso un modello di businessStefano Sabatini
 

More from Stefano Sabatini (6)

FFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkitFFmpeg - the universal multimedia toolkit
FFmpeg - the universal multimedia toolkit
 
Software libero: verso un modello di business
Software libero: verso un modello di businessSoftware libero: verso un modello di business
Software libero: verso un modello di business
 
Vulnerabilità exploit
Vulnerabilità exploitVulnerabilità exploit
Vulnerabilità exploit
 
Flash e software libero
Flash e software liberoFlash e software libero
Flash e software libero
 
Multimedia con GNU/Linux
Multimedia con GNU/LinuxMultimedia con GNU/Linux
Multimedia con GNU/Linux
 
Multimedia con FFmpeg
Multimedia con FFmpegMultimedia con FFmpeg
Multimedia con FFmpeg
 

Introduzione a libavfilter

  • 1. Introduzione al progetto Introduzione all’architettura Introduzione a Libavfilter di libavfilter Esempi Sviluppi futuri Stefano Sabatini Appendici mailto:stefasab@gmail.com GULCH Linux Day Cagliari - 22 Ottobre 2011 1 / 20
  • 2. Sommario Introduzione al progetto 1 Introduzione al progetto Introduzione all’architettura di libavfilter 2 Introduzione all’architettura di libavfilter Esempi Sviluppi futuri Appendici 3 Esempi 4 Sviluppi futuri 5 Appendici 2 / 20
  • 3. Obiettivi Introduzione al progetto Introduzione fornisce supporto a filtraggio a contenuti multimediali all’architettura di libavfilter implementato come libreria, interfaccia accessibili dagli Esempi strumenti a linea di comando Sviluppi futuri Appendici semplifica il progetto dei tools ff*, estende la flessibilità/versatilità estende l’infrastruttura di test, supporto a filtri/sorgenti di test 3 / 20
  • 4. Dipendenze di libavfilter Introduzione al progetto Introduzione all’architettura di libavfilter Esempi Sviluppi futuri Appendici 4 / 20
  • 5. Caratteristiche focus sulla performance (evita copie addizionali, evita Introduzione al progetto conversioni) Introduzione supporta tutti i formati supportati da FFmpeg all’architettura di libavfilter implementa un sistema sofisticato di negoziazione dei Esempi formati, minimizza il numero di conversioni di formato Sviluppi futuri audio/video Appendici presenta supporto embrionale a caratteristiche interattive (comandi/eventi processati in modo interattivo) gestisce grafi di filtri, piuttosto che catene lineari supporta sorgenti e pozzi (sink) supporta filtraggio transmedia 5 / 20
  • 6. Stato di sviluppo Introduzione al progetto Introduzione all’architettura di libavfilter filtraggio video (-vf) integrato in ffmpeg.c nel Maggio Esempi 2010, incluso negli ultimi rilasci formali di Sviluppi futuri Appendici FFmpeg/Libav (0.7/0.8) integrazione audio è in corso 6 / 20
  • 7. Anatomia di un filtro Introduzione al progetto Introduzione Un filtro contiene uno o più input/output pad all’architettura di libavfilter Ogni pad è associato a un tipo particolare di media Esempi (A/V), supporta uno o più formati di input/output Sviluppi futuri input e output pad sono connessi da un link Appendici vari filtri possono essere collegati in modo da formare un grafo un grafo può essere rappresentato tramite un descrizione testuale 7 / 20
  • 8. Anatomia di un filtro - 2 Introduzione al progetto Introduzione all’architettura di libavfilter Esempi Sviluppi futuri Appendici 8 / 20
  • 9. Modello di filtraggio Introduzione al progetto Introduzione all’architettura un filtro processa buffer, un buffer può contenere un di libavfilter frame video o dei campioni audio Esempi Sviluppi futuri le proprietà di ogni buffer (tipo del frame I/P/B etc., Appendici timestamp, posizione nel file) possono essere acceduti e modificati durante la fase di filtraggio modello ibrido pull/push 9 / 20
  • 10. Lavfi input Introduzione al progetto Introduzione Fornisce un dispositivo di input virtuale, legge la all’architettura di libavfilter descrizione di un grafo di filtri e associa ogni output Esempi aperto ad uno stream in uscita. Sviluppi futuri Appendici Example ffplay -f lavfi "testsrc[out0]; aevalsrc=0.5*sin(2*PI*440*t)[out1]" 10 / 20
  • 11. Filtri Introduzione al progetto scale - basato su libswscale Introduzione all’architettura di libavfilter pad, crop, vflip, hflip Esempi frei0r / frei0r_src wrapper Sviluppi futuri mp wrapper (wrapper dei filtri di MPlayer) Appendici altri: boxblur, delogo, drawtext, lutyuv, lutrgb, yadif, select, unsharp... correntemente 60 tra filtri/sorgenti/sink (vedi l’opzione -filters) 11 / 20
  • 12. Example Introduzione al progetto color=pink,nullsink Introduzione all’architettura di libavfilter Example Esempi pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2:bikeshed" Sviluppi futuri Appendici Example crop="iw/2:ih/2:(iw-ow)/2+((iw-ow)/2)*sin(n/10):(ih-oh)/2 +((ih-oh)/2)*sin(n/7)" Example scale="3/2*oh:5/3*ih" 12 / 20
  • 13. Introduzione al progetto Introduzione Example all’architettura di libavfilter drawtext="fontsize=40:fontcolor=black@0.3:box=1:boxcolor=pin Esempi fontfile=FreeSerif.ttf:text=hello:x=50+20*t:y=(h/2)" Sviluppi futuri Appendici Example movie=linuxday-logo.png,scale=50:-1 [logo]; [in][logo] overlay=(W-w)/2:(H-h)/2" 13 / 20
  • 14. Introduzione al progetto Introduzione all’architettura Example di libavfilter Esempi frei0r=sobel Sviluppi futuri Appendici Example ocv="dilate=5x5+2x2/cross:2" 14 / 20
  • 15. Introduzione al progetto Introduzione all’architettura di libavfilter Example Esempi Sviluppi futuri ffplay -f lavfi "aevalsrc=sin(2*PI*440*t) * 0.5*abs(sin(2*PI*t)) Appendici - 0.1+0.2*random(1)" 15 / 20
  • 16. Sviluppi futuri - 1 Introduzione al progetto Introduzione all’architettura di libavfilter integrazione del supporto a filtri audio, wrapper Esempi sox+ladspa Sviluppi futuri Appendici modifiche a livello di infrastruttura - e.g. integrazione più stretta con libavcodec, supporto a direct rendering 16 / 20
  • 17. Sviluppi futuri - 2 Introduzione al progetto Introduzione all’architettura di libavfilter filtraggio transmedia (A -> V) Esempi filtraggio di sottotitoli Sviluppi futuri transmedia+filtraggio di sottotitoli: riconoscimento voce Appendici / sintesi vocale / rendering di sottotitoli più filtri! 17 / 20
  • 18. Come contribuire Introduzione al progetto Introduzione all’architettura di libavfilter Esempi feedback: report di bug, richieste di nuove feature Sviluppi futuri patches are welcome! Appendici soldi/cartoline/altro 18 / 20
  • 19. Risorse Introduzione al progetto Introduzione all’architettura di libavfilter http://ffmpeg.org/libavfilter.html Esempi libavfilter/*.{h,c} Sviluppi futuri Appendici doc/examples/filtering.c ffmpeg-user, ffmpeg-devel mailing-list, IRC 19 / 20
  • 20. Licenza di questo documento Introduzione al progetto Introduzione all’architettura Rilasciato con licenza Creative Commons di libavfilter Attribution-NonCommercial-ShareAlike (vedi: http:// Esempi creativecommons.org/licenses/by-nc-sa/3.0/) Sviluppi futuri Appendici 20 / 20