1. ● Multimedia con FF-mpeg
● Introduzione ad alcuni concetti della compressione
video
– contenitore multimediale e flussi monomediali
– compressione video
● Introduzione a FF-mpeg (storia, modello di sviluppo)
● Esempi d'uso di FF-mpeg
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
1
2. Compressione video
● Principi di base
– I metodi di compressione generici (huffman,
compressione basata su vocabolario) da soli non sono
sufficienti/efficienti
– Sfrutta le ridondanze spaziali (e.g. sfondo con colore
uniforme) e temporali (e.g. sfondo fisso) presenti in
un generico flusso video.
– Rende l'immagazzinamento e la trasmissione dei
flussi video fattibile dal punto di vista economico e
tecnologico
– Può essere con perdita di informazione o senza
perdita di informazione
– Realizza un compromesso tra risorse computazionali
richieste, livello di compressione ottenuto, qualità
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
2
3. Contenitori multimediali e flussi
● Il formato del contenitore multimediale definisce come
“multiplexare” molti flussi monomediali in un'unico
flusso o file “Multimediale”
● Ciascun contenitore multimediale presenta delle
limitazioni
● Esempi: Avi, Mpeg-4:14 (Quicktime, 3GP), ASF,
Matroska, Nut, Ogg
● Strumenti diagnostici: ffmpeg -i, mpeg4ip
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
3
4. FF-mpeg
● Caratteristiche - 1
– Nasce nel 2000 (Fabrice Bellard), inizialmente per
implementare una libreria di codifica/decodifica Mpeg
– Libreria multipiattaforma (Linux, Be-OS, Mac, Windows)
– Strumenti a linea di comando che usano le librerie: ffmpeg,
ffplay, ffserver
– Software libero (GPL/LGPL)
– Efficiente (ottimizzata per varie piattaforme)
– Progettata per supportare potenzialmente tutti i possibili
formati multimediali (contenitori e flussi
audio/video/testuali) e fornire uno strato di astrazione
generico per gestire flussi multimediali
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
4
5. FF-mpeg
● Caratteristiche – 2
– Uno degli obiettivi del progetto è quello di fornire
documentazione e supporto per il maggior numero
possibile di formati fornendo al tempo stesso
un'implementazione funzionante di codifica/decodifica dei
vari formati (preservazione dei contenuti digitali nei
secoli a venire)
– Ingegnerizzazione a rovescio (reverse enginnering) di
molti formati proprietari (e.g. WMV, RV)
– Progetti innovativi:
● Snow
● Nut
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
5
6. FF-mpeg
● Modello di sviluppo
– Non vengono rilasciate release formali, l'ultima “versione”
è considerato l'ultimo checkout SVN
– Le patch sono discusse e approvate nella mailing-list
ffmpeg-devel, quindi (eventualmente) applicate
ffmpeg-devel
– I manutentori principali si occupano di effetuare la
revisione delle patch proposte ed eventualmente della loro
applicazione
– Si può diventare sviluppatori “ufficiali” (permesso di
scrittura SVN) per richiesta esplicita di mantenimento di un
modulo o per “investitura” diretta
– Dal 2006 partecipa al progetto “Google Summer of Code”
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
6
7. FF-mpeg
● Alcuni progetti che usano FF-mpeg
– FFD-show
– M-player
– Myth-TV
– Open-H323
– Video-lan (VLC media player)
– Xine
– Molti servizi commerciali (YouTube?)
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
7
8. Installazione di FF-mpeg - 1
● Data la natura sperimentale di FF-mpeg, solo versioni
recenti (snapshot SVN) sono considerate “supportate”;
per questo è necessario installare da sorgenti.
– Procedura:
● svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk
ffmpeg
● ./configure --help; ./configure --bla-bla
● make
● make install
● In molti casi è necessario installare librerie ed header
esterni per abilitare il supporto a formati non supportati
nativamente:
● es.: sudo apt-get install libmp3lame-dev libmp3lame
libvorbis libvorbis-dev
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
8
9. Installazione di FF-mpeg - 2
● Christian Marillat mantiene dei pacchetti deb per
sistemi basati su Debian:
– deb http://www.debian-multimedia.org/ lenny main
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
9
10. ffmpeg: cosa è possibile fare
● ffmpeg: coltellino svizzero per processare un flusso/file
multimediale
● muxing, demuxing, transcodifica
● acquisizione da sorgenti varie (/dev/audio, x11grab)
● riproduzione con ffplay (player multimediale minimale)
● streaming con ffstream (attualmente non funziona!!)
● filtraggio a livello di transcodifica con filtri video (V-
hook: deprecati, libavfilter): es. watermarking
● non è uno editor multimediale (vedi cinelerra, kino)
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
10
11. ffmpeg - autodocumentazione
● RTFM:
– man ffmpeg
– ffmpeg -h
● RTFS (Read The Fine Source)
● Ottenere la lista dei formati (contenitori multimediali e
flussi media) supportati:
– ffmpeg -formats
– ffmpeg -pix_fmt list
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
11
12. ffmpeg – determinare il tipo di un
file multimediale
● ffmpeg -i <input file>
● ffprobe -show_files -show_streams <input files>
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
12
13. ffmpeg – processazione di file
audio
● Conversione a MP3 (-ab fino a 32Kbps):
– ffmpeg -i file.wav -ab 128k -acodec libmp3lame file.mp3
– conversione con downmixing:
● ffmpeg -i file.wav -ab 128k -acodec libmp3lame -ac 1
file.mp3
● Conversione a vorbis (VBR: -aq variabile)
– ffmpeg -i file.wav -aq 30 -acodec vorbis file.vorbis
● Conversione ad AAC (Advanced Audio Codec file):
– ffmpeg -i file.wav -ab 128k -acodec libfaac file.aac
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
13
14. ffmpeg – processazione di file
audio
● Estrazione della traccia audio di un file multimediale:
– ffmpeg -i “Kylie Minogue – Slow.flv” -vn -acodec vorbis
-sameq “Kylie Minogue – Slow.ogg”
– vedi anche youtube-download:
http://thread.gmane.org/gmane.comp.video.ffmpeg.user/11723
● non è attualmente supportata la possibilità di filtrare
flussi audio (patches are welcome)
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
14
15. ffmpeg – processazione di file
video
● Estrarre le immagioni da un flusso video:
– Estrazione di tutti i frame video:
● ffmpeg -i movie.avi -sameq -f image2 movie-
images/image-%03d.jpeg
– Con framerate diverso dall'originale:
● ffmpeg -i movie.avi -f image2 -sameq -r 1 movie-
images/image-%03d.jpeg
● Da immagini a un flusso video:
– ffmpeg -f image2 -i images-%d03.jpeg -r 1 -vcodec mpeg4
movie.avi
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
15
16. Transcodifica di file multimediali
● Conversione di un file multimedia a un formato
riproducibile da un telefono cellulare (video: H263,
audio: AMR NB o AMR WB, contenitore: 3GP):
– ffmpeg -i movie.avi -b 37k -vcodec h263 -acodec
libamr_nb -s qcif movie.3gp
● Conversione di un file multimediale a un formato
riproducibile da un I-pod (video: Mpeg-4:2, audio: AAC,
contenitore: Mpeg-4:14):
– ffmpeg -i movie.avi -acodec libfaac -ab 128k -vcodec
mpeg4 -flags trell+mv4 -s 320x180 movie.mp4
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
16
17. Processazione di file multimediali
● Codifica a qualità costante
– ffmpeg -i movie.avi -qscale 2 movie.mp4
● Codifica a bitrate costante
– ffmpeg -i movie.avi -b 1000k -minrate 1000k -maxrate
1000k -bufsize 2000k movie.mp4
● ffmpeg dispone di centinaia di opzioni per controllare
nel dettaglio il processo di transcodifica
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
17
18. Filtraggio di contenuti
multimediali
● Applicare degli effetti (filtri) al video in input:
– V-hook filter (deprecati!! Vedi libavfilter)
● null filter
● watermarking filter
● imlib filter (ad esempio per generare sottotitoli)
– libavfilter: ancora non inserita nel ramo principale del
codice di FF-mpeg:
● svn checkout svn://svn.mplayerhq.hu/soc/libavfilter
● L'attuale architettura di libavfilter non supporta ancora
il filtraggio di flussi audio (e neanche testuali)
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
18
19. Acquisizione da sorgenti
● libavsources: non esiste ma esistono implementate in
libavformat funzionalità di acquisizione da vari
dispositivi. Esempi:
– ffmpeg -f x11grab -s 1280x800 -i :0.0 -r 5 xgrab.avi
– ffmpeg -f oss -i /dev/audio audiograb.avi
– ffmpeg -f oss -i /dev/audio -f x11grab -s 1650x1050 -r 5 -i
:0.0 screencast.avi
● lettura da pipe:
– ffmpeg -t 10 -s qcif -f rawvideo -pix_fmt rgb24 -r 25 -i
/dev/urandom -y noise.mpeg
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
19
20. Google Summer of Code e FF-
mpeg
● Da un paio di anni FF-mpeg partecipa al Progetto Google
Summer of Code:
– http://code.google.com/soc/2007
– http://wiki.multimedia.cx/index.php?title=Summer_Of_Code_2007
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
20
21. Link utili
● Sito web di FFmpeg:
http://ffmpeg.mplayerhq.hu/index.html
● Mailing list di FFmpeg (ffmpeg-user e ffmpeg-devel)
(English only!):
http://ffmpeg.mplayerhq.hu/mailinglists.html
● Wiki di Mike Melanson sul multimedia:
http://wiki.multimedia.cx/index.php?title=Main_Page
● Pagina di wikipedia sul multimedia:
http://en.wikipedia.org/wiki/Multimedia
Stefano Sabatini, Multimedia con FF-mpeg
Cagliari, 27 Ottobre 2007
21