Escola Universitària d’Enginyeria Tècnica de Telecomunicació La Salle

Treball Final de Carrera

Enginyeria Tècnica de Telecomunicació en So i Imatge

Alumne Professor Ponent

ACTA DE L'EXAMEN DEL TREBALL FI DE CARRERA

Reunit el Tribunal qualificador en el dia de la data, l'alumne

D.

va exposar el seu Treball de Fi de Carrera, el qual va tractar sobre el tema següent:

Acabada l'exposició i contestades per part de l'alumne les objeccions formulades pels Srs. membres del tribunal, aquest valorà l'esmentat Treball amb la qualificació de

Barcelona,

VOCAL DEL TRIBUNAL VOCAL DEL TRIBUNAL

PRESIDENT DEL TRIBUNAL

Abstracte

Avui en dia l’ús de contingut multimèdia és molt freqüent. Des de la publicació o descàrrega d’arxius d’àudio i/o vídeo a pàgines d’internet on certes característiques dels arxius poden ser limitades tals com els seus còdecs, la mida i la durada, fins a la manipulació d’arxius de vídeo com, per exemple, la subtitulació, són operacions que actualment estan a l’ordre del dia.

Ara bé, el problema sorgeix alhora de trobar un software compressor-descompressor d’arxius multimèdia amb una bona varietat de còdecs amb els que sigui compatible i amés, el més important, que sigui lliure.

Quan es parla de software lliure s’acostuma a confondre en que es tracta de software gratuït. Però no es tracta del seu preu, doncs encara que es tracti de software lliure, aquest pot ser venut comercialment. Quan es parla de software lliure, realment es refereix a que pot ser utilitzat, copiat, estudiat, modificat i redistribuït lliurement.

L’objectiu d’aquest treball és aprendre a utilitzar un software que compleixi aquests requisits i conèixer les seves característiques.

Amb FFmpeg hem trobat un software absolutament capaç de complir amb les expectatives esmentades doncs treballa amb una gran quantitat de còdecs , no només amb els més coneguts, i amés disposa d’un ample ventall d’opcions per a tractar i editar el contingut d’aquests arxius multimèdia.

Amb aquest treball podem arribar a la conclusió de que per a realitzar operacions bàsiques amb arxius multimèdia, on al parlar d’operacions bàsiques es parla de les operacions més quotidianes i usuals amb les que es tracten aquest tipus d’arxius, no és necessari recórrer a la compra, o a la descàrrega il·legal, de programes normalment cars tals com Adobe Premiere, per exemple.

i

iii FFMPEG, software de programari lliure.

Agraïments

Vull mostrar els meus agraïments al meu professor ponent Josep Ribas per trobar un espai a la seva agenda per ajudar-me en la elaboració d’aquest treball.

iv

v

Contingut

1 Introducció ...... 1 2 Instal·lació de FFMPEG a Windows ...... 5 3 Instal·lació de FFMPEG a MAC OS X ...... 7 3.1 Instal·lació de LAME ...... 7 3.2 Instal·lació de FFMPEG ...... 8 4 Còdecs utilitzats ...... 11 4.1 Còdecs de vídeo implementats ...... 11 4.2 Còdecs d’àudio implementats ...... 15 4.3 Còdecs de subtítols implementats ...... 18 4.4 Característiques dels còdecs ...... 18 4.4.1 Còdecs de vídeo ...... 18 4.4.2 Còdecs d’àudio ...... 26 5 Paràmetres de FFMPEG ...... 29 5.1 Opcions genèriques ...... 29 5.2 Opcions principals ...... 30 5.3 Opcions de vídeo ...... 31 5.4 Opcions d’àudio ...... 32 5.5 Opcions de subtítols ...... 32 5.6 Filtres ...... 33 6 Utilització de FFMPEG ...... 35 6.1 Conèixer les característiques d’un arxiu ...... 35 6.2 Eliminar l’àudio d’un arxiu de vídeo ...... 36 6.3 Extreure l’àudio d’un arxiu de vídeo ...... 36 6.4 Unir vídeo i àudio ...... 37 6.5 Especificar un còdec d’àudio ...... 37 6.6 Especificar un còdec de vídeo ...... 38 6.7 Canviar la resolució d’un vídeo ...... 39 6.8 Limitar la durada o mida d’un arxiu ...... 41 6.9 Canviar canals d’àudio de estèreo a mono ...... 42 6.10 Obtenir una seqüència d’imatges a partir d’un vídeo ...... 42 6.11 Obtenir un vídeo a partir d’una seqüència d’imatges ...... 43

vii FFMPEG, software de programari lliure.

6.12 Obtenir un GIF animat a partir d’un vídeo ...... 43 6.13 Extreure una imatge concreta d’un vídeo ...... 44 6.14 Convertir un vídeo a FULL HD ...... 44 6.15 Retallar la imatge ...... 45 6.16 Ampliar el fons de la imatge ...... 47 6.17 Vídeo a càmera ràpida/lenta ...... 49 6.18 Girar el vídeo horitzontal o verticalment ...... 50 6.19 Transposar el vídeo ...... 51 6.20 Redimensionar el vídeo ...... 52 6.21 Establir la base de temps ...... 53 6.22 Enfocar o desenfocar un vídeo ...... 54 6.23 Introduir subtítols ...... 55 7 FFSERVER ...... 57 7.1 Configuració de FFSERVER ...... 58 7.2 Exemple de streaming amb FFSERVER ...... 62 8 FFPROBE ...... 67 8.1 Opcions de FFPROBE ...... 67 8.2 Exemple funcional de FFPROBE ...... 68 9 FFPLAY ...... 75 9.1 Compilació de FFMPEG amb SDL ...... 75 9.2 Opcions principals de FFPLAY ...... 79 9.3 Controls durant la reproducció ...... 80 9.4 Exemple funcional de FFPLAY ...... 80 10 Conclusions ...... 85 11 Referències ...... 87

viii

Acrònims

AAC: Audio Advanced Coding.

AC: 63 coeficients que no son de DC d’una matriu 8x8.

AVC: Advanced Video Coding.

AVI: Audio Video Interleaved.

CIF: Common Intermediate Format.

DC: Coeficient (0,0) d’una matriu 8x8.

DCT: Discrete Cosine Transform.

DPCM: Differential Pulse Code Modulation.

DRM: Digital Rights Management.

DV: Digital Video.

FLAC: Free Lossless Audio Codec.

HD: High Definition.

HDTV: High Definition Television.

HTTP: Hypertext Transfer Protocol.

IEC: International Electrotechnical Commission.

ISO: International Organization for Standardization.

ITU-T VCEG: International Telecommunications Union – Telecommunications Standardization Bureau – Video Coding Experts Group.

ITU: International Telecommunications Union.

JPEG: Joint Photographic Experts Group.

LAME: Lame Ain’t an MP3 Encoder.

MJPEG: Motion Joint Photographic Experts Group.

MP3: Moving Picture Experts Group – 1/2 Audio Layer 3.

MPEG: Motion Picture Experts Group.

NTSC: National Television System Comitee.

PAL: Phase Alternating Line.

ix FFMPEG, software de programari lliure.

QCIF: Quarter Common Intermediate Format.

RDSI: Red Digital de Servicios Integrados.

RLE: Run Length Encoding.

SDL: Simple DirectMedia Layer.

SVN: Subversion.

SVQ: Sorenson Vector Quantizer.

TFC: Treball Final de Carrera.

VBR: Variable Bit Rate.

VOB: Video Objects

WAV: Waveform .

WMA: Windows Media Audio.

WMV: Windows Media Video.

YCbCr: Luminance; Chroma: Blue; Chroma: Red (Digital Video Color Space).

x

1 Introducció

FFmpeg és una col·lecció de software lliure capaç de gravar, convertir i fer streaming d’àudio i vídeo.

El software lliure és el software que una vegada obtingut, pot ser utilitzat, copiat, estudiat, modificat i redistribuït lliurement. El software lliure acostuma a estar disponible gratuïtament per Internet, o a preu de cost de la distribució a través d’altres mitjans. No obstant, no és obligatori que sigui així i, encara que conservi el seu caràcter de lliure, pot ser venut comercialment.

FFmpeg està desenvolupat en GNU/Linux, però pot ser compilat en la majoria de sistemes operatius, incloent Windows.

El llançament inicial d’aquest projecte va ser el 20 de desembre del 2000 per Gerard Lantau i actualment és mantingut per Michael Niedermayer, i la ultima versió estable, la 1.0, va ser llençada el 28 de setembre de 2012.

Cal tenir en compte que la majoria dels desenvolupadors de FFmpeg ho siguin també del projecte Mplayer.

FFmpeg és utilitzat en molts còdecs lliures i privats, incloent ffmpeg2theora, VLC, Mplayer, HandBrake, Blender, Google Chrome i d’altres.

També hi han varis frameworks multimèdia que ho utilitzen com DirectShow/VFW (), QuickTime (perian), GStreamer, OpenMAX, Xine.

El projecte està compost per distints elements:

• Ffmpeg: és una eina de línia de comandes per a convertir un vídeo de un format a un altre. També pot capturar i codificar en temps real des de una targeta de televisió. • Ffserver: és un servidor de streaming multimèdia de emissions en directe que suporta HTTP. • Ffprobe: és un analitzador de seqüències multimèdia. • Ffplay: és un reproductor multimèdia basat en SDL i les biblioteques FFmpeg.

: és una biblioteca que conté tots els còdecs de FFmpeg. Molts d’ells van ser desenvolupats des de zero per assegurar una major eficiència i un codi altament reutilitzable. • Libavformat: és una biblioteca que conté els multiplexors i els desmultiplexors per als arxius contenidors multimèdia. Aquests arxius contenidors son els arxius on s’emmagatzemen la informació de vídeo, àudio, subtítols, capítols i informació de sincronització seguint un format preestablert en la seva especificació.

1 FFMPEG, software de programari lliure.

• Libavutil: és una biblioteca de recolzament que conté totes les rutines comuns en les diferents parts de FFmpeg. • Libpostproc: és una biblioteca de funcions de post procés de vídeo. • Libswscale: és la biblioteca encarregada del escalat de vídeo. • Libavdevice: és una biblioteca que conté dispositius d’entrada i de sortida per a gravar de molts frameworks comuns de software de entrada/sortida, incloent Video4Linux, Video4Linux2, VfW i ALSA. • Libavfilter: és la biblioteca que conté els filtres. • Libswresample: és una llibreria altament optimitzada per a realitzar el remostreig del àudio optimitzat, rematrixing, i les operacions de conversió de format de mostra.

A la Figura 1 es pot observar un diagrama que ajudarà a entendre, a grans trets i a mode introductori, el que està passant a l’hora d’utilitzar FFmpeg.

Dades Codificador

d’àudio d’àudio

Contenidor Dades de Codificador de

vídeo vídeo

Figura 1. Procés de compressió amb àudio i vídeo

Tant àudio com vídeo ocuparien molt d’espai d’emmagatzematge si s’emmagatzemés en raw.

Suposant un vídeo NTSC estàndard de 720x480 píxels, 30 frames per segon i color RGB de 24 bits, es parla de 1.036.800 bytes per trama. Això venen a ser casi 30 MB per segon, o més de 200 GB per a una pel·lícula de 2 hores, i això només el vídeo. Per això, les dades han de ser comprimides.

Els algoritmes de compressió sense pèrdues tradicionals, com ZIP o GZ, no poden arribar a comprimir les dades el suficient, així que s’ha d’anar cap a la compressió amb pèrdua, és a dir, una compressió que és molt més eficient, però en la que pateix la qualitat de la imatge. El mateix s’aplica al àudio amb una degradació de la qualitat del so. L’objectiu de nombroses investigacions en les últimes dècades ha sigut la elaboració de nous algoritmes que aconsegueixen reduir la quantitat de dades necessàries per al àudio i el vídeo i al mateix temps reduir els danys produïts al so i a la imatge, com a resultat de la compressió.

Aquests algoritmes que permeten codificar les dades amb la finalitat de transportar, i per a descodificar les dades al altre extrem, s’anomenen còdecs. Varis còdecs estan continguts a la

2

biblioteca libavcodec introduïda a ffmpeg, d’altres son proporcionats per libgsm, XviD, AMR i libvorbis.

Un cop que les seqüències d’àudio i vídeo han estat codificades pels seus respectius còdecs, aquestes dades codificades han de ser encapsulades en un sol arxiu. Aquest arxiu en denomina contenidor. Un tipus particular de contenidor és AVI (àudio i vídeo entrellaçat). AVI és tan sols un mètode de mesclar l’àudio i el vídeo codificat junts en un arxiu únic. Conté dades que informen al reproductor sobre quins còdecs d’àudio i vídeo s’han utilitzat per tal de que aquest pugui reproduir-ho, i hi han moltes combinacions possibles de diferents còdecs que poden ser utilitzats dins de cada tipus de contenidor, el que explica que un sistema pot reproduir alguns arxius AVI i d’altres que no. El sistema pot extreure les dades de l’àudio i el vídeo codificats sense cap problema, però només podrà descodificar-los tan sols si té els còdecs necessaris.

Els algoritmes utilitzats per a empaquetar les dades de l’àudio i el vídeo codificades en diversos tipus de contenidors estan la seva majoria en la biblioteca libavformat subministrada amb Ffmpeg.

La reproducció d’un arxiu multimèdia funciona en la direcció oposada. Tot el que s’ha de fer és referir-se a la Figura 1 i canviar el sentit de les fletxes. Una vegada que s’identifica el recipient utilitzat, ens diu quins còdecs son necessaris per a desxifrar les dades. A continuació s’extrauen l’àudio i el vídeo del contenidor i es tracten a través dels còdecs apropiats, i per l’altre extrem tenim les dades d’àudio i de vídeo en raw que són tractats pels subsistemes de so i visualització del reproductor.

Ffmpeg és una eina doncs, que en la seva forma més simple, implementa un descodificador i un codificador, el qual permet al usuari convertir arxius d’un contenidor o còdec a un altre, per exemple un arxiu VOB d’un DVD de vídeo MPEG2 i àudio AC3 a un arxiu AVI amb vídeo MPEG4 i àudio MP3, o un arxiu QuickTime que conté vídeo SVQ3 i àudio MP3 a un arxiu que conté vídeo H263 3GP i àudio AMR de banda ample. El contenidor original és examinat i les dades codificades s’extrauen i es tracten amb els còdecs necessaris. Llavors, les dades recentment desxifrades, es tracten amb els nous còdecs escollits per al nou contenidor.

Ffmpeg també pot realitzar algunes manipulacions bàsiques sobre les dades d’àudio i vídeo just abans de que tornin a ser codificades per els còdecs de destí. Aquestes manipulacions inclouen canviar la velocitat de mostreig del àudio i avançar o atraçar respecte al vídeo. També inclouen el canvi de velocitat dels frames del vídeo resultant, retallar-lo, canviar la seva mida o canviar la relació d’aspecte de la imatge. Amés, ffmpeg permet la importació d’àudio i vídeo de distintes fonts.

3 FFMPEG, software de programari lliure.

4

2 Instal·lació de FFMPEG a Windows

Per a la instal·lació de ffmpeg en un sistema Windows s’han de seguir els següents passos:

Primer s’ha de descarregar FFmpeg des del lloc web oficial de FFmpeg (http://ffmpeg.zeranoe.com/builds/).

En aquest enllaç es poden trobar dos tipus d’arxius a descarregar, ‘Static’ i ‘Shared’. En els descarregables del primer tipus, ‘Static’, es disposa d’un sol arxiu executable per a cada programa (ffmpeg, ffprove, ffplay). En canvi, els del segon tipus, ‘Shared’, proveeixen cada llibreria com a un arxiu ‘.dll’ independent (libavcodec, labavformat, libavfilter, libavdevice, libswscale), i petits executables que depenen de les llibreries per a cada programa.

A part, es disposa de pacs ‘Dev’ que proveeixen les capçaleres i els arxius ‘.lib /.dll /.a /.pc’ necessaris per a utilitzar els arxius ‘.dll’ en altres programes.

En el nostre cas, a mode de exemple, utilitzarem la construcció estàtica de 32 o de 64 bits depenent de la arquitectura del sistema Windows utilitzat.

Un cop descarregat l’arxiu idoni, s’ha de crear un directori, per exemple a la unitat C: amb el nom de FFmpeg per a guardar els arxius executables i biblioteques FFmpeg.

En aquest directori (C:/FFmpeg) s’hi ha de descomprimir l’arxiu descarregat en el pas anterior des del lloc web de FFmpeg.

A continuació, s’ha d’informar al sistema operatiu sobre la ubicació de les biblioteques FFmpeg i els arxius executables editant el PATH del sistema

Per a fer-ho, al Panel de Control s’ha de clicar sobre Sistema i entrar a Configuración avanzada del sistema, tot seguit s’ha de clicar sobre Variables de entorno i clicar sobre el PATH per a editar les variables del sistema.

Si s’instal·la una versió de 32 bits de Ffmpeg, pot tenir aquest aspecte:

C:/FFmpeg/FFmpeg-git-c995644-32-bit-Static/bin

No obstant, si la versió que s’instal·la és de 64 bits, el seu aspecte podria ser el següent:

C:/FFmpeg/FFmpeg-git-c995644-64-bit-Static/bin

Una vegada realitzat, s’ha de reiniciar el sistema operatiu.

Es pot comprovar si s’ha instal·lat FFmpeg correctament al sistema executant ‘ffmpeg’ a la línia de comandes, i això ha de retornar la versió del FFmpeg instal·lat.

5 FFMPEG, software de programari lliure.

6

3 Instal·lació de FFMPEG a MAC OS X

A partir d’aquí i per a la resta del treball s’ha de tenir en compte que el equip utilitzat per a tal efecte, ha sigut un MacBook Pro amb un processador de 2.5 GHz Intel Core i5 amb la versió 10.8.2 del sistema OS X, utilitzant la línia de comandes del “Terminal” inclòs en aquest sistema.

A continuació es pot observar una petita descripció dels passos a seguir i els recursos addicionals utilitzats per a poder instal·lar FFmpeg en aquest sistema.

Per a començar, s’han de instal·lar les ‘eines de desenvolupament de Apple’. Principalment XCode 3.1 o superior (en el nostre cas, XCode 4) que es pot descarregar de la pàgina de ‘eines de desenvolupament de Apple’ (https://developer.apple.com/technologies/mac/).

Un cop descarregat i instal·lat, s’hi ha d’obrir un nou projecte i clicar-hi sobre la opció de preferències del menú principal (o ‘⌘’+’,’) on, dins la nova finestra que emergirà, s’ha d’instal·lar la opció de Command Line Tools, és a dir, eines de línies de comandes.

Tot seguit, degut a que FFmpeg no inclou un codificador MP3, on les seves llibreries son útils per a manipular vídeos flv, utilitzarem LAME.

3.1 Instal·lació de LAME

Per a la instal·lació de LAME, i per tant, per a poder utilitzar les seves llibreries, s’han de seguir els següents passos:

• Primer s’ha de crear un directori de treball al home amb el nom de lame. • S’han de descarregar les fonts des de http://sourceforge.net/projects/lame/files/, on l’arxiu tindrà un nom tal com lame-3.99.5.tar.gz, i s’haurà de guardar en el nou directori creat en el punt anterior. • Es descomprimiran els arxius utilitzant la següent comanda:

tar xvzf lame-3.99.5.tar.gz

• La descompressió crearà una nova carpeta: lame-3.99.5 en la que s’hi haurà d’entrar i executar les tres comandes típiques en una instal·lació:

cd lame-3.99.5 ./configure make sudo make install

7 FFMPEG, software de programari lliure.

3.2 Instal·lació de FFMPEG

Un cop instal·lat LAME, es pot procedir ja finalment a la instal·lació de Ffmpeg, i es farà seguint els següents passos:

• Per a tal propòsit es començarà creant un directori de treball, igual que en el cas anterior sobre la instal·lació de LAME, amb el nom de ffmpeg. • Es pot descarregar la versió més actual de Ffmpeg via svn.

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg cd ffmpeg

En el nostre cas es va obtenir la revisió 26402.

• Per a acabar, s’actuarà de forma semblant al cas de LAME.

./configure --enable-libmp3lame --enable-shared --disable-mmx make sudo make install

El paràmetre ‘--enable-libmp3lame’ habilita al programa per a utilitzar els annexos de LAME

El paràmetre ‘--enable-shared’ li dona la ordre al compilador de construir libavformat, libavcodec i libavutils com biblioteques compartides.

Igual a aquests dos paràmetres, n’hi han molts més amb els que es pot instal·lar Ffmpeg per a donar-li funcions addicionals. Aquests son els principals per al seu correcte funcionament.

Així doncs, ja està instal·lat Ffmpeg. Es pot comprovar que s’hagi instal·lat correctament executant ffmpeg al terminal del equip, el qual hauria de retornar un missatge tal com el següent:

8

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers built on Nov 14 2012 13:18:33 with llvm_gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) configuration: --enable-libmp3lame --enable-shared --disable-mmx libavutil 50.36. 0 / 50.36. 0 libavcore 0.16. 1 / 0.16. 1 libavcodec 52.108. 0 / 52.108. 0 libavformat 52.93. 0 / 52.93. 0 libavdevice 52. 2. 3 / 52. 2. 3 libavfilter 1.74. 0 / 1.74. 0 libswscale 0.12. 0 / 0.12. 0 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

9 FFMPEG, software de programari lliure.

10

4 Còdecs utilitzats

Utilitzant la comanda ffmpeg -codecs apareixerà una llista amb tots els còdecs implementats a Ffmpeg.

La llibreria libavcodec és la que conté els codificadors i els descodificadors per als còdecs d’àudio o vídeo.

A continuació es poden veure per separat, quins d’aquests còdecs són de vídeo, quins d’àudio i inclús els dels subtítols. Amés, marcats en negreta, es veuran alguns dels còdecs més significatius.

4.1 Còdecs de vídeo implementats

Aquests son els còdecs de vídeo implementats a Ffmpeg:

4xm Pel·lícula 4X 8bps Vídeo QuickTime 8BPS FRWU Forward Uncompressed a64multi Charset multicolor per a Commodore 64 a64multi5 Charset multicolor per a Commodore 64, estès amb el 5è color (colram) aasc Autodesk RLE amv Vídeo AMV anm Deluxe Paint Animation ansi Art ASCII/ANSI asv1 Versió 1 de ASUS asv2 Versió 2 de ASUS aura Auravision AURA aura2 Auravision AURA 2 avs Vídeo AVS (Audio Video Standard) bethsoftvid Vídeo Bethesda VID bfi Brute Force & Ignorance binkvideo Vídeo Bink bmp Imatge BMP c93 Interplay c93 camstudio CamStudio camtasia Codec de captura de pantalla TechSmith cavs Vídeo AVS xinès cdgraphics Vídeo CD Graphics cinepak Cinepak cljr Cirrus Logic AccuPak

11 FFMPEG, software de programari lliure.

cyuv YUV (CYUV) de Creative dnxhd VC3/DNxHD dpx Imatge DPX dsicinvideo Vídeo CIN Delphine Software International dvvideo DV (vídeo digital) dxa Feeble Files/ScummVM DXA eacmv Vídeo CMV de eamad Vídeo Madcow de Electronic Arts eatgq Vídeo TGQ de Electronic Arts eatgv Vídeo TGV de Electronic Arts eatqi Vídeo TQI de Electronic Arts escape124 Escape 124 ffv1 Codec de vídeo #1 de FFmpeg ffvhuff Variant de FFmpeg de Huffyuv flashsv Vídeo Flash Screen flic Vídeo Autodesk Animator Flic flv Vídeo Flash (FLV) fraps Fraps gif GIF (Graphics Interchange Format) h261 H.261 h263 H.263 h263i H.263 de Intel h263p H.263+ / 2a versió de H.263 h264 H.264 / AVC/ MPEG-4 AVC/ MPEG-4 part 10 huffyuv Huffyuv / HuffYUV idcinvideo Vídeo id Quake II CIN iff_byterun1 IFF ByteRun1 iff_ilbm IFF ILBM indeo2 Indeo 2 de Intel indeo3 Indeo 3 de Intel indeo5 Vídeo interactiu Indeo 5 de Intel interplayvideo Vídeo Interplay MVE jpegls JPEG-LS kgv1 Vídeo de Kega Game kmvc Còdec de vídeo de Karl Morton lagarith Sense pèrdues de Lagarith ljpeg Sense pèrdues JPEG loco LOCO mdec MDEC de Sony PlayStation (descodificador de moviment) mimic Mimic mjpeg MJPEG (JPEG en moviment) mjpegb MJPEG-B de Apple mmvideo Vídeo MM de American Laser Games motionpixels Vídeo de Píxels en moviment mpeg1video Vídeo MPEG-1

12

mpeg2video Vídeo MPEG-2 mpeg4 2a part de MPEG-4 mpegvideo Vídeo MPEG-1 msmpeg4 3a versió variant de Microsoft de la 2a part de MPEG-4 msmpeg4v1 1a versió variant de Microsoft de la 2a part de MPEG-4 msmpeg4v2 2a versió variant de Microsoft de la 2a part de MPEG-4 msrle RLE de Microsoft msvideo1 Vídeo 1 de Microsoft mszh LCL (Llibreria de còdecs sense pèrdues) MSZH nuv Vídeo Nuppel/RTJPEG pam Imatge PAM (AnyMap portàtil) pbm Imatge PBM (BitMap portàtil) pcx Imatge PC Paintbrush PCX pgm Imatge PGM (GrayMap portàtil) pgmyuv Imatge PGMYUV (GrayMap YUV portàtil) pictor Pintura Pictor/PC png Imatge PNG ppm Imatge PPM (PixelMap portàtil) ptx Imatge PTX V.Flash qdraw QuickDraw de Apple qpeg QPEG de Q-team qtrle Vídeo QuickTime Animation (RLE) r10k Còdec AJA Kona de 10 bits RGB r210 RGB de 10 bits descomprimit rawvideo Vídeo raw rl2 Vídeo RL2 roqvideo Vídeo id RoQ rpza Vídeo QuickTime (RPZA) rv10 Realvideo 1.0 rv20 Realvideo 2.0 rv30 Realvideo 3.0 rv40 Realvideo 4.0 sgi Imatge SGI smackvid Vídeo Smacker smc Gràfics QuickTime (SMC) snow Snow sp5x JPEG Sunplus (SP5X) sunrast Imatge Sun Rasterfile svq1 Sorenson Vector Quantizer 1 svq3 Sorenson Vector Quantizer 3 targa Imatge Truevision Targa theora Theora thp Vídeo THP de Nintendo Gamecube tiertexseqvideo Vídeo SEQ de Tiertex Limited tiff Imatge TIFF

13 FFMPEG, software de programari lliure.

tmv 8088flex TMV truemotion1 Duck TrueMotion 1.0 truemotion2 Duck TrueMotion 2.0 txd Imatge Renderware TXD (Diccionari de textures) ultimotion Ultimotion de IBM v210 4:2:2 de 10 bits descomprimit v210x 4:2:2 de 10 bits descomprimit vb Beam Software VB vc1 SMPTE VC-1 vcr1 ATI VCR1 vmdvideo Vídeo VMD de Sierra vmnc Còdec de pantalla VMware/ Vídeo VMware vp3 On2 VP3 vp5 On2 VP5 vp6 On2 VP6 vp6a On2 VP6 (versió Flash, amb canal alfa) vp6f On VP6 (versió flash) vp8 On2 VP8 vqavideo Vídeo VQA de Weswood Studios (Vector Quantized Animation) wmv1 Versió 7 de Windows Media wmv2 Versió 8 de Windows Media wmv3 Versió 9 de Windows Media wnv1 WNV1 de Winnov xan_wc3 Wing Commander III xl Vídeo XL de Miro yop Vídeo YOP de Psygnosis zlib ZLIB LCL (llibreria de còdecs de sense pèrdues) zmbv Zip Motion Blocks Video

14

4.2 Còdecs d’àudio implementats

Aquests son els còdecs d’àudio implementats a Ffmpeg:

8svx_exp Exponencial 8SVX 8svx_fib Fibonacci 8SVX aac Codificació avançada d’àudio aac_latm AAC LATM (Codificació d’àudio avançada LATM syntax) aasc RLE Autodesk ac3 ATSC A/52A (AC-3) ac3_fixed ATSC A/52A (AC-3) adpcm_4xm Pel·lícula 4X ADPCM adpcm_adx SEGA CRI ADX ADPCM adpcm_ct ADPCM de Creative Technology adpcm_ea ADPCM de Electronic Arts adpcm_ea_maxis_xa ADPCM XA CDROM Maxis de Electronic Arts adpcm_ea_r1 ADPCM R1 de Electronic Arts adpcm_ea_r2 ADPCM R2 de Electronic Arts adpcm_ea_r3 ADPCM R3 de Electronic Arts adpcm_ea_xas ADPCM XAS de Electronic Arts adpcm_ima_amv ADPCM IMA AMV adpcm_ima_dk3 ADPCM IMA Duck DK3 adpcm_ima_dk4 ADPCM IMA Duck DK4 adpcm_ima_ea_eacs ADPCM IMA EACS de Electronic Arts adpcm_ima_ea_sead ADPCM IMA SEAD de Electronic Arts adpcm_ima_iss ADPCM IMA ISS de Funcom adpcm_ima_qt ADPCM IMA de QuickTime adpcm_ima_smjpeg ADPCM IMA SDL MJPEG de Loki adpcm_ima_wav ADPCM IMA WAV adpcm_ima_ws ADPCM IMA de Westwood adpcm_ms ADPCM de Microsoft adpcm_sbpro_2 ADPCM Pro 2-bit de Sound Blaster adpcm_sbpro_3 ADPCM Pro 2.6-bit de Sound Blaster adpcm_sbpro_4 ADPCM Pro 4-bit de Sound Blaster adpcm_swf ADPCM Flash de Shockwave adpcm_thp ADPCM THP de Nintendo Gamecube adpcm_xa ADPCM CDROM XA adpcm_yamaha ADPCM de Yamaha alac ALAC (Apple Lossless Audio Codec) als Codificació d’àudio sense pèrdues (ALS) MPEG-4 amrnb Multi-Rate adaptatiu de banda estreta amrwb Multi-Rate adaptatiu de banda ample ape Monkey's Audio atrac1 Atrac 1 (Codificació acústica adaptativa de TRansform)

15 FFMPEG, software de programari lliure.

atrac3 Atrac 3 (3a Codificació acústica adaptativa de TRansform) binkaudio_dct Bink Audio (DCT) binkaudio_rdft Bink Audio (RDFT) cook COOK dca DCA (DTS Coherent Acoustics) dsicinaudio Àudio CIN de Delphine Software International eac3 ATSC A/52B (AC-3, E-AC-3) flac FLAC (Codificador d’àudio lliure de pèrdues) g722 G.722 ADPCM g726 G.726 ADPCM gsm GSM gsm_ms Variant GSM de Microsoft imc IMC (Codificador de música de Intel) interplay_dpcm Interplay DPCM libmp3lame MP3 de libmp3lame (MPEG audio layer 3) mace3 MACE (Compressió/Expansió d’àudio de Macintosh) 3:1 mace6 MACE (Compressió/Expansió d’àudio de Macintosh) 6:1 mlp MLP (Empaquetament sense pèrdues de Meridian) mp1 MP1 (MPEG audio layer 1) mp1float MP1 (MPEG audio layer 1) mp2 MP2 (MPEG audio layer 2) mp2float MP2 (MPEG audio layer 2) mp3 MP3 (MPEG audio layer 3) mp3adu ADU (Unitat d’aplicació de dades) MP3 (MPEG audio layer 3) mp3adufloat ADU (Unitat d’aplicació de dades) MP3 (MPEG audio layer 3) mp3float MP3 (MPEG audio layer 3) mp3on4 MP3onMP4 mp3on4float MP3onMP4 mpc7 Musepack SV7 mpc8 Musepack SV8 nellymoser Nellymoser Asao pcm_alaw Llei A PCM pcm_bluray PCM signat de 16|20|24 bits big-endian per Blu-ray media pcm_dvd PCM signat de 20|24 bits big-endian pcm_f32be PCM punt flotant de 32 bits big-endian pcm_f32le PCM punt flotant de 32 bits little-endian pcm_f64be PCM punt flotant de 64 bits big-endian pcm_f64le PCM punt flotant de 64 bits little-endian pcm_lxf PCM signat planar de 20 bits little-endian pcm_mulaw PCM llei Mu pcm_s16be PCM signat de 16 bits big-endian pcm_s16le PCM signat de 16 bits little-endian pcm_s16le_planar PCM planar de 16 bits little-endian pcm_s24be PCM signat de 24 bits big-endian pcm_s24daud PCM àudio D-Cinema signat de 24 bits

16

pcm_s24le PCM signat de 24 bit little-endian pcm_s32be PCM signat de 32 bits big-endian pcm_s32le PCM signat de 32 bits little-endian pcm_s8 PCM signat de 8 bits pcm_u16be PCM sense signar de 16 bits big-endian pcm_u16le PCM sense signar de 16 bits little-endian pcm_u24be PCM sense signar de 24 bits big-endian pcm_u24le PCM sense signar de 24 bits little-endian pcm_u32be PCM sense signar de 32 bits big-endian pcm_u32le PCM sense signar de 32 bits little-endian pcm_u8 PCM sense signar de 8 bits pcm_zork PCM Zork qcelp QCELP / PureVoice qdm2 QDesign codificador de musica 2 real_144 Codificador RealAudio 1.0 (14.4K) real_288 RealAudio 2.0 (28.8K) roq_dpcm DPCM id RoQ shorten Shorten sipr SIPR de RealAudio smackaud Àudio Smacker sol_dpcm DPCM Sol sonic Sonic sonicls Sonic sense pèrdues truehd TrueHD truespeech DSP de TrueSpeech tta True Audio (TTA) twinvq VQF TwinVQ vmdaudio VMD àudio de Sierra vorbis Vorbis wavpack WavPack wmapro Àudio 9 professional de Windows Media wmav1 Àudio 1 de Windows Media wmav2 Àudio 2 de Windows Media wmavoice Àudio Voice de Windows Media ws_snd1 Àudio de Westwood (SND1) xan_dpcm DPCM Xan

17 FFMPEG, software de programari lliure.

4.3 Còdecs de subtítols implementats

Aquests son els còdecs de subtítols implementats a Ffmpeg:

ass Subtítols de Advanced SubStation Alpha dvbsub Subtítols DVB dvdsub Subtítols DVD pgssub Seqüència de presentació gràfica de subtítols HDMV srt Subtítols SubRip xsub Subtítols DivX (XSUB)

4.4 Característiques dels còdecs

Als punts anteriors, on es mostren els còdecs amb que treballa Ffmpeg es poden veure alguns marcats en negreta els quals son alguns dels més significatius. A continuació es mostra algunes de les característiques d’aquests còdecs.

4.4.1 Còdecs de vídeo

Un còdec de vídeo és un tipus de còdec que permet comprimir i descomprimir vídeo digital. Normalment, els algoritmes de compressió empleats comporten una pèrdua d’informació.

El propòsit d’aquests còdecs és poder reduir el volum que poden arribar a ocupar un arxiu de vídeo.

Existeix un complicat equilibri entre la qualitat de vídeo, la quantitat de dades necessàries per a representar-lo, la complexitat dels algoritmes de codificació i descodificació, la robustesa enfront a les pèrdues de dades i errors, la facilitat de edició, la possibilitat d’accedir directament als frames, i d’altres factors.

Tot seguit es descriuen algunes de les característiques principals d’alguns dels còdecs de vídeo més significatius.

Cinepak: Cinepak està basat en un vector de quantificació que és significativament diferent del algoritme de la transformada discreta del cosinus, DCT, utilitzat per nombrosos còdecs de vídeo actuals (en particular la família de còdecs MPEG i la de JPEG). La seva composició permet implementar-lo en CPU’s de rendiment relativament lent (el vídeo en Cinepak treballa inclús amb una freqüència de 25 MHz utilitzat per consoles com la Sega CD o altres models com el de Motorola 68030), tot i així tendeix a bloquejar-se a baixos bitrates.

18

Cinepak divideix el vídeo en key images i intra-code images. Cada imatge es divideix en un nombre de bandes horitzontals que tenen individualment una paleta de 256 colors que es transfereixen a les key images segons la necessitat de cada fotograma. Cada banda es subdivideix en blocs de píxels de 4x4. El compressor utilitza el vector de quantificació per a determinar quina de les bandes de colors és la millor elecció per a cada bloc. Després d’aquest procés codifica grups de blocs ja sigui en grups d’un byte de color o dos de color més un vector de 16 bits que determina a quin píxel s’aplica el color.

La velocitat de transmissió de dades pot ser controlada dins d’un rang estret ajustant la velocitat de fotogrames clau i dels intra-coded frames que permet, alhora, ajustar l’error en cada bloc i el bloc d’execució.

H.261: H.261 és un estàndard de la ITU. Originalment dissenyat per a la transmissió a través de línies RDSI en el que les ratios de dades són múltiples de 64 kbits/s. Forma part de la família H.26x, estàndards de codificació de vídeo del ITU-T VCEG. El algoritme de codificació va ser dissenyat per a ser capaç d’operar a taxes de bits de 40 Kbits/s, 2 Mbits/s.

Suporta dos mides de fotograma de vídeo: CIF amb una resolució de 352x288, i QCIF amb una resolució de 176x144 utilitzant un esquema de mostreig de 4:2:0.

H.263: El estàndard H.263 es basa en tècniques comuns de compressió de vídeo, com son la compressió espacial, compressió temporal, predicció i compressió de moviment.

Aquest estàndard suporta 5 formats estandarditzats d’imatges, sub-QCIF, QCIF, CIF, 4CIF i 16CIF, utilitzant un esquema de mostreig 4:2:2.

H.263 suporta la predicció entre imatges (interpicture coding) el qual està basat en la predicció i compensació de moviment, en aquest mode de funcionament només es codifica el frame de error de predicció. Això consisteix en pensar que els píxels de la imatge actual son producte del moviment d’ells dins d’una imatge anterior.

H.264: H.264 o MPEG-4 part 10 és una norma que defineix un còdec de vídeo d’alta compressió desenvolupada conjuntament per el ITU-T VCEG i el ISO/IEC MPEG. La intenció del projecte H.264/AVC va ser la de crear un estàndard capaç de proporcionar una bona qualitat de imatge amb taxes binàries notablement inferiors als estàndards previs (MPEG-2, H.262 o MPEG-4 part2), amés de no incrementar la complexitat del seu disseny.

H.264 té 11 nivells o graus de capacitat per a limitar els requisits de rendiment, ample de banda i memòria. Cada nivell defineix la freqüència de bits i la freqüència de codificació en macro-blocs per segon per a resolucions que van de QCIF a HDTV i més enllà. Quant major és la resolució, major és el nivell requerit.

19 FFMPEG, software de programari lliure.

Segons quin sigui el perfil de H.264, el codificador pot utilitzar diferents tipus de fotogrames (imatges estàtiques); fotogrames I, fotogrames P i fotogrames B.

Un fotograma I és una imatge autònoma que es pot codificar de forma independent sense fer referència a altres imatges. La primera imatge d’una seqüència de vídeo és sempre un fotograma I.

Un fotograma P fa referència a parts de fotogrames I o P anteriors per a codificar el fotograma.

Un fotograma B és un fotograma que fa referència tant a fotogrames anteriors com a posteriors tal i com es pot observar a la Figura 2.

Figura 2. Seqüència típica amb fotogrames I, B i P

Quan un descodificador de vídeo restaura un vídeo descodificant la transmissió de bits fotograma a fotograma, la descodificació ha de començar sempre per un fotograma I. Els fotogrames P i B, en cas d’utilitzar-se, s’han de descodificar junt als fotogrames de referència.

Amb el format MJPEG es codificarien i enviarien les tres imatges de la següent seqüència de la Figura 3 com a imatges separades i úniques, fotogrames I, independents entre si.

Figura 3. Codificació d'una seqüència amb MJPEG.

En canvi, amb la codificació diferencial, la utilitzada en la major part de estàndards de compressió, H.264 inclòs, tan sols es codifica sencera la primera imatge (fotograma I), en les

20

dos imatges següents (fotogrames P), existeixen referències a la primera imatge en el que es refereix a elements estàtics, com la casa, mentre tant sols es codifiquen parts mòbils, com l’home que corre, utilitzant vectors de moviment i reduint així la quantitat de informació que s’envia i s’emmagatzema. En la Figura 4 es pot veure la informació transmesa en color verd i en color taronja la que no es transmet.

Figura 4. Codificació d'una seqüència amb H.264

Mjpeg: MJPEG (JPEG en moviment) és un format de compressió de vídeos digitals on cada marc o frame de la seqüència de vídeo es comprimeix per separat com si es tractés d’una imatge JPEG. A diferència del MPEG-2, no existeix un estàndard que especifiqui clarament les característiques del M-JPEG.

Utilitza codificació intra-frame, molt similar als frames I, però no utilitza predicció inter-frame. Això dona com a resultat una pèrdua de capacitat de compressió, però facilita la edició de vídeo, donat a que tots els frames son I i no P o B, que tant sols inclouen informació d’estimació de moviment. És a dir, la capacitat de compressió és independent de la quantitat de moviment en la escena al no disposar d’aquest predicció temporal.

És per això per el que és el estàndard utilitzat a DV i, en general, gravació de vídeo digital i sistemes d’edició no lineal. També s’utilitza en videoconferència.

El bit rate està al voltat d’uns 29 Mbits, que és d’una gran qualitat, però implica mides d’arxiu excessivament grans.

Mpeg1video: MPEG és un grup de estàndards de codificació d’àudio i vídeo.

El estàndard MPEG-1 està basat en l’algoritme de compressió de imatge fixe JPEG però s’aprofita de la alta redundància temporal entre quadres consecutius per a millorar la taxa de compressió.

Els requeriments de capacitat de edició total i accés aleatori van conduir a la introducció de frames codificats completament com intraframes, de forma periòdica en la seqüència de bits codificada.

21 FFMPEG, software de programari lliure.

La codificació d’aquests frames amb codificació intraframes consistia en gran part en el estàndard JPEG. Per a compensar la reducció del factor de compressió, degut a la introducció periòdica de imatges intra-codificades, es va introduir la ‘predicció bidireccional’.

La predicció bidireccional realitza el procés de estimació de moviment dos vegades, una en una imatge passada i una altre en una imatge futura de manera que obté dos vectors de moviment i dos prediccions per a cada macrobloc.

El estàndard va ser finalment dissenyat per a aconseguir compressions òptimes en el rang entre 1 i 1,5 Mbps, per a seqüències de vídeo progressiu en color (MPEG 1 no suporta vídeo entrellaçat), tant per a sistemes NTSC com PAL, amb format de mostreig 4:2:0 i un espai de colors YCbCr.

Mpeg2video: Amb una qualitat superior a MPEG-1, MPEG-2 va ser universalment acceptat per a transmetre vídeo digital comprimit amb velocitats majors de 1 Mb/s aproximadament. Amb MPEG-2 es poden aconseguir ratios elevats de fins a 100:1, depenent de les característiques del propi vídeo. MPEG-2 normalment defineix dos sistemes de capes, el flux de programa i el flux de transport.

S’utilitza un i l’altre però no els dos alhora. El flux de programa funcionalment és similar al sistema MPEG-1. La tècnica d’encapsulat i multiplexació de la capa de compressió produeix paquets grans i de varies mides.

Els paquets grans produeixen errors aïllats i incrementen els requeriments de buffering en el receptor/descodificador per a multiplexar les seqüències de bits. En contraposició el flux de transport consisteix en paquets fixes de 188 bytes el que redueix el nivell de errors ocults i els requeriments del buffering receptor.

La sintaxi de MPEG-2 té dos categories. Sintaxi no escalable la qual inclou la sintaxi de MPEG-1 amb extensions addicionals per a suportar vídeo entrellaçat, i sintaxi escalable, la qual permet la codificació per capes de la senyal de vídeo i es descodifica la capa bàsica per a una qualitat baixa i després les altres capes si es vol per a augmentar la qualitat.

MPEG-2 és un estàndard de compressió amb pèrdues, basat en la compressió de moviment, amb estimació de moviment endavant, enrere o interpolada, transformada DCT, quantificació, RLE i Huffman.

En el mode de sintaxi escalable, la capa bàsica d’un senyal de vídeo codificada amb MPEG-2 podria ser descodificada amb un descodificador MPEG-1.

Mpeg4 part 2: MPEG-4 Part 2 (H.263) és una tècnica de compressió de vídeo desenvolupada per MPEG. És un estàndard de compressió basat en la DCT, similar a estàndards anteriors com MPEG-1 i MPEG-2.

22

Per a concretar els diversos rangs d’aplicació del estàndard, des de baixa qualitat, com càmeres de baixa resolució, fins a televisió d’alta definició i els DVD, les diferents eines de codificació del estàndard s’agrupen, segons les seves característiques, en perfils i nivells. La part 2 de MPEG-4 té uns 21 perfils, entre els que es troben: Simple, Advanced Simple, Main, Core, Advanced Coding Efficiency, Advanced Real Time Simple, etc. Els perfils més utilitzats son els de Advanced Simple i Simple, que és una part del anterior. La majoria dels plans de compressió estandarditzen la trama de bits, i implícitament el descodificador, deixant el disseny del codificador a implementacions individuals. D’aquesta manera, les implementacions del perfil Advanced Simple són totes tècnicament iguals en el costat del descodificador.

El perfil Simple Profile està pensat per a situacions en les que son necessaris un bitrate baix i una baixa resolució, impostos per les condicions en les que s’aplica el estàndard, com l’ample de banda de la xarxa, el espai d’emmagatzematge del dispositiu, etc. Alguns exemples els trobem en els telèfons mòbils o alguns sistemes de videoconferència.

Les característiques tècniques més notables del Advanced Simple Profile, similar al H.263, en comparació amb el Simple Profile, són:

El suport de quantificació i entrellaçat MPEG han sigut dissenyats de la mateixa manera que ho està la Part 2 de MPEG-2. El suport per a imatges B, també, s’ha desenvolupat igual que en el H.263v2 i en la Part 2 de MPEG-2. La compensació de moviment en Quarter Pixel és una innovació, i s’ha inclòs més tard en la Part 10 de MPEG-4 i VC-1. Algunes implementacions prescindeixen del ús d’aquesta característica, perquè té efectes negatius sobre la velocitat i no sempre és beneficiós per a la qualitat del vídeo. La característica de compensació global de moviment no apareix implementada avui en dia en la majoria de les aplicacions, tot i que el estàndard oficial requereix que el descodificador la suporti. La major part de codificadors tampoc la implementa, i alguns experts opinen que aquest complement no proporciona cap benefici a la compressió. La utilització de la compensació global de moviment en el perfil té un impacte perjudicial en la velocitat i afegeix una excessiva complexitat a la implementació.

Svq1: SVQ1 (SVQ #1) s’utilitza principalment per a codificar vídeo en arxius Quicktime. El algoritme utilitza quantificació vectorial adaptativa multi-etapa amb eliminació mitja i compensació de moviment per tal d’aconseguir la seva compressió.

SVQ1 opera sobre blocs de vectors de píxels. Al nivell més alt, el algoritme trenca una imatge en blocs de 16x16 píxels, o vectors de 256 píxels. Per a cada vector, el codificador realitza una cerca de moviment, la eliminació mitja, i una busca multi-etapa de codebook a través d’una sèrie de codebooks pre-definits. Si el codificador troba una coincidència per al vector després d’una o més d’aquestes operacions, llavors s’envia el bit de codificació apropiat per a aquest vector. Sinó, el bloc 16x16 es divideix en 2 blocs de 16x8 (vectors de 128 píxels) i es repeteix la mateixa operació (menys la busca de moviment, que tan sols opera en el nivell de vector 16x16). SVQ1 opera en 6 mides de bloc, 16x16, 16x8, 8x8, 8x4, 4x4 i 4x2.

Si el codificador ha de dividir un bloc 4x4 en dos blocs 4x2, el bloc no es pot subdividir i ha de ser codificat utilitzant la mitja i la eliminació mitja i una combinació de codebooks de vectors.

23 FFMPEG, software de programari lliure.

El mètode de codificació SVQ1 utilitza els 3 tipus de frames, I, P i B. No obstant, els frames B de SVQ1 són diferents als frames B de MPEG en el sentit de que són unidireccionals i no bidireccionals.

Theora: Theora és un mètode de compressió de vídeo amb pèrdues. Aquest és basat en el còdec de vídeo VP3 produït per On2 Technologies.

Theora actualment és compatible amb vídeo progressiu de dimensions arbitràries amb un frame rate constant en un de varis espais de color YCbCr. Suporta tres formats de mostreig de croma, 4:2:0, 4:2:2 i 4:4:4.

El format Theora no és compatible amb el entrellaçat (tot i que està previst per a una versió futura), frame variable, profunditat de bits majors a 8 per component, ni als espais de color alternats com RGB o espais arbitraris multi-canal.

Així doncs, és un còdec de transformació basat en blocs de 8x8 que utilitza la transformada del cosinus discreta i la compensació de moviment. Això el col·loca en la mateixa classe que MPEG-1, MPEG-2, MPEG-4 i H.263. No obstant, els detalls de com són organitzats els blocs individuals i com són emmagatzemats en el bitstream els coeficients DCT es diferencien substancialment d’aquests còdecs.

Theora suporta tan sols frames Intra (frames I en MPEG) i frames Inter (frames P en MPEG). No existeix un equivalent als frames bi-predictius (frames B).

VP3: El còdec ‘On2 Truemotion VP3’ va néixer com una tecnologia propietària de On2 Technologies per a produir vídeo comprimit d’alta qualitat reproduïble en qualsevols ordinador. Actualment s’ha transformat en el projecte de codi obert ‘Theora’ que té com a finalitat integrar la tecnologia de compressió VP3 en el còdec multimèdia Ogg Vorbis.

Aquest còdec es va dissenyar pensant sobretot en utilitzar-lo per a streaming (visionat on-line per internet), tot i que es pot utilitzar sense problemes sobre qualsevol altre mitjà. Aconsegueix una qualitat molt acceptable amb un consum baix de la CPU.

El primer que s’ha de entendre sobre el mètode VP3 és que codifica els 3 plans al revés, és a dir, les dades es codifiquen de baix a dalt en comptes que de dalt a baix com en molts còdecs de vídeo.

VP3 codifica un frame I de vídeo primerament separant cadascun dels 3 plans (Y,U i V) en una sèrie de blocs de 8x8 anomenats fragments. Vp3 també treballa amb superblocs de 16 encapsulant fragments disposats en una matriu de 4x4, amés de macroblocs comprenent 4 blocs del pla Y disposats en una matriu de 2x2, un bloc del pla U i un del V. Mentre que un fragment o superbloc només s’aplica a un sol pla, un macrobloc s’estén sobre els 3 plans.

Vp3 comprimeix frames mitjançant la transformació de cada fragment amb la transformada del cosinus discreta. Cada mostra és quantificada i el coeficient DC es redueix a través de

24

DPCM utilitzant una combinació de coeficients DC a partir de fragments predictors. Llavors, el coeficient DC de cada fragment és codificat al bitstream de sortida, seguit del primer coeficient AC de cada fragment, a continuació, el segon coeficient AC, i així successivament.

Un frame P, o frame predictiu, és naturalment més complicat. Mentre que hi ha tan sols un mode de codificació disponible per a un frame I, existeixen 8 modes de codificació que VP3 pot escollir per a un macrobloc d’un frame P. Un d’aquests 8 modes és el mateix que el utilitzat per a codificar els frames I, la resta de modes implica a codificar un fragment, ja sigui del frame anterior o del frame I, a partir de la mateixa coordenada o des de la mateixa coordenada més un vector de moviment.

Tots els modes de codificació de macroblocs i vectors de moviment es codifiquen en un frame P.

WMV: WMV és un nom genèric que es dona al conjunt d’algoritmes de compressió ubicats en el set propietari de tecnologies desenvolupades per Microsoft. Des de la versió 7 (WMV1), Microsoft ha utilitzat la seva pròpia versió no estandarditzada de MPEG-4. El vídeo sovint es combina amb so en format WMA.

El vídeo WMV s’empaqueta normalment en un contenidor multimèdia, tals com poden ser AVI o ASF.

El format WMV inclou certes característiques relatives a la utilització de Gestió de Drets Digitals (DRM).

La versió 9 del format utilitzat per Microsoft (WMV3) és utilitzada en la distribució de vídeo d’alta definició sobre DVD estàndard en un format que Microsoft ha denominat WMV HD.

25 FFMPEG, software de programari lliure.

4.4.2 Còdecs d’àudio

Al igual que passa amb els còdecs de vídeo, els còdecs d’àudio inclouen un conjunt d’algoritmes que permeten codificar i descodificar les dades auditives, el qual significa reduir la quantitat de bits que ocupa l‘arxiu d’àudio.

Els còdecs d’àudio es caracteritzen especialment per els següents paràmetres:

• Número de canals: depèn del número de senyals d’àudio simultanis que conté la seqüència. • Freqüència de mostreig: determina la qualitat percebuda. Donat que el sistema auditiu no percep freqüències superiors a 20 KHz i que la freqüència de mostreig ha de complir el criteri de Nyquist, mai s’utilitzen freqüències de mostreig superiors a 44.1 KHz. • Freqüència de bits per mostra: determina la precisió amb la que es reprodueix el senyal original i el seu rang dinàmic. • Tipus de compressió: pot ser compressió amb pèrdues (lossy) o sense pèrdues (lossless). • Taxa de bits: determina el número de bits de informació necessaris per unitat de temps.

AAC: AAC és un format de compressió de dades desenvolupat per el institut Fraunhofer.

Com el format MP3, el format AAC aplica una forma de compressió denominada ‘compressió amb pèrdues’, la qual elimina algunes dades d’àudio tals com freqüències inaudibles.

AAC utilitza una codificació variable de la freqüència de bits (VBR), un mètode de codificació que adapta el número de bits utilitzats per segon per a codificar dades d’àudio, en funció de la complexitat de la transmissió d’àudio en un moment determinat. L’algoritme que s’utilitza té un rendiment superior al del MP3, que produeix una millor qualitat en arxius petits i requereix menys recursos dels sistema per a codificar i descodificar.

A diferència dels dos canals (estèreo) que admet com a màxim MP3, AAC permet sons polifònics amb un màxim de 48 canals, Amés, també ofereix freqüències de mostreig que varien de 8 KHz als 192 KHz (amb MP3 varien dels 8 als 48 KHz).

FLAC: FLAC és un format de compressió d’àudio sense pèrdues de codi obert desenvolupat per Xiph.org que disminueix la mida del arxiu fins a un 50% mantenint la fidelitat de la font original.

Basa el seu funcionament en algoritmes de predicció lineal per a reduir les mostres a números no correlatius que s’ordenen segons la codificació de Golomb-Rice (que consisteix en ordenar

26

series de números posant primer els més comuns). Aquestes són més fàcils de llegir, i redunden en una reducció de la mida final del arxiu.

FLAC pràcticament admet freqüències de mostreig sense límits. Un MP3 està limitat a 44100 Hz i 16 bits, mentre que un FLAC pot reproduir a 24 bits i a freqüències superiors, com 48000 Hz, 96000 Hz, o 192000 Hz. Amés admet fins a 8 canals.

MP3: També anomenat MPEG-1 Audio Layer 3, és un format d’àudio digital estàndard comprimit amb pèrdua, la pèrdua de informació del format MP3 no pertany al rang de freqüències audibles pel que no distingirem la diferència entre un arxiu d’àudio sense compressió i un arxiu MP3.

El format d’àudio MP3 permet seleccionar la qualitat del àudio que anem a comprimir, doncs podem seleccionar la compressió entre els 8 Kbps i els 320 Kbps tenint en compte que quan major sigui la transmissió de dades (Kbps), major espai ocuparà.

La freqüència de mostreig del MP3 es troba entre el rang de 16 Hz i els 48 KHz, i tan sols suporta 2 canals (estèreo).

Vorbis: Ogg Vorbis és un format de compressió que redueix algunes de les dades d’àudio, ‘compressió amb pèrdues’ (lossy compression).

Ogg Vorbis utilitza una codificació VBR, un mètode de codificació que modifica el número de bits utilitzats per segon per a codificar dades d’àudio, en funció de la complexitat de la transmissió d’àudio en un moment determinat. És a dir, que la quantitat de dades que s’utilitzarà per a codificar un fragment determinat d’àudio dependrà del què estigui codificant en aquell moment, amb altres paraules, no serà el mateix per a un silenci que per a un concert polifònic.

Vorbis pot gravar fins a 255 canals, i per tant reproduir-los en sistemes 5.1 o 7.1 per exemple. Aquest ofereix una millor fidelitat de so de la que pot oferir MP3, doncs la seva freqüència de mostreig va d’1 Hz als 200 KHz.

Wavpack: Desenvolupat per Microsoft i IBM, l’anomenat WAV és un dels actuals formats d’àudio digital que no posseeixen compressió de dades, per el que presenta una excel·lent qualitat.

El format WAV és un dels formats més utilitzats per el àmbit professional, ja que si el so captura amb paràmetres de 44100 Hz i a 16 bits, es pot obtenir la mateixa qualitat que en un CD.

El gran desavantatge d’aquest format és que la mida d’un arxiu amb format WAV és molt gran.

Aquest pot gravar fins a 16 canals amb una freqüència de mostreig que pot arribar als 13 MHz.

27 FFMPEG, software de programari lliure.

WMA: WMA és un format de compressió d’àudio amb pèrdues, tot i que també s’ha desenvolupat de compressió sense pèrdues, propietat de Microsoft.

WMA mostreja a freqüència des de 8 a 96 KHz podent gravar fins a 8 canals, o fins a 6 canals en el cas del WMA sense pèrdues.

La seva taxa de bits pot anar dels 4 als 768 Kbps, o sinó variable en el cas del WMA sense pèrdues.

WMA competeix amb MP3 (antic i bastant inferior tècnicament), i amb Ogg Vorbis (superior i lliure) utilitzant com a estratègia comercial la inclusió de suport en el reproductor Windows Media Player (inclòs al sistema Windows).

28

5 Paràmetres de FFMPEG

Abans de començar a utilitzar Ffmpeg, s’han de conèixer alguns detalls, tals com la seva sintaxi i les seves opcions i paràmetres disponibles.

La sintaxi general és la següent: ffmpeg [opcions globals] {[opcions arxiu entrada][‘-i’ arxiu entrada]} ... {[opcions arxiu sortida] arxiu sortida} ...

Totes les opcions d’arxius s’apliquen únicament al arxiu d’entrada o sortida que està just seguit de la opció.

Per exemple:

• Per ajustar el bitrate del vídeo de sortida a 64 Kbps/s: ffmpeg -i input.avi -b 64k output.avi

• Per forçar el framerate del arxiu de sortida a 24 fps: ffmpeg -i input.avi -r 24 output.avi

• Per a forçar el framerate del arxiu d’entrada (només vàlid per a formats raw) a 1 fps, i el framerate del arxiu de sortida a 24 fps: ffmpeg -r 1 -i input.m2v -r 24 output.avi

5.1 Opcions genèriques

A continuació, a la Taula 1, es poden observar algunes de les opcions de Ffmpeg informatives d’interès alhora d’utilitzar aquest programa.

Taula 1. Opcions genèriques de Ffmpeg

Opcions Funció -l Mostra la llicència -h , -help Mostra ajuda -version Mostra la versió instal·lada -formats Mostra els formats disponibles -codecs Mostra tots els còdecs de libavcodec -bsfs Mostra els filtres bitstream disponibles -protocols Mostra els protocols disponibles -filters Mostra els filtres de libavfilter -pix_fmts Mostra els formats de píxel disponibles

29 FFMPEG, software de programari lliure.

5.2 Opcions principals

Tot seguit, a la Taula 2, es poden veure els paràmetres més importants alhora d’utilitzar Ffmpeg.

Taula 2. Opcions principals de Ffmpeg

Opcions Funció -i nom_arxiu Indica que és l’arxiu de entrada. -y Sobreescriu els arxius de sortida sense preguntar. -n No sobreescriu els arxius de sortida si ja existeixen. -t duració Deix de escriure al fitxer de sortida quan arriba a la duració fixada per ‘duració’. Aquest pot ser un número en segons, o pot estar en format hh:mm:ss[.xxx] -fs tamany_límit Estableix el límit de la mida de l’arxiu de sortida, expressat en bytes. -ss posició Quan s’utilitza en un arxiu d’entrada (s’ha de ficar abans -i), busca en aquest arxiu la ‘posició’. Quan s’utilitza com una opció de sortida (abans del nom del arxiu de sortida), descodifica però ignora l’entrada fins a ‘posició’. És més lent però més precís. ‘Posició’ pot ser expressada en segons o en format hh:mm:ss[.xxx] -sameq Força a que l’arxiu de sortida mantingui la mateixa qualitat que l’arxiu d’entrada. -itsoffset offset Ajusta el temps d’offset d’entrada en segons (o en hh:mm:ss[.xxx]). El desplaçament s’afegeix a les marques de temps del arxiu d’entrada. -timestamp temps Estableix la data i la hora de gravació en l’arxiu de sortida. La sintaxis de ‘temps’ és: now|([(YYYY-MM-DD|YYYYMMDD)[T|t|]] ((HH:MM:SS[.m...])|(HHMMSS[.m...]))[Z|z])

Si el valor és ‘now’ es necessita la hora actual. La hora és la local a no ser que s’afegeixi ‘Z’ o ‘z’, en tal cas s’interpretarà com UTC. -dframes número Ajusta el número de frames de dades que es desitja gravar -stats Imprimeix el progrés i estadístiques de la codificació. Activat per defecte -debug_ts Imprimeix informació de marca de temps. Està desactivat per defecte. -attach nom_arxiu Afegeix un arxiu al arxiu de sortida. Això és compatible en pocs formats, com per exemple, fonts de Matroska utilitzades en subtítols.

30

5.3 Opcions de vídeo

A la Taula 3 següent, es mostren els paràmetres utilitzats per a treballar amb arxius de vídeo.

Taula 3. Opcions de vídeo de Ffmpeg

Opcions Funció -b bitrate Ajusta el bitrate del vídeo (en bits/s). -vframes número Ajusta el número de fotogrames per a gravar -r rate Ajusta el framerate (valor en Hz). Si s’utilitza aquesta opció com a paràmetre d’entrada, ignora les marques de temps del arxiu i sobreposa la constant ‘rate’ com a framerate. Com a paràmetre de sortida, duplica o elimina fotogrames de entrada per a assolir a la sortida els ‘rate’ de framerate -s mida Ajusta la mida del frame (‘WxH’) -aspect aspecte Ajusta la relació d’aspecte de pantalla del vídeo especificada per ‘aspecte’ -vf “filtre” Utilitza el filtre especificat entre cometes. -vn Desactiva la gravació de vídeo. -vcodec còdec Ajusta el còdec de vídeo indicat per ‘còdec’. (‘copy’ per a utilitzar el còdec de vídeo existent) -vlang codi Ajusta el codi d’idioma ISO 639 (3 lletres) de la seqüencia de vídeo actual. -pix_fmt format Estableix el format de píxels. Posant ‘list’ com a argument mostrarà una llista dels formats de píxel disponibles. -vdt n Descarta el threshold, és a dir, el llindar. -psnr Calcula el PSNR de trames comprimides -vstats Escriu les estadístiques de codificació del vídeo a un arxiu ‘vstats_HHMMSS.log’. -top n Top=1 / bottom=0 / auto=-1 primer camp. -qphist Mostra el histograma QP

31 FFMPEG, software de programari lliure.

5.4 Opcions d’àudio

En la Taula 4 s’hi descriuen els diferents paràmetres disponibles per a treballar amb arxius d’àudio.

Taula 4. Opcions d'àudio de Ffmpeg

Opcions Funció -ab bitrate Ajusta el bitrate indicat (en bits/s). -aq qualitat Ajusta la qualitat d’àudio (còdec específic). -ar freq Ajusta la freqüència de mostreig d’àudio a ‘freq’ [en Hz]. -ac canals Ajusta el número de canals d’àudio. -an Desactiva la gravació d’àudio. -acodec còdec Ajusta el còdec d’àudio. (‘copy’ per a utilitzar el còdec d’àudio existent) -vol volum Canvia el nivell de volum (amb el valor de 256 queda el volum igual, a mesura que s’augmenta, també distorsiona) -sample_fmt format Ajusta el format de mostreig. Si s’introdueix ‘list’ com a argument mostrarà tots els formats que suporta.

5.5 Opcions de subtítols

Tot seguit, en la Taula 5, es poden veure, encara que siguin pocs, els paràmetres disponibles alhora de treballar amb subtítols amb Ffmpeg.

Taula 5. Opcions de subtítols a Ffmpeg

Opcions Funció -sn Desactiva la gravació de subtítols. -scodec còdec Estableix el còdec dels subtítols. (‘copy’ per a utilitzar el còdec de subtítols existent) -slang codi Ajusta el codi d’idioma ISO 639 (3 lletres) a la seqüencia de subtítols actual. -spre preset Ajusta les opcions de subtítols al ‘preset’ indicat.

32

5.6 Filtres

Finalment, i per acabar amb aquest punt, a la

Taula 6 s’hi mostren alguns dels filtres més utilitzats per tal d’aconseguir efectes en els vídeos (tals com retallar parts específiques d’una imatge o fer que el vídeo vagi a ‘càmera lenta’).

Aquests filtres s’utilitzaran amb el paràmetre ‘–vf’ i posant el nom del filtre entre cometes.

Taula 6. Filtres de Ffmpeg

Filtre Funció copy Copia el vídeo d’entrada a la sortida sense canviar-hi res. crop Retalla una àrea específica del vídeo on s’ha de passar com a paràmetres l’amplada, l’altura i la posició de la cantonada esquerra superior del rectangle que retallarà la imatge [w:h:x:y]. drawbox Dibuixa una capsa de color al vídeo d’entrada. format Ajusta el format de píxel especificat al vídeo d’entrada. hflip Li dóna la volta horitzontalment al vídeo. pad Amplia el marc del vídeo per a poder adaptar-lo a algun altre format (com voler passar de 4:3 a 16:9). S’hi passa la mida del marc exterior i la posició on situarem el vídeo dins d’ell. Amés li podem especificar de quin color volem que pinti l’àrea ampliada. Per defecte, la posició serà la 0:0 i el color negre [w:h:x:y:color]. scale Escala el vídeo d’entrada a una mida ‘widht:height’ designada i/o converteix la imatge. setdar Ajusta la relació d’aspecte de la visualització del frame. setpts Ajusta PTS al frame del vídeo de sortida. Útil per a crear efectes de càmera lenta o ràpida. setsar Ajusta la relació d’aspecte del mostreig del píxel. settb Ajusta una base de temps per al enllaç de sortida. transpose Rota el vídeo de entrada. unsharp Enfoca o desenfoca el vídeo de entrada. vflip Li dóna la volta verticalment al vídeo. color Proveeix una entrada d’un color uniforme. La seva sintaxi és: [color[:mida[:rate]]]

33 FFMPEG, software de programari lliure.

34

6 Utilització de FFMPEG

Ara, un cop tot instal·lat i coneixent una mica les principals opcions disponibles, ja es pot començar a utilitzar Ffmpeg.

En els següents punts es podran veure exemples d’algunes de les funcions més útils del compressor.

6.1 Conèixer les característiques d’un arxiu

La majoria de vegades, per a treballar amb qualsevol arxiu, tant sigui vídeo o àudio, interessarà conèixer les seves característiques.

En aquest cas només s’hi passarà el paràmetre ‘-i’ indicant-li que és un arxiu de entrada, i el nom del arxiu.

ffmpeg -i video.mp4 ffmpeg -i audio.mp3

I això, el que retornarà, en el primer cas del nostre vídeo.mp4, serà el següent:

Duration: 00:01:56.83, start: 0.000000, bitrate: 580 kb/s Stream #0.0(eng): Video: h264, yuv420p, 480x272 [PAR 136:135 DAR 16:9], 453 kb/s, PAR 161:160 DAR 483:272, 24 fps, 24 tbr, 24 tbn, 48 tbc

Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 124 kb/s

Aquestes són algunes de les dades més significatives que ens retorna.

Es pot observar que es tracta d’un vídeo de gairebé 2 minuts i amb un bitrate de 580 Kb/s.

També es pot veure que el còdec del arxiu de vídeo és ‘h264’ amb una compressió ‘yuv420p’.

La seva resolució és de 480x272 i el seu framerate és de 24 fps.

Amés, també dona informació referent al àudio del arxiu tal com que és ‘aac’, estèreo, amb una freqüència de mostreig de 44100 Hz i utilitza un format de mostreig ‘s16’ amb un bitrate de 124 Kb/s.

35 FFMPEG, software de programari lliure.

I en el cas del arxiu d’àudio audio.mp3, ens mostra el següent:

Duration: 00:01:14.95, start: 0.000000, bitrate: 64 kb/s Stream #0.0: Audio: mp3, 48000 Hz, 2 channels, s16, 64 kb/s

En aquest cas, indica que és un ‘mp3’ d’una durada de més d’un minut, amb un bitrate de 64 Kb/s.

Té dos canals d’àudio, és a dir, és estèreo, i la seva freqüència de mostreig és de 48000 Hz.

6.2 Eliminar l’àudio d’un arxiu de vídeo

En el cas de que es desitgi treure el so d’un arxiu, és a dir, deixar-lo ‘mut’, s’utilitzarà el paràmetre ‘-an’.

ffmpeg -i videoin.avi -an videoout.avi

Amb això s’aconsegueix un arxiu de vídeo sense àudio, el qual també es pot comprovar tal i com s’ha fet en el punt anterior ‘Conèixer les característiques d’un arxiu’ on s’observarà que no mostra informació d’àudio.

6.3 Extreure l’àudio d’un arxiu de vídeo

Si el que es desitja és gravar l’àudio d’un vídeo en un arxiu apart, es podrà utilitzar el paràmetre ‘-vn’ el qual, el que fa simplement, no grava la informació de vídeo sobre l’arxiu de sortida.

ffmpeg -i videoin.avi -vn audioout.mp3

D’aquesta manera el que s’obté és un arxiu ‘audioout.mp3’ amb tota la informació d’àudio del arxiu d’entrada ‘videoin.avi’.

36

6.4 Unir vídeo i àudio

En aquest cas, per ajuntar un arxiu de vídeo sense àudio amb un altre arxiu d’àudio, només caldrà passar dos arxius d’entrada amb el paràmetre ‘-i’ i evidentment el arxiu de sortida.

ffmpeg -i videosenseaudio.avi -i audio.mp3 videoout.avi

S’ha de tenir en compte que si la durada d’un dels dos arxius és major que l’altre, en el moment en que finalitza un dels dos arxius s’obtindrà simplement un vídeo sense àudio, o l’àudio sense imatges. És a dir, la durada del arxiu resultant serà la mateixa que la del arxiu d’entrada amb més durada.

6.5 Especificar un còdec d’àudio

Per a que un arxiu multimèdia (compost per un arxiu de vídeo i un d’àudio) tingui una codificació d’àudio diferent, s’utilitzarà el paràmetre ‘-acodec’.

ffmpeg -i vídeo.mp4 -acodec libmp3lame videoout.avi

En aquest cas, hem agafat un arxiu compost per vídeo i àudio, on el seu còdec d’àudio era AAC:

Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 124 kb/s

I ara, utilitzant la llibreria LAME (que s’ha instal·lat addicionalment en el punt ‘3.1- Instal·lació de LAME’) per a poder treballar amb mp3, el nostre arxiu d’àudio tindrà unes característiques tals com les següents on es pot observar que el còdec d’àudio és mp3:

Stream #0.1: Audio: mp3, 44100 Hz, 2 channels, s16, 64 kb/s

37 FFMPEG, software de programari lliure.

6.6 Especificar un còdec de vídeo

Per a fer el mateix que en el punt anterior ‘Especificar un còdec d’àudio’, però aquest cop en comptes de en un arxiu d’àudio, en un de vídeo, el paràmetre que s’ha d’utilitzar que permet aquesta mateixa operació, però amb arxius de vídeo, és ‘-vcodec’.

ffmpeg -i videoin.avi -vcodec mpeg2video videoout.avi

Així doncs, el primer arxiu, ‘videoin.avi’, tenia aquestes característiques:

Stream #0.0: Video: mpeg4, yuv420p, 480x272 Stream #0.1: Audio: mp3, 44100 Hz, 2 channels, s16, 64 kb/s

I ara el segon, ‘videoout.avi’, té aquestes:

Stream #0.0: Video: mpeg2video, yuv420p, 480x272 Stream #0.1: Audio: mp2, 44100 Hz, 2 channels, s16, 64 kb/s

Tal i com es pot observar, l’arxiu manté les mateixes característiques que el primer, però simplement ha canviat el seu còdec de mpeg4 a mpeg2 en el nostre cas.

38

6.7 Canviar la resolució d’un vídeo

Suposem que tenim, per exemple, un vídeo amb una resolució de 800x600 i es vol passar-lo a una resolució de 320x240 (per a poder penjar-lo a ‘youtube’ per exemple), llavors s’ha d’utilitzar el paràmetre ‘-s’ el qual permet canviar la mida (resolució) del arxiu de vídeo tractat.

ffmpeg -i videoin.mpeg -s 320x240 videoout.flv

En aquest cas no hi ha gaire per explicar-hi, tant sols que ara el vídeo té menys resolució i per tant també ocupa menys espai.

Per a poder veure la diferència, a continuació, a la Figura 5 es pot veure una imatge del vídeo original (‘videoin.mpeg’) amb una resolució de 720x576.

Figura 5. Imatge original amb resolució 720x576

39 FFMPEG, software de programari lliure.

I aquesta, la Figura 6, és una imatge del vídeo resultant de la operació (‘videoout.flv’), on es pot observar perfectament que la seva resolució ha canviat.

Figura 6. Imatge resultant amb resolució 320x240

També es podria operar de forma inversa, és a dir, en comptes de convertir el vídeo a una resolució menor, convertir-lo a una major, però s’ha de tenir en compte que, evidentment, la qualitat no serà igual.

Per a definir la resolució que es desitja assignar al vídeo, també hi han disponibles les següents abreviacions de la Taula 7.

Taula 7. Abreviacions per a les resolucions.

Abreviació Resolució Abreviació Resolució Abreviació Resolució sqcif 128x96 qcif 176x144 cif 352x288 4cif 704x576 qqvga 160x120 qvga 320x240 vga 640x480 svga 800x600 xga 1024x768 uxga 1600x1200 qxga 2048x1536 sxga 1280x1024 qsxga 2560x2048 hsxga 5120x4096 wvga 852x480 wxga 1366x768 wsxga 1600x1024 wuxga 1920x1200 woxga 2560x1600 wqsxga 3200x2048 wquxga 3840x2400 whsxga 6400x4096 whuxga 7680x4800 cga 320x200 hd480 852x480 hd720 1280x720 hd1080 1920x1080

De tal manera, que la mateixa instrucció anterior es pot executar de la següent manera:

ffmpeg -i videoin.mpeg -s qvga videoout.flv

40

6.8 Limitar la durada o mida d’un arxiu

Per a limitar la durada d’un arxiu, és a dir, retallar-lo, s’utilitzarà el paràmetre ‘-t’, el qual pararà la gravació del arxiu al temps que se li determini. Com per exemple:

ffmpeg -i videoin.avi -t 10 videoout.avi ffmpeg -i videoin.avi -t 00:01:00 videoout.avi

En el primer cas, el resultat és un vídeo amb una duració de 10 segons.

En canvi, al segon, se li especifica el moment exacte que ha d’aturar la gravació amb un format ‘hh:mm:ss:[xxx]’. Nosaltres li hem indicat al primer minut.

Ara bé, si el que es desitja és una part concreta d’un arxiu, és a dir, d’un punt concret a un altre, es pot combinar el paràmetre anterior amb la opció ‘-ss’, la qual fa que comenci la reproducció des de un punt determinat del arxiu.

ffmpeg -i videoin.avi -ss 10 -t 10 videoout.avi ffmpeg -i videoin.avi -ss 00:01:00 -t 00:01:20 videoout.avi

En el primer exemple, s’ha generat un vídeo de 10 segons a partir del desè segon del original. I en el segon cas, utilitzant el format ‘hh:mm:ss’, s’ha creat un vídeo de 20 segons a partir del primer minut (00:01:00).

Si per altra banda, el que es desitja és limitar l’espai que ocupa al nostre disc, s’utilitzarà la comanda ‘-fs’.

ffmpeg -i videoin.avi -fs 500000 videoout.avi

El resultat d’aquesta comanda és un vídeo que ocupa 500 KB. Cal dir que això no redueix la qualitat del vídeo, simplement atura la gravació del arxiu de sortida quan arriba a la mida designada.

41 FFMPEG, software de programari lliure.

6.9 Canviar canals d’àudio de estèreo a mono

En el cas de que es desitgi canviar el número de canals d’àudio d’un arxiu, es pot utilitzar el paràmetre ‘-ac’ el qual ajusta el número de canals desitjat.

ffmpeg -i audioin.mp3 -ac 1 audioout.mp3

Així doncs, s’aconsegueix passar d’un arxiu d’àudio estèreo (‘audioin.mp3’) amb les següents característiques:

Stream #0.0: Audio: mp3, 48000 Hz, 2 channels, s16, 64 kb/s

A un arxiu d’àudio mono, és a dir d’un sol canal, (‘audioout.mp3’) amb les mateixes característiques que el anterior:

Stream #0.0: Audio: mp3, 48000 Hz, 2 channels, s16, 64 kb/s

Evidentment, si en comptes de treure-li canals d’àudio, s’intenten afegir-hi més, mostrarà missatges d’error ja que per a convertir l’àudio mono, tant sols ha sumat els canals esquerre i dret en un mateix, però si es vol passar d’un mono a un estèreo faltaran dades.

6.10 Obtenir una seqüència d’imatges a partir d’un vídeo

Aquesta opció permet obtenir els frames d’un vídeo en imatges. Al igual que si a un arxiu de vídeo es vol canviar el format només és necessari posar-li la extensió del tipus d’arxiu que es desitja al arxiu de sortida, en aquest cas, si es posa una extensió d’un arxiu d’imatge farà el mateix, ja que codifica l’arxiu de sortida fent un reconeixement de l’extensió.

ffmpeg -i videoin.avi imatge%d.jpg

D’aquesta manera amés, Ffmpeg canviarà ‘%d’ per una seqüència de números de tal forma que s’obtindran tantes imatges numerades (imatge1.jpg, imatge2.jpg,... imatgeN.jpg) com duri el vídeo.

42

6.11 Obtenir un vídeo a partir d’una seqüència d’imatges

En el cas anterior (al punt 6.10), s’obtenien seqüències d’imatges a partir d’un vídeo. Doncs ara es farà just el contrari, és a dir, a partir d’un conjunt d’imatges que hauran de estar ja enumerades i amb el mateix nom (imatge1.jpg, imatge2.jpg, ... imatgeN.jpg), s’obtindrà un vídeo de la següent manera:

ffmpeg -f image2 -i imatge%d.jpg videoout.avi

Amb la comanda ‘-f image2’ se li indica que el format del arxiu d’entrada seran imatges, i el %d, al igual que en el punt anterior, li indica que el programa ho ha de canviar per una seqüència de números consecutius.

No és necessari indicar-li fins a quin número arriba doncs, simplement quan no troba la imatge ‘N+1’ para.

6.12 Obtenir un GIF animat a partir d’un vídeo

Per a aconseguir un GIF animat, és a dir, una seqüència d’imatges animada, a partir d’un arxiu de vídeo. La forma de procedir, com sempre, serà molt senzilla i intuïtiva.

ffmpeg -i videoin.avi imatge.gif

No obstant, pot aparèixer el següent error:

ERROR: gif only handles the rgb24 pixel format. Use -pix_fmt rgb24.

El qual indica que el format GIF només suporta el format de píxel rgb24. Així doncs, per a solucionar-ho, s’utilitzarà el paràmetre, que ell mateix mostra just al final del missatge d’error, ‘-pix_fmt rgb24’.

ffmpeg -i videoin.avi -pix_fmt rgb24 imatge.gif

43 FFMPEG, software de programari lliure.

6.13 Extreure una imatge concreta d’un vídeo

Per a extreure un frame concret d’un arxiu de vídeo es pot fer de la següent manera:

ffmpeg -i videoin.mpeg -ss 50 -vframes 1 imatge.jpg

Tal com ja s’ha utilitzat anteriorment, amb el paràmetre ‘-ss’ es situa el vídeo on interessa, en el nostre cas als 50 segons (cal recordar que també es pot utilitzar el format hh:mm:ss:[xxx]). I finalment amb el paràmetre ‘-vframes’ s’especifica el número de frames que es volen capturar, en el nostre cas un.

6.14 Convertir un vídeo a FULL HD

Per a passar un vídeo a Full HD (en format 16:9) pot ser útil el paràmetre ‘-pix_fmt rgb48le’ el qual ajuda a minimitzar la pèrdua de qualitat ja que permet canviar el format de píxel de 16 bits d’informació a 40.

Amés es pot canviar la mida del frame a 1920x1080 amb el paràmetre ‘-s’, i amb el paràmetre ‘-aspect’ canviarà la relació d’aspecte a 16:9.

I finalment, utilitzant el paràmetre ‘-sameq’ forçarà que el vídeo resultant mantingui la mateixa qualitat que el original.

Així doncs, es procedirà de la següent manera:

ffmpef -i videoin.mpeg -sameq -pix_fmt rgb48le -s 1920x1080 -aspect 16:9 videoout.mpeg

44

6.15 Retallar la imatge

En el cas de disposar d’un vídeo sobre el qual s’hi vol retallar una part que no interessa (per exemple, perquè hi ha publicitat), es pot utilitzar el filtre ‘crop’ el qual permet retallar àrees especifiques d’un vídeo.

La manera d’utilitzar aquest filtre és la següent:

ffmpeg -i video_entrada -vf “crop=w:h:x:y” video_sortida

Amb els paràmetres w,h,x,y s’hi especifica la mida i la posició del rectangle imaginari que s’utilitzarà per a retallar la imatge tal com es pot observar, a mode de exemple, a la Figura 7:

Figura 7. Exemple de retall amb el filtre 'crop'

D’aquesta manera, aquests paràmetres són:

W: ‘Width’, amplada del rectangle. H: ‘Height’, altura del rectangle. X,Y: Posició de la cantonada superior esquerre del rectangle.

Així doncs la imatge del vídeo resultant seria tal com a la Figura 8.

45 FFMPEG, software de programari lliure.

Figura 8. Resultat de la aplicació del filtre 'crop'

Si per exemple, es disposa d’un arxiu de vídeo amb una resolució de 480x270 i es desitja retallar-lo per la meitat en sentit vertical, es faria així:

ffmpeg -i videoin.avi -vf “crop=240:270:0:480” videoout.avi

D’aquesta manera s’està indicant que es vol retallar la imatge amb una amplada de 240 píxels i una altura de 270 píxels, i que aquestes mides comencen des de la posició 0:480, és a dir, just a la cantonada superior esquerre. I així s’aconsegueix un vídeo retallat per la meitat en sentit vertical.

Si en canvi es vol retallar, per exemple, per la meitat també però en sentit horitzontal, es faria de la següent manera:

ffmpeg -i videoin.avi -vf “crop=480:135:0:135” videoout.avi

46

6.16 Ampliar el fons de la imatge

Per a ampliar el fons de la imatge d’un arxiu de vídeo, per exemple per a passar d’una relació d’aspecte de 4:3 a una de 16:9, sense patir deformacions de la imatge, és a dir, sense ampliar- la horitzontalment o verticalment i així quedi deformada. O si simplement si el motiu és per afegir-hi un marc exterior a la imatge (per a afegir-hi altres coses posteriorment com subtítols, per exemple). Per a tot això es disposa del filtre ‘pad’ el qual amés permet pintar aquest marc de color.

La manera d’utilitzar aquest filtre és molt semblant a la del filtre ‘crop’.

ffmpeg -i vídeo_entrada -vf “pad=w:h:x:y:color” vídeo_sortida

Amb aquests paràmetres, aquest permet escollir:

• W: ‘Width’, amplada de la imatge resultant. • H: ‘Height’, altura de la imatge resultant. • X,Y: Posició a la imatge resultant de la cantonada superior esquerre de la imatge d’origen. Aquest cop, l’eix de coordenades està a la part superior esquerre. • Color: Color del marc exterior.

En el nostre cas tenim un vídeo amb una resolució de 480x272. Posarem un fons de color verd 100 píxels més alt i més ample, i deixarem el vídeo original centrat en el vídeo destí, és a dir, 50 píxels desplaçat tant en l’eix de les X com en el de les Y.

ffmpeg -i videoin.mpeg -vf “pad=580:372:50:50:green” videoout.mpeg

47 FFMPEG, software de programari lliure.

Així doncs, el resultat serà el de la Figura 9:

Figura 9. Resultat de la aplicació del filtre pad

48

6.17 Vídeo a càmera ràpida/lenta

Per a canviar la velocitat d’un vídeo per a crear un efecte de càmera ràpida o lenta, es disposa de dos mètodes possibles.

El primer mètode per a crear tal efecte consisteix en extreure les imatges del vídeo (tal com s’ha vist al punt ‘6.10. Obtenir una seqüència d’imatges a partir d’un vídeo’) i d’aquestes imatges eliminar-nen per a crear un efecte de càmera ràpida, o duplicar-les per a crear el efecte de càmera lenta, i tot seguit tornar a crear el vídeo (tal com s’explica al punt ‘6.11. Obtenir un vídeo a partir d’una seqüència d’imatges’).

No obstant, aquest mètode és bastant laboriós i lent, de tal manera que la millor opció serà utilitzar el segon mètode el qual consisteix en utilitzar el filtre ‘setpts’.

Utilitzant aquest filtre, per a augmentar la velocitat del vídeo:

ffmpeg -i videoin.avi -vf “setpts=0.5*PTS” videoout.avi

S’ha de tenir en compte que per a augmentar la velocitat de moviment, es perdran imatges. No obstant, es pot evitar aquesta pèrdua d’imatges especificant un frame rate de la entrada major, és a dir, per exemple, per a passar d’una entrada de 4 a un que s’accelera fins a 4x, 16fps.

ffmpeg -i videoin.avi -r 16 -vf “setpts=0.125*PTS” -an videoout.mp4

I finalment, per a reduir-li la velocitat:

ffmpeg -i videoin.avi -vf “setpts=2.0*PTS” videoout.avi

Igualment, s’ha de tindre en compte que només accelera o redueix la velocitat de la imatge, no del àudio. L’àudio s’haurà de tractar apart per a que vagin en consonància.

49 FFMPEG, software de programari lliure.

6.18 Girar el vídeo horitzontal o verticalment

En aquest punt es podrà veure com donar-li la volta a un vídeo, donant-li un efecte mirall, de manera tant horitzontal com vertical. Per a tal, s’utilitzaran els filtres ‘hflip’ i ‘vflip’ respectivament.

Començant per el filtre ‘hflip’, aquest s’utilitzarà de la següent manera:

ffmpeg -i videoin.avi -vf “hflip” videoout.avi

El seu resultat serà tal com aquest, on a la Figura 10 es pot observar una imatge del arxiu origen i en la ¡Error! No se encuentra el origen de la referencia.Figura 11 una del arxiu resultant d’utilitzar el filtre hflip.

Figura 10. Imatge original Figura 11. Resultat del filtre hflip

I en el cas del filtre ‘vflip’, farà exactament el mateix però en sentit vertical.

ffmpeg -i videoin.avi -vf “vflip” videoout.avi

On es pot observar a la Figura 12 la imatge original, i a la Figura 13 la imatge resultant després d’utilitzar el filtre vflip.

Figura 12. Imatge original Figura 13. Resultat del filtre vflip

50

6.19 Transposar el vídeo

Quan es parla de transposar, es parla de intercanviar files amb columnes del vídeo de entrada, o per dir-ho d’una altra manera, es rota. Aquesta funció és aplicable amb el filtre ‘transpose’, el qual accepta com a paràmetre un número del 0 al 3 per a escollir una de les següents opcions:

• ‘0’: Rota el vídeo 90 graus cap a l’esquerra i el volteja verticalment. • ‘1’: Rota el vídeo 90 graus cap a la dreta. • ‘2’: Rota el vídeo 90 graus cap a l’esquerra. • ‘3’: Rota el vídeo 90 graus cap a la dreta i el volteja verticalment.

La sintaxi corresponent per a utilitzar aquest filtre serà:

ffmpeg -i video_entrada -vf “transpose=n” video_sortida

On ‘n’ serà un número enter entre 0 i 3 segons les opcions anteriors.

A continuació es pot veure un exemple d’utilització del filtre on hi apareix primer a la Figura 14 la imatge original, i tot seguit a la Figura 15, la Figura 16, la Figura 17 i la Figura 18 els resultats de les opcions del filtre de 0 a 3.

Figura 14. Imatge original

Figura 15. Tranpose=0 Figura 16. Transpose=1 Figura 17. Transpose=2 Figura 18. Transpose=3

51 FFMPEG, software de programari lliure.

6.20 Redimensionar el vídeo

Utilitzant el filtre ‘scale’ es pot redimensionar el vídeo, és a dir, donar-li la resolució desitjada passant-li com a paràmetres l’amplada i la alçada, tenint en compte que es pot deformar la imatge.

La seva sintaxi serà:

ffmpeg -i vídeo_entrada -vf “scale=w:h” vídeo_sortida

On ‘w’ (width) serà la amplada, i ‘h’ (height) serà la alçada del vídeo de sortida.

Així doncs si, com en el cas de la Figura 19, tenim un vídeo de 700x400 i se li vol donar una resolució de 200x500, per exemple, ens quedarà una imatge molt aixafada horitzontalment però una mica més allargada verticalment que la original tal i com es pot observar a la Figura 20.

ffmpeg -i videoin.avi -vf “scale=200:500” videoout.avi

Figura 19. Imatge original

Figura 20. Resultat del filtre scale

52

6.21 Establir la base de temps

Amb el filtre ‘settb’ s’estableix la base de temps a utilitzar per als frames de sortida, el qual és realment útil per a provar la configuració de la base de temps.

En altres paraules, li canviem la seva base de temps pròpia de 1/1000000 a la que se li indiqui.

Aquest accepta introduir una expressió aritmètica que representi una racional. La expressió pot contenir les constants ‘PI’, ‘E’, ‘PHI’, ‘AVTB’ (la base de temps predeterminada) i ‘INTB’ (la base de temps d’entrada).

El valor predeterminat per a la entrada és ‘INTB’.

Per exemple, si se li passa la següent ordre:

ffmpeg -i videoin.avi -vf “settb=1/25” videoout.avi

S’està ajustant la base de temps a 1/25.

Alguns exemples dels valors que es podrien utilitzar:

• “settb=0.1” per ajustar la base de temps a 1/10. • “settb=1+0.001” per ajustar la base de temps a 1001/1000. • “settb=2*intb” per ajustar la base de temps al doble de la de entrada. • “settb=AVTB” per ajustar la base de temps per defecte.

53 FFMPEG, software de programari lliure.

6.22 Enfocar o desenfocar un vídeo

Es pot enfocar o desenfocar un vídeo utilitzant el filtre ‘unsharp’.

Els paràmetres que admet aquest filtre són: luma_x, luma_y, luma_quant, chroma_x, chroma_y i chroma_quant.

• luma_x/luma_y: Ajusten la mida horitzontal i vertical respectivament de la matriu de luminància. Aquest valor pot estar comprès entre 3 i 13. El seu valor per defecte és 5. • luma_quant: Ajusta la quantitat d’efecte de luminància que li volem donar. El valor pot estar comprès entre -2.0 i 5.0. El seu valor per defecte és 1.0 • chroma_x/chroma_y: Ajusten la mida horitzontal i vertical respectivament de la matriu de crominància. Aquest valor pot estar comprès entre 3 i 13. El seu valor per defecte és 0. • chroma_quant: Ajusta la quantitat d’efecte de crominància que li volem donar. El valor pot estar comprès entre -2.0 i 5.0. El seu valor per defecte és 0.0.

En els paràmetres on s’indica la quantitat del efecte, els valors negatius desenfoquen la imatge, i els valors positius la enfoquen.

Tots els paràmetres són opcionals, els seus valors predeterminats són: ‘5:5:1.0:0:0:0.0’.

Així doncs si, per exemple, es vol aconseguir un efecte d’una imatge enfocada amb luminància, com a la Figura 21, podríem utilitzar els següents valors dels paràmetres:

ffmpeg -i videoin.avi -vf “unsharp=7:7:2.5” videoout.avi

I per aconseguir un efecte d’una imatge desenfocada per luminància i crominància, com a la Figura 22, utilitzaríem els següents:

ffmpeg -i videoin.avi -vf “unsharp=7:7:-2:7:7:-2” videoout.avi

Figura 21. Imatge enfocada Figura 22. Imatge desenfocada

54

6.23 Introduir subtítols

Per a poder introduir subtítols en un arxiu de vídeo, el primer que es necessita és un arxiu SRT.

Els arxius SRT, també coneguts com a formats d’arxius SubRip, són una classe d’arxius que contenen els subtítols. Aquests són suportats per un ample rang de reproductors. No és necessari descarregar o comprar software addicional per a crear un arxiu SRT doncs tot el necessari és un editor de text.

Un arxiu de subtítols ha de tindre el següent format:

1 00:00:01,000 --> 00:00:02,000 Primera frase dels subtítols mostrada en el primer segon

2 00:00:03,000 --> 00:00:04,000 Segona frase dels subtítols mostrada en el tercer segon

3 00:01:00,000 --> 00:01:06,000 Tercera frase dels subtítols mostrada en el minut 1 durant 6 segons

. . .

‘n’ 00:01:00,000 --> 00:01:10,000 (...etc, etc, etc ...)

És a dir, cada frase que s’ha de mostrar al vídeo ha de estar numerada començant per el número ‘1’.

A continuació, a la següent línia s’ha de posar en quin instant de temps es desitja que aparegui el text, i fins quin instant es desitja que ho faci.

I finalment el subtítol pertinent al anterior instant de temps.

Per a acabar, tant sols cal guardar l’arxiu amb la extensió ‘.srt’, i ja estarà enllestit l’arxiu de subtítols per a poder utilitzar-lo amb Ffmpeg.

55 FFMPEG, software de programari lliure.

Una vegada ja està preparat l’arxiu de subtítols, tant sols queda escriure a la línia de comandes tal com el següent:

ffmpeg -i videoin.mp4 -i subtítols.srt -scodec copy videoout.mkv

Tal i com es pot observar, utilitzem el format ‘matroska’ (.mkv) al arxiu de sortida, doncs és un dels formats que admet subtítols.

I així obtindrem un resultat tal com el que es mostra a la Figura 23:

Figura 23. Introducció de subtítols

56

7 FFSERVER

Ffserver és un servidor de streaming d’àudio i vídeo. És compatible amb vàries transmissions en viu.

La idea bàsica de Ffserver és que actua com un deflector/repetidor de dades de la seqüència que s’alimenta per una instància de Ffmpeg. L’alimentador (Ffmpeg) i el deflector/servidor (Ffserver) es poden executar a la mateixa màquina, o en dos màquines connectades, segons la seva configuració.

Ffmpeg llegeix l’arxiu d’entrada, el codifica i l’envia al port IP. Ffserver s’executa sobre el port IP, rep les dades i les serveix al client.

Ffmpeg i Ffserver es comuniquen a través d’un arxiu ‘pseudo’, normalment anomenat feed1.ffm. En connexió, Ffmpeg llegeix els paràmetres que Ffserver sol·licita des de l’arxiu feed1.ffm de Ffserver, comença la codificació, i després transmet les dades resultants a Ffserver.

Quan està ben configurat i executant-se, es pot capturar vídeo i àudio en temps real des de una targeta de captura o transmetre’n a través d’internet a qualsevol reproductor de Windows Media o Real Audio Player.

La seva sintaxi, de forma genèrica és:

ffserver [opcions]

57 FFMPEG, software de programari lliure.

7.1 Configuració de FFSERVER

El funcionament de Ffserver consisteix en que rep una font de dades, sigui àudio, vídeo o ambdues, i a partir de la configuració, ofereix dades amb una extensió i còdecs determinats. Aquestes fonts son anomenades ‘feeds’. Cada feed té la seva pròpia configuració i cadascun pot rebre una seqüència de dades diferent.

L’arxiu de configuració es troba (segons tal i com l’hem instal·lat en el nostre cas) a ‘usuari/ffmpeg/ffmpeg/doc/ffserver.conf’ i des d’aquí es pot configurar el servidor.

Algunes de les opcions que es poden trobar al arxiu de configuració son:

• Port: Estableix el port del servidor. Els usuaris es podran connectar a través d’aquest port.

• MaxClients: Ajusta el número màxim de clients que suportarà el servidor.

: Nom del feed. Al utilitzar ffmpeg per a enviar la seqüència de dades a Ffserver, s’haurà d’incloure el nom del feed a la URL:

ffmpeg -i arxiu_entrada http://localhost:8090/nom_feed.ffm

• File [ruta]: S’hi indica on s’emmagatzemarà temporalment el feed.

• FileMaxSize [nº]: Mida màxima del feed temporal en el disc.

• ACL allow [IP]: Adreces IP acceptades per a reproduir la seqüència.

• Stream [nom].[extensió]: Nom del stream. Els usuaris es connectaran a través d’aquest nom en una URL:

http://192.168.1.10:8090/nom_stream.mpg

• Feed [nom_feed].ffm: Feed que utilitzarà el stream. Un stream estarà associat a un feed. D’aquesta manera, Ffmpeg enviarà la seqüència a un feed, aquest feed s’associarà amb un stream, i els usuaris es connectaran al stream tal i com es pot observar a la Figura 24.

FFMPEG FEED STREAM USUARI

Figura 24. Funció del Feed de Ffserver

58

• Format [format_contenidor]: Indica el format del stream. En el mateix arxiu de configuració s’indiquen els formats suportats.

• AudioBitRate [nº]: S’hi indica el bitrate d’àudio. Quan major és el número, major és el trànsit en la connexió. Depèn del codec utilitzat.

• AudioSampleRate [nº]: Freqüència del àudio. Normalment és 44100. Depèn també del codec utilitzat.

• VideoBitRate [nº]: S’hi Indica el bitrate de vídeo.

• VideoBufferSize: Mida del buffer de vídeo. Amb una mida inadequada la seqüència es pot interrompre.

• VideoFrameRate [nº]: S’hi indica els frames per segon del vídeo. Al executar la comanda de Ffmpeg, s’ha d’indicar el mateix número amb la opció ‘-r’. Han de coincidir, si no, mostrarà un error.

• VideoSize [nº]: Resolució del vídeo. També es poden utilitzar abreviatures com ‘vga’ per a indicar-li la resolució corresponent.

• AudioCodec [Nom_codec_àudio]: Nom del codec d’àudio que s’utilitzarà. Per exemple ‘libvorbis’ o simplement ‘vorbis’. Si està “comentada” amb ‘#’, Ffserver escollirà el codec amb referència al format contenidor. Per exemple, si ‘Format’ conté ‘ogg’, Ffserver utilitzarà vorbis, si conté ‘mpeg’, utilitzarà mp2.

• VideoCodec [Nom_codec_vídeo]: Nom del codec de vídeo. Al igual que ‘AudioCodec’, s’hi indica el codec de vídeo que s’utilitzarà. Ffserver també utilitzarà codecs per defecte si està comentada.

A la pàgina oficial ( http://ffmpeg.org/sample.html ) , es pot trobar l’arxiu de configuració per defecte.

Així doncs, es pot preparar l’arxiu de configuració (ffserver.conf) de la següent manera:

Es determina el port utilitzat per Ffserver per a realitzar el streaming, la direcció de bind, la qual és necessària si es té més d’una interfície de xarxa, la màxima quantitat de usuaris connectats, el ample de banda màxim permès entre tots els usuaris i per últim, si aquest funcionarà com a ‘Daemon’ o serà iniciat manualment.

Port 8090 BindAddress 0.0.0.0 MaxClients 1000 MaxBandwidth 1000 NoDaemon

59 FFMPEG, software de programari lliure.

Feed: Cada Feed conté una seqüència de vídeo i/o àudio provinent de la sortida d’alguna instància de Ffmpeg. És en sí una secció del arxiu de configuració.

File /tmp/feed1.ffm FileMaxSize 100M ACL allow 127.0.0.1

Stream: Aquí es defineixen els paràmetres de reproducció dels streams provinents dels arxius prèviament codificats per Ffmpeg.

Feed feed1.ffm Format mpeg AudioBitRate 32 AudioChannels 1 AudioSampleRate 44100 VideoBitRate 64 VideoBufferSize 40 VideoFrameRate 25 VideoSize 320x240 VideoGopSize 12

Es poden definir més streams, per si es volen transmetre diferents tipus d’arxius.

Per exemple, per a transmetre vídeo Flash:

Feed feed1.ffm Format swf VideoFrameRate 2 VideoIntraOnly NoAudio

60

O àudio MP3:

Feed feed1.ffm Format mp2 AudioCodec libmp3lame AudioBitRate 64 AudioChannels 1 AudioSampleRate 44100 NoVideo

Amés, Ffserver suporta una interfície HTTP la qual exposa el estat actual del servidor.

Tan sols indicant al navegador la adreça del stream de estat especificat en l’arxiu de configuració, llavors el servidor publicarà una pàgina amb la informació d’estat quan sigui sol·licitada.

Format status ACL allow localhost ACL allow 192.168.0.0 192.168.255.255

I finalment, es pot posar un enllaç a una pàgina web que interessi redirigint ‘index.html’.

URL http://www.ffmpeg.org/

61 FFMPEG, software de programari lliure.

7.2 Exemple de streaming amb FFSERVER

Una vegada configurat ‘ffserver.conf’ tal com interessa, ja es pot començar a transmetre.

Primer, al arxiu de configuració (ffserver.conf), s’hi han de deixar comentats els exemples mencionats en el punt anterior (7.1 Configuració de FFSERVER) per a que no enviï dos seqüències al mateix stream.

Així doncs, deixarem (en el nostre cas, a mode de exemple) el stream ‘test1.mpg’ amb un bitrate d’àudio de 32 bits per segon i una freqüència de 44100Hz, un framerate de vídeo de 25 frames per segon i amb una resolució de 320x240.

A continuació s’executarà en un terminal la següent comanda per a arrancar Ffserver amb l’arxiu de configuració indicant-li on es troba aquest.

ffserver -f ffmpeg/doc/ffserver.conf

Ara, Ffserver es quedarà “escoltant”, i anirà apareixent en pantalla informació de servei.

Per a seguir, s’haurà d’obrir un terminal apart en el qual es podrà executar, per exemple:

ffmpeg -i videoin.avi http://localhost:8090/feed1.ffm

O, indicant-li el framerate i la resolució:

ffmpeg -r 25 -s 320x240 -i videoin.avi http://localhost:8090/feed1.ffm

I amb això començarà a enviar l’arxiu indicat pel port 8090.

Aquest arxiu d’entrada, tant pot ser un arxiu de vídeo i/o d’àudio que ja estigui emmagatzemat com en el exemple, com també pot ser una imatge en directe captada per una webcam, àudio captat des d’un micròfon o imatges de televisió captades amb una targeta de captura.

Una vegada, ha començat a recollir la imatge de la webcam o del arxiu que s’hi hagi enviat, es podrà reproduir el vídeo amb un reproductor que capaç de reproduir streaming, com per exemple VLC, que és capaç de llegir multitud de còdecs.

Si s’utilitza VLC per a reproduir-ho, s’ha de seleccionar ‘Abrir volcado de red’ de la pestanya ‘Medio’ i introduir-li la següent URL: http://localhost:8090/nom_stream

62

On localhost serà la IP del equip des d’on s’ha executat el Ffserver, i nom_stream el nom que se li ha donat al stream del Feed, en el nostre cas:

http://192.168.1.11:8090/test1.mpg

I així, reproduirà l’arxiu enviat segons els paràmetres configurats al Feed tal i com es pot observar a la Figura 25.

Figura 25. Reproducció del streaming amb VLC Media Player

No obstant, també es podrà reproduir des de un navegador web posant la mateixa adreça anterior al navegador, o accedint-hi a través de la pàgina que mostra l’estat tal com mostra la Figura 26:

http://192.168.1.11:8090/stat.html

63 FFMPEG, software de programari lliure.

Figura 26. Pàgina de 'Status' de Ffserver

En aquesta pàgina s’hi pot observar que en la primera secció s’hi troben tots els streams configurats al Feed.

En el nostre cas, només hi tenim test1.mpg que és des d’on es podrà veure el vídeo enviat. stat.html que és la pàgina que es mostra actualment. I index.html que simplement redirigeix al link que s’ha indicat al arxiu de configuració.

A la segona secció de la pàgina, es poden veure els paràmetres dels streams configurats, en el nostre cas observem que ens indica que tenim un stream de vídeo codificat amb mpeg amb una resolució de 320x240 i 25 frames per segon.

I finalment, a la última secció hi apareix el estat de la connexió on mostra dades com el número de connexions realitzades fins el moment, l’ample de banda utilitzat, els arxius transmesos, etc.

64

Si es clica sobre el link del stream test1.mpg de la primera part de la pàgina d’estat, es podrà veure a través del reproductor del navegador el vídeo transmès tal i com apareix a la Figura 27.

Figura 27. Reproducció del streaming amb un navegador d'internet

65 FFMPEG, software de programari lliure.

66

8 FFPROBE

Ffprobe recopila informació de seqüències multimèdia i les imprimeix en un format que nosaltres puguem entendre.

Per exemple, pot utilitzar-se per a comprovar el format del recipient utilitzat per una seqüència multimèdia, i el format i el tipus de cada seqüència continguda en el mateix.

Si s’especifica un nom d’arxiu a l’entrada, Ffprobe intentarà obrir i explorar el contingut del arxiu. Si l’arxiu no es pot obrir o no el reconeix com a un arxiu multimèdia, retornarà un codi de sortida.

Ffprobe, es pot utilitzar tant com una aplicació independent o en combinació amb un filtre escrit, que pot realitzar un processament més sofisticat, per exemple, processament estadístic.

La seva sintaxi general serà: ffprobe [opcions] [arxiu_d’entrada]

8.1 Opcions de FFPROBE

Ffprobe disposa de les mateixes opcions genèriques que Ffmpeg amb les que es pot veure els formats disponibles, còdecs, protocols, filtres, formats de píxel, etcètera. Aquestes opcions estan representades al punt ‘5.1 Opcions genèriques’.

Amés d’aquestes opcions genèriques, es disposa també de les següents opcions específiques de Ffprobe mostrades a la Taula 8:

Taula 8. Opcions principals de Ffprobe

Opcions Funció -f format Força el format a utilitzar. -unit Mostra la unitat dels valors utilitzats. -prefix Mostra els prefixos dels valors mostrats. * -byte_binary_prefix Força a utilitzar prefixes binaris de valors de byte.* -sexagesimal Utilitza el format sexagesimal HH:MM:SS:Microsegons per a valors de temps. -pretty Embelleix el format dels valors mostrats. Correspon a les opcions ‘- unit –prefix –byte_binary_prefix –sexagesimal’. -show_format Mostra informació sobre el format del contenidor de la seqüència multimèdia de entrada.

Tota la informació dels formats del contenidor es mostra dins d’una secció amb el nom de ‘FORMAT’.

67 FFMPEG, software de programari lliure.

-show_streams Mostra informació de cada seqüència de la entrada multimèdia actual.

La informació de cada seqüència es mostra dins d’una secció amb el nom de ‘STREAM’. -show_packets Mostra informació sobre cada paquet contingut en la entrada actual.

La informació de cada paquet individual es mostra en una secció amb el nom de ‘PACKET’.

* Totes les opcions numèriques, si no s’especifica el contrari, accepta a la entrada una cadena que representa un número que pot contenir un dels prefixes del SI (Sistema Internacional) de unitats, per exemple, ‘K’, ‘M’, ‘G’. Si s’agrega ‘i’ després del prefix, s’utilitzen els prefixes binaris, que es basen en potències de 1024. El sufix ‘B’ multiplica el valor per 8, i es poden afegir després de un prefix o es pot utilitzar sol. Això permet, per exemple, utilitzar ‘KB’, ‘MiB’, ‘G’ i ‘B’ com a número de sufix.

8.2 Exemple funcional de FFPROBE

Així doncs es podria executar una ordre tal com la següent:

ffprobe –unit –prefix -sexagesimal –byte_binary_prefix -show_format –show_streams -show_packets video.mkv

O també es pot executar aquesta mateixa comanda canviant els quatre primers paràmetres per el de –pretty, és a dir:

ffprobe –pretty –show_format –show_streams –show_packets vídeo.mkv

Així doncs, amb els paràmetres que s’han utilitzat, s’ha de tenir en compte que algunes de les dades que s’hi veuran estaran en unitats tals com ‘Hz’, ‘s’ (segons) o ‘byte’ gràcies al paràmetre –unit. En sistema internacional (‘K’, ‘M’, ‘G’) gràcies al paràmetre –prefix i forçades a format binari (‘B’) gràcies al paràmetre –byte_binary_prefix. I les dades referents al temps o duracions, en format HH:MM:SS:XXX gràcies al paràmetre –sexagesimal.

De tal manera que s’obtindria una resposta tal com la següent:

68

Input #0, matroska,webm, from 'video.mkv': Duration: 00:24:59.91, start: 0.000000, bitrate: N/A Stream #0.0: Video: h264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc Stream #0.1(jpn): Audio: aac, 48000 Hz, 5.1, s16 Stream #0.2(spa): Subtitle: ass Stream #0.3: Attachment: [0][0][0][0] / 0x0000 Metadata: filename : georgia.ttf Unsupported codec (id=98304) for input stream 3

Per a començar, es pot observar la informació genèrica del arxiu com la seva durada o el bitrate.

Tot seguit, mostra per separat la informació pertanyent a cada seqüència:

Primer, a Stream #0.0 hi apareix la informació referent a la seqüència de vídeo tal com el seu format o la seva resolució d’entre d’altres.

A Stream #0.1 es pot trobar la informació de la seqüència d’àudio com el format, la freqüència de mostreig, els canals i el format de mostreig.

En el cas que l’arxiu multimèdia que s’està analitzant estigui subtitulat, hi apareixerà la informació relacionada, com el format o inclús l’idioma, a Stream #0.2.

Finalment, a Stream #0.3 hi apareix informació d’arxius addicionals adjunts al arxiu multimèdia contenidor, en el nostre exemple es tracta de una font de lletra (georgia.ttf).

Tot seguit es pot veure la informació de cada paquet de dades on, evidentment només hi hem deixat la informació d’alguns paquets (un de cada), a mode de exemple, per tal de no omplir un grapat de pàgines amb informació que ens resultaria irrellevant.

Mostra la informació de cada paquet degut a la opció –show_packets.

69 FFMPEG, software de programari lliure.

[PACKET] codec_type=video stream_index=0 pts=1490072 pts_time=0:24:50.072000 dts=1490030 dts_time=0:24:50.030000 duration=41 duration_time=0:00:00.041000 size=1.581 Kibyte pos=364171562 flags=_ [/PACKET]

Aquest paquet correspon a un paquet de vídeo segons es mostra al principi al tipus de còdec, o també a continuació on indica l’índex de la seqüència el qual correspon al índex d’una seqüència de vídeo.

El dts indica (en unitats de la base de temps) el moment en el que el paquet es descomprimeix. Mostrarà AV_NOPTS_VALUE si no és emmagatzemat al arxiu.

I el pts doncs, indica (també en unitats de la base de temps) el moment en que es mostra al usuari el paquet descomprimit. Mostrarà AV_NOPTS_VALUE si no és emmagatzemat al arxiu. Amés, pts ha de ser major o igual a dts ja que la presentació no pot succeir abans que la descompressió. duration indicarà la duració del paquet. Si es desconeix la duració, aquest valor serà 0.

Les tres opcions anteriors també les mostra en format sexagesimal (dts_time, pts_time i duration_time). size mostrarà la mida del paquet, i pos la posició d’aquest a la seqüència. El valor d’aquest últim serà de -1 si es desconeix la posició.

I finalment, flags indica l’entrellaçat.

70

[PACKET] codec_type=audio stream_index=1 pts=1490283 pts_time=0:24:50.283000 dts=1490283 dts_time=0:24:50.283000 duration=21 duration_time=0:00:00.021000 size=863.000 byte pos=364173330 flags=K [/PACKET]

Aquest cop es tracta d’un paquet d’àudio segons indica el tipus de còdec i el número d’índex de la seqüència.

La informació que detalla es la mateixa que en el paquet anterior (vídeo).

[PACKET] codec_type=subtitle stream_index=2 pts=1490150 pts_time=0:24:50.150000 dts=1490150 dts_time=0:24:50.150000 duration=0 duration_time=0:00:00.000000 size=158.000 byte pos=364173191 flags=K [/PACKET]

L’últim tipus de paquet que es pot veure és el de la seqüència de subtítols, el qual també disposa de la mateixa informació que els dos anteriors.

71 FFMPEG, software de programari lliure.

A continuació, es pot analitzar la informació que aporta de cada seqüència degut a la opció – show_streams.

[STREAM] index=0 codec_name=h264 codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 codec_type=video codec_time_base=1001/48000 codec_tag_string=[0][0][0][0] codec_tag=0x0000 width=1280 height=720 has_b_frames=2 sample_aspect_ratio=1:1 display_aspect_ratio=16:9 pix_fmt=yuv420p r_frame_rate=24000/1001 avg_frame_rate=1000000000/41708333 time_base=1/1000 start_time=0:00:00.000000 duration=N/A [/STREAM]

En aquest primer cas, es tracta de la seqüència de vídeo ja que el seu índex és el 0.

Es pot observar com ens aporta informació tal com el nom del còdec utilitzat (inclús el nom complert)

Amés, mostra informació sobre la base de temps, la resolució del vídeo, la relació d’aspecte o inclús el format de píxel utilitzat. En altres paraules, aporta la informació que pot resultar útil referent a un arxiu de vídeo.

72

[STREAM] index=1 codec_name=aac codec_long_name=Advanced Audio Coding codec_type=audio codec_time_base=8/375 codec_tag_string=[0][0][0][0] codec_tag=0x0000 sample_rate=48.000 KHz channels=6 bits_per_sample=0 r_frame_rate=0/0 avg_frame_rate=1000/21 time_base=1/1000 start_time=0:00:00.000000 duration=N/A TAG:language=jpn [/STREAM]

En aquest segon cas, es pot observar que aporta dades referents a la seqüència d’àudio tals com els canals utilitzats o la freqüència de mostreig. Amés, mitjançant tags es pot obtenir informació addicional tal com el llenguatge utilitzat al arxiu.

STREAM] index=2 codec_name=ass codec_long_name=Advanced SubStation Alpha subtitle codec_type=subtitle codec_time_base=1/1000 codec_tag_string=[0][0][0][0] codec_tag=0x0000 r_frame_rate=0/0 avg_frame_rate=0/0 time_base=1/1000 start_time=0:00:00.000000 duration=N/A TAG:language=spa [/STREAM]

Aquest cop, la informació és sobre els subtítols, la qual no pot aportar gaire cosa més que el còdec utilitzat o algun tag addicional.

73 FFMPEG, software de programari lliure.

[STREAM] index=3 codec_name=unknown codec_type=attachment codec_time_base=0/1 codec_tag_string=[0][0][0][0] codec_tag=0x0000 r_frame_rate=0/0 avg_frame_rate=0/0 time_base=1/90000 start_time=N/A duration=N/A TAG:filename=georgia.ttf [/STREAM]

Finalment, la última seqüència es referent als arxius afegits addicionalment, en el nostre cas una font de lletra (georgià.ttf).

I per a acabar, utilitzant la opció –show_format mostrarà informació sobre el format del contenidor de la seqüència multimèdia.

[FORMAT] filename=video.mkv nb_streams=4 format_name=matroska,webm format_long_name=Matroska/WebM file format start_time=0:00:00.000000 duration=0:24:59.915000 size=349.202 Mibyte bit_rate=0.000 bit/s [/FORMAT]

Tal i com es pot observar, aquesta informació sobre el contenidor, mostra el nom del arxiu multimèdia, la quantitat de seqüències que conté, el format del contenidor i la seva mida i durada.

74

9 FFPLAY

FFplay és un reproductor multimèdia molt senzill amb el que es poden reproduir tots els formats que suporta Ffmpeg.

Aquest reproductor utilitza les llibreries de Ffmpeg i la llibreria de SDL.

La seva sintaxi general serà:

ffplay [opcions] [arxiu d’entrada]

9.1 Compilació de FFMPEG amb SDL

Tal i com es menciona a la introducció anterior, Ffplay utilitza la llibreria de SDL, pel que no permet executar-lo sense haver instal·lat les llibreries de SDL prèviament mostrant un missatge d’error indicant que no reconeix la comanda ffplay.

SDL és una llibreria multimèdia multi-plataforma dissenyada per a proporcionar accés de baix nivell al àudio, ratolí, joystick, hardware 3D a través de OpenGL i framebuffer 2D de vídeo.

SDL suporta Linux, Windows, Windows CE, BeOS, Mac OS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD / OS, Solaris, IRIX i QNX.

Així doncs, necessitem tornar a compilar ffmpeg però aquest cop incloent les llibreries SDL.

Primer de tot, a la pàgina oficial de SDL, s’accedeix al enllaç anomenat ‘SDL 1.2’ de la secció de descàrregues, i s’ha de descarregar l’arxiu anomenat ‘SDL-1.2.15.tar.gz’ situat a la secció de ‘Source Code’, tal i com es pot observar a la Figura 28 corresponent al enllaç de descàrrega (http://www.libsdl.org/download-1.2.php). En el nostre cas, aquesta és la última versió estable.

75 FFMPEG, software de programari lliure.

Figura 28. Enllaç de descàrrega de SDL

Un cop descarregat el arxiu, es descomprimirà en una carpeta que tindrà el seu nom.

tar xvzf SDL-1.2.15.tar

Un cop descomprimit, dins la carpeta que s’ha creat, s’hi trobaran varis “README’s” segons el sistema que s’està utilitzant, en el nostre cas README.MacOSX, en el qual hi han instruccions depenent del tipus de instal·lació que es vol realitzar.

Així doncs, ja es pot procedir a instal·lar la llibreria de la forma tradicional.

cd SDL-1.2.15 ./configure make sudo make install

76

No obstant, la versió OS X que estem utilitzant (recordem, versió 10.8.2), ens donarà una sèrie de errors relacionats amb X11 en el ./configure que no ens permet instal·lar-ho.

Aquesta versió de OS X en concret (desconeixem si tindríem el mateix problema en d’altres), no disposa de la aplicació X11, la qual permet interactuar amb la interfície gràfica del sistema. Aquesta aplicació es pot substituir per una anomenada XQuartz en les versions més noves de Mac OS X. No obstant, ni SDL ni FFMPEG no estan preparades per a aquesta aplicació fins al moment.

Així doncs, el que s’ha de fer és des-habilitar aquesta opció al ./configure, és a dir:

cd SDL-1.2.15 ./configure –disable-video-X11 make sudo make install

Un cop acabat de instal·lar les llibreries, al final del “sudo make install”, mostra pel terminal informació útil sobre on s’han instal·lat aquestes llibreries, ja que serà necessari utilitzar per a tornar a compilar Ffmpeg.

Entre d’altres coses, informa que les llibreries han estat instal·lades a /usr/local/lib i que es pot utilitzar la comanda libdir per accedir-hi.

Així doncs, ja es pot tornar a compilar Ffmpeg igual que en el punt ‘3. Instal·lació de FFMPEG a MAC OS X’, però aquest cop afegint-hi la llibreria SDL.

Per a tal propòsit s’hi afegirà la opció –libdir indicant-li la ruta on es troben les llibreries que s’hi volen afegir al ./configure.

cd ffmpeg ./configure --enable-libmp3lame --libdir=/usr/local/lib --enable-shared --disable-mmx

make sudo make install

Un cop fet això, s’ha tornat a instal·lar Ffmpeg, però aquest cop amb la llibreria de SDL vinculada, i per tant, ja es pot utilitzar Ffplay.

77 FFMPEG, software de programari lliure.

Així doncs, si s’executa Ffplay al terminal, s’obtindrà una resposta tal com la següent:

new-host:ffmpeg jordialberich$ ffplay FFplay version SVN-r26402, Copyright (c) 2003-2011 the FFmpeg developers built on Feb 11 2013 15:48:13 with llvm_gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) configuration: --enable-libmp3lame --libdir=/usr/local/lib --enable-shared --disable- mmx libavutil 50.36. 0 / 50.36. 0 libavcore 0.16. 1 / 0.16. 1 libavcodec 52.108. 0 / 52.108. 0 libavformat 52.93. 0 / 52.93. 0 libavdevice 52. 2. 3 / 52. 2. 3 libavfilter 1.74. 0 / 1.74. 0 libswscale 0.12. 0 / 0.12. 0 Simple media player usage: ffplay [options] input_file An input file must be specified Use -h to get full help or, even better, run 'man ffplay'

78

9.2 Opcions principals de FFPLAY

A continuació, a la Taula 9, es poden veure algunes de les opcions principals de les que es disposa alhora d’utilitzar Ffplay.

Al igual que Ffprobe, Ffplay també disposa de les mateixes opcions genèriques que Ffmpeg amb les que es poden veure els formats, còdecs, protocols, filtres, formats de píxel disponibles, etcètera. Aquestes opcions les podem trobar al punt ‘5.1.Opcions genèriques’ d’aquest document

Taula 9. Opcions principals de Ffplay

Opcions Funció -x amplada Força l’amplada del vídeo. -y alçada Força l’alçada del vídeo. -fs Força a utilitzar la pantalla completa. -an Anul·la el canal d’àudio. -vn Anul·la el canal de vídeo. -ss posició Situa a la posició indicada en segons del arxiu. -t durada Reprodueix la durada indicada en segons del arxiu. -nodisp No mostra la finestra de reproducció (útil per a arxius d’àudio). -window_title títol Ajusta el títol que es mostrarà a la finestra de reproducció. -vf filtre Aplica el filtre indicat a la seqüència de vídeo.

Els filtres disponibles es poden veure amb la opció –filters (també indicats al apartat ‘5.6.Filtres’). -loop vegades Reprodueix el mateix arxiu un número indicat de vegades.

Si aquest valor és 0, es reproduirà durant un bucle infinit de vegades. -autoexit Finalitza el programa quan finalitza la reproducció.

79 FFMPEG, software de programari lliure.

9.3 Controls durant la reproducció

Tot seguit, a la Taula 10 es mostren les opcions que es poden utilitzar durant la reproducció d’un arxiu.

Taula 10. Controls de Ffplay

Controls Funció Q, ESC Sortir de la reproducció. F Visualitzar en pantalla completa. P, SPC Pausa la reproducció. W Mostra les ones d’àudio. S Activa la reproducció frame per frame. ← Retrocedeix 10 segons a la reproducció. → Avança 10 segons a la reproducció. ↓ Retrocedeix 1 minut la reproducció. ↑ Avança 1 minut la reproducció.

9.4 Exemple funcional de FFPLAY

A mode de exemple, s’hi poden aplicar varies opcions a una mateixa reproducció. D’aquesta manera es podrà veure en un sol exemple algunes de les principals opcions de Ffplay.

ffplay –x 400 –y 300 –an –ss 100 –t 200 –vf vflip -loop 2 -autoexit -window_title ‘Exemple ffplay’ vídeo.mkv

En aquest cas, amb aquests paràmetres, s’aconsegueix el següent:

• -x 400 -y 300: Li indica la amplada i la alçada (en píxels) amb la que es desitja que es reprodueixi l’arxiu.

• -an: L’arxiu multimèdia es reproduirà havent anul·lat la seqüència d’àudio, és a dir, es reproduirà sense so.

• -ss 100: La reproducció començarà a partir del segon 100 del arxiu.

• -t 200: La reproducció durarà 200 segons.

• -vf vflip: Aquesta opció li aplica un filtre al arxiu multimèdia, en aquest cas el filtre vflip el qual rotarà la imatge 180º.

80

• -loop 2: Amb la opció loop repetirà la reproducció tantes vegades com se li indiqui, en aquest cas dues.

• -autoexit: Aquesta opció li indica que tanqui el programa en acabar la reproducció.

• -window_title ‘Exemple ffplay’: I finalment, aquesta ajusta el títol que es desitja mostrar a la finestra de reproducció. Per a aquesta opció, si es vol que mostri un títol compost per varies paraules amb espais s’haurà de posar-lo entre cometes com en el exemple, si en canvi el títol no conté espais, no caldrà posar aquestes cometes.

A la Figura 29 es pot veure una captura de pantalla del resultat d’aquesta operació, tot i que l’únic que es pot comprovar és com efectivament es mostra el títol ‘Exemple ffplay’ i com la imatge està rotada 180º.

Figura 29. Exemple funcional de Ffplay

81 FFMPEG, software de programari lliure.

S’ha de recordar que encara es disposa dels controls disponibles durant la reproducció.

Un d’aquests controls permet visualitzar els canals d’àudio en forma d’ona prement la tecla ‘W’.

No obstant, en aquest exemple no ens ho permet fer, ja que hem de recordar que hem anul·lat la seqüència d’àudio amb la opció –an.

Així doncs, només cal eliminar aquesta opció de la línia de comandes, i prémer la tecla indicada durant la reproducció.

ffplay –x 400 –y 300 –ss 100 –t 200 –vf vflip -loop 2 -autoexit -window_tittle ‘Exemple ffplay’ vídeo.mkv

D’aquesta manera, una vegada polsada la tecla W durant la reproducció, s’obtindrà un resultat com el que es mostra a la Figura 30:

Figura 30. Ones d'àudio de Ffplay. 3 canals.

En aquesta captura es pot observar com aquesta opció permet veure la forma d’ona dels diferents canals d’àudio.

82

En aquest exemple anterior, s’observa com la seqüència d’àudio tan sols disposa de tres canals. Si s’utilitza un arxiu que en tingui sis, com per exemple un 5.1, el resultat seria tal com el de la Figura 31:

Figura 31. Ones d'àudio de Ffplay. 6 canals.

Amés, una vegada s’està veient la informació d’àudio tal com a la Figura 30 o a la Figura 31, prement una altre vegada la tecla W mostrarà aquesta mateixa informació d’àudio tal com a la Figura 32.

Figura 32. Ones d'àudio de Ffplay, prement 'W' un altre cop.

83 FFMPEG, software de programari lliure.

84

10 Conclusions

Les primeres conclusions que es poden extreure d’aquest treball es que amb aquest programa es pot disposar d’una eina molt completa i eficaç per a tractar arxius multimèdia, doncs FFMPEG té un ampli ventall de possibilitats a l’hora de manipular aquest tipus d’arxius.

El major avantatge que ofereix FFMPEG, és la gran varietat de còdecs amb els que et permet treballar tant de vídeo com d’àudio.

Aquest programa amés, al ser de caràcter lliure, ofereix el gran avantatge de poder ser estudiat i modificat lliurement, doncs com hem vist a l’hora d’utilitzar Ffserver, es pot accedir als arxius de configuració del programa i modificar-los per tal de complir les nostres necessitats, on amés aquests arxius a l’hora de editar-los estan molt ben comentats per ajudar-nos en la edició d’aquests.

Un altre punt a favor d’aquest programa és que no tant sols es tractava d’un compressor/ descompressor d’arxius multimèdia amb una amplia varietat de còdecs amb els que tractar, sinó que amés disposa de moltes opcions addicionals que completen el programa tals com les opcions disponibles per a manipular els arxius com la possibilitat de fer streaming amb la ajuda de Ffserver, doncs aquesta última pot ser una opció molt útil per exemple per enviar imatges des de una càmera en directe per a poder utilitzar-les com a càmera de seguretat.

No obstant, aquest programa també té punts dèbils (des de el nostre punt de vista), doncs per exemple, al no disposar d’una interfície gràfica és més difícil d’utilitzar ja que tot s’ha de fer a través de la línia de comandes i les opcions menys “trivials” resulten complicades d’utilitzar, i amés al no disposar d’interfície gràfica resulta molt complicat conèixer tot el que es pot arribar a fer amb ell.

Un altre dels punts en contra que té sota el nostre punt de vista, es que pot fer bastantes manipulacions sobre un mateix arxiu, però no dóna opció a mesclar-ne un altre o treballar amb més d’un arxiu a l’hora, pel que no es poden fer, per exemple, mescles amb més d’un arxiu de vídeo.

Per altra banda, Ffprobe és una part d’aquest programari que creiem que podria ser prescindible, doncs tant sols ofereix informació dels arxius, que encara que sigui una informació molt extensa, costa trobar una utilitat a tota aquesta informació. I per un altre costat, està molt bé que una eina tant complerta com Ffmpeg també disposi d’un reproductor capaç de reproduir tots els còdecs amb els que pot treballar, però el problema és que Ffplay és un reproductor bastant incomplert que compte amb molt poques opcions doncs tant sols permet avançar o retrocedir la reproducció en fraccions de 10 segons o 1 minut, reproduir en pantalla completa i monitoritzar la forma d’ona del arxiu d’àudio, pel que fa que aquest reproductor sigui molt incomplert. No obstant, s’ha de tenir en compte que aquest software s’està actualitzant constantment el que vol dir que aquest anirà millorant contínuament.

85 FFMPEG, software de programari lliure.

Inspirant-se en els problemes acabats d’esmentar, es poden trobar fàcilment moltes línies de continuació per a aquest treball. Una d’elles podria ser generant “scripts” els quals introduint tant sols els paràmetres desitjats faci tot el que s’ha de fer per línia de comandes i així poder realitzar varies operacions a l’hora podent-se estalviar tot el procés d’anar fent cada operació a part per línia de comandes. Així doncs per exemple, es podria començar demanant el nom del arxiu d’entrada i el de sortida junt a quina operació es desitjaria realitzar i amb quins paràmetres si son necessaris, i així si hi ha algun tipus d’operació que el usuari realitzi molt freqüentment es pot estalviar tot el procés.

I per una altre part, una altre bona línia de continuació podria ser la generació d’una interfície gràfica capaç d’interactuar d’una manera més “amistosa” entre el usuari i el programa en si, on es pugui seleccionar què es desitja fer, els còdecs que es volen aplicar, els filtres que s’hi desitgen aplicar o si es desitja fer una transmissió amb Ffserver. Amés de poder millorar el reproductor Ffplay.

Per altra banda, complementant qualsevol de les dos opcions anteriors també es podria estudiar la opció de que el programa fos capaç de treballar amb més d’un arxiu a la vegada a l’hora de manipular els arxius de vídeo de manera que s’hi poguessin fer mescles entre ells.

I per acabar, una altre opció de continuació és la generació de més opcions i filtres a introduir al conjunt de Ffmpeg. Per exemple, canviar la informació de color d’un arxiu de vídeo, és a dir, convertir-lo en “blanc i negre” reproduint tant sols amb escala de grisos o de qualsevol altre color, o reproduir-lo tot en “blanc i negre” i algun color en concret. O poder afegir-hi algun altre arxiu de vídeo o imatge en les parts del vídeo original amb un color especificat poden fer el efecte de “pantalla de croma verd”. Sinó tant sols afegir més opcions per a tractar l’àudio doncs aquestes són gairebé inexistents.

86

11 Referències

[1] ffmpeg -help [2] ffprobe -help [3] ffplay -help [4] http://es.wikipedia.org/wiki/FFMPEG (Última consulta el 31/12/2013) [5] http://es.wikipedia.org/wiki/Portal:Software_libre (Última consulta el 31/12/2013) [6] http://howto-pages.org/ffmpeg/#intro (Última consulta el 31/12/2013) [7] http://ffmpeg.zeranoe.com/builds/ (Última consulta el 31/12/2013) [8] http://www.wikihow.com/Install-FFmpeg-on-Windows (Última consulta el 31/12/2013) [9] http://stephenjungels.com/jungels.net/articles/ffmpeg-howto.html (Última consulta el 31/12/2013) [10] http://sourceforge.net/projects/lame/files/ (Última consulta el 31/12/2013) [11] http://es.wikipedia.org/wiki/Códec_de_v%C3%ADdeo (Última consulta el 31/12/2013) [12] http://es.wikipedia.org/wiki/Cinepak (consultat el 13/2/2013) [13] http://www.digimad.es/h261-h263-h264-codecs-video.html (Última consulta el 31/12/2013) [14] http://alumnos.elo.utfsm.cl/~avalo/Proyecto/avance/avance1.pdf (Última consulta el 13/2/2013) [15] http://es.wikipedia.org/wiki/H.264/MPEG-4_AVC (Última consulta el 31/12/2013) [16] http://www.rnds.com.ar/articulos/044/RNDS_140W.pdf (Última consulta el 17/2/2013) [17] http://www.duiops.net/hifi/enciclopedia/m-jpeg.htm (Última consulta el 31/12/2013) [18] http://www.duiops.net/hifi/enciclopedia/mpeg.htm (Última consulta el 31/12/2013) [19] http://arantxa.ii.uam.es/~tacc1/mm_05/Slides/2per_page_pdf/J/10.pdf (Última consulta el 17/2/2013) [20] http://mpeg2multimedia.wordpress.com (Última consulta el 31/12/2013) [21] http://es.wikipedia.org/wiki/MPEG-4_Parte_2 (Última consulta el 31/12/2013) [22] http://wiki.multimedia.cx/index.php?title=Sorenson_Video_1 (Última consulta el 31/12/2013) [23] http://www.theora.org/doc/Theora.pdf (Última consulta el 17/3/2013) [24] http://codecpack.elisoft.net (Última consulta el 31/12/2013) [25] http://www.multimedia.cx/vp3-format.txt (Última consulta el 31/12/2013) [26] http://www.taringa.net/posts/info/9259183/Formatos-MP3-AVI-WMV-WMA- INFO.html (Última consulta el 31/12/2013) [27] http://es.wikipedia.org/wiki/Códec_de_audio#Caracter.C3.ADsticas_de_los_principale s_c.C3.B3decs_de_audio (Última consulta el 31/12/2013) [28] http://es.kioskea.net/contents/audio/aac-m4a.php3 (Última consulta el 31/12/2013)

87 FFMPEG, software de programari lliure.

[29] http://flac.sourceforge.net/documentation_format_overview.html (Última consulta el 31/12/2013) [30] http://www.desarrollomultimedia.es/articulos/tipos-de-formatos-o-archivos-de-audio- y-codecs.html (Última consulta el 31/12/2013) [31] http://es.kioskea.net/contents/audio/ogg- vorbis.php3#q=Caracteristicas+formato+vorbis&cur=1&url=%2F (Última consulta el 31/12/2013) [32] http://www.informatica-hoy.com.ar/multimedia/Formatos-audio-digital-WAV.php (Última consulta el 31/12/2013) [33] http://www.taringa.net/posts/info/9259183/Formatos-MP3-AVI-WMV-WMA- INFO.html (Última consulta el 31/12/2013) [34] http://ffmpeg.org/ffmpeg.html (Última consulta el 31/12/2013) [35] http://www.guardarcomofilms.net/index.php/2009/10/28/breve_tutorial_de_ffmpeg? blog=4 (Última consulta el 31/12/2013) [36] http://casidiablo.net/ffmpeg/ (Última consulta el 29/11/2012) [37] http://linuxers.org/book/export/html/593 (Última consulta el 31/12/2013) [38] http://es.scribd.com/doc/46514468/Manual-basico-del-comando-ffmpeg (Última consulta el 31/12/2013) [39] http://avp.stackexchange.com/questions/4563/how-can-i-crop-a-video-with-ffmpeg (Última consulta el 31/12/2013) [40] http://linuxers.org/tutorial/how-pad-videos-using-ffmpeg (Última consulta el 31/12/2013) [41] http://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20speed%20up%20/%20slow%20do wn%20a%20video (Última consulta el 31/12/2013) [42] http://es.scribd.com/doc/86876413/Ffmpeg-Doc (Última consulta el 31/12/2013) [43] http://www.ehowenespanol.com/crear-archivo-srt-como_29156/ (Última consulta el 31/12/2013) [44] http://superuser.com/questions/292925/ffmpeg-encode-subtitle (Última consulta el 31/12/2013) [45] http://ffmpeg.org/ffserver.html (Última consulta el 31/12/2013) [46] http://linux.goeszen.com/ffserver-guide.html (Última consulta el 31/12/2013) [47] http://informatica.gonzalonazareno.org/proyectos-ASI/2011-12/ara.pdf (Última consulta el 5/12/2012) [48] http://ffmpeg.org/sample.html (Última consulta el 31/12/2013) [49] http://blog.espol.edu.ec/vecheverria/tag/ffserver/ (Última consulta el 31/12/2013) [50] http://profesores.elo.utfsm.cl/~agv/elo330/2s08/projects/Duque_Ungemach/implem entacion.php (Última consulta el 14/12/2012) [51] http://ffmpeg.org/ffprobe.html (Última consulta el 31/12/2013) [52] http://linux.die.net/man/1/ffprobe (Última consulta el 31/12/2013) [53] http://manpages.ubuntu.com/manpages/oneiric/man1/ffprobe.1.html (Última consulta el 31/12/2013) [54] http://ffmpeg.org/doxygen/trunk/structAVPacket.html (Última consulta el 31/12/2013)

88

[55] http://ffmpeg.org/ffplay.html (Última consulta el 31/12/2013) [56] http://www.libsdl.org/index.php (Última consulta el 31/12/2013) [57] http://freebuntux.wordpress.com/2012/04/29/ffmpeg/ (Última consulta el 31/12/2013)

89