# FFmpeg

FFmpeg es una colección de software libre que puede grabar, convertir (transcodificar) y hacer streaming de audio y vídeo. Incluye libavcodec, una biblioteca de códecs. FFmpeg está desarrollado en GNU/Linux, pero puede ser compilado en la mayoría de los sistemas operativos, incluyendo Windows. El proyecto comenzó por Gerard Lantau, un seudónimo de Fabrice Bellard, y ahora es mantenido por Michael Niedermayer. Es destacable que la mayoría de los desarrolladores de FFmpeg lo sean también del proyecto MPlayer (más un miembro del proyecto Xine), y que FFmpeg esté hospedado en el servidor del proyecto MPlayer.
FFmpeg está liberado bajo una licencia GNU Lesser General Public License 2.1+ o GNU General Public License 2+ (dependiendo de qué bibliotecas estén incluidas). Los desarrolladores recomiendan utilizar el último snapshot de Subversion ya que mantienen constantemente una versión estable.
FFmpeg es un programa de línea de órdenes que en cierta medida puede ser utilizado tanto por personas con conocimientos avanzados como por usuarios con conocimentos básicos. Es capaz de elegir el códec con sólo escribir la extensión. Por ejemplo, FFmpeg usará x264 si elegimos .mp4, mpeg4 si usamos .avi, VP8 si usamos .webm, etc.

## Componentes

El proyecto está compuesto por:
* ffmpeg: es una herramienta de línea de comandos para convertir audio o video de un formato a otro. También puede capturar y codificar en tiempo real desde DirectShow, una tarjeta de televisión u otro dispositivo compatible.
* ffserver: es un servidor de streaming multimedia de emisiones en directo que soporta HTTP (la compatibilidad con RTSP está en desarrollo). Todavía no está en fase estable, y de momento no está disponible para Windows.
* ffplay: es un reproductor multimedia basado en SDL y las bibliotecas FFmpeg.
* libavcodec: es una biblioteca que contiene todos los códecs de FFmpeg. Muchos de ellos fueron desarrollados desde cero para asegurar una mayor eficiencia y un código altamente reutilizable.
* libavformat: es una biblioteca que contiene los multiplexadores/demultiplexadores para los archivos contenedores multimedia.
* libavutil: es una biblioteca de apoyo que contiene todas las rutinas comunes en las diferentes partes de FFmpeg.
* libpostproc: es una biblioteca de funciones de postproceso de vídeo.
* libswscale: es la biblioteca de escalado de vídeo.

## Códecs

Es la biblioteca principal del proyecto FFmpeg es capaz de codificar/decodificar en varios formatos de audio y vídeo, está desarrollada en C.

### Códecs de video implementados

* MPEG-1.
* MPEG-2.
* MPEG-4 Parte 2 (el formato utilizado por los códecs DivX y Xvid).
* H.261.
* H.263.
* H.264/MPEG-4 AVC (únicamente la decodificación).
* x264
* H.265/HEVC/x265
* WMV versión 7, 8 y 9 (únicamente la decodificación).
* Sorenson codec.
* Cinepak.
* MJPEG.
* Huffyuv.
* Snow.
* Theora (únicamente la decodificación).
* VP3 / VP5 / VP6 (únicamente la decodificación).
* VP8 / WebM.
El códec de MPEG-4 utilizado por defecto en el FFmpeg tiene el código FourCC de FMP4.

### Códecs de audio implementados

* Apple Lossless.
* AAC LC (Usar con -strict experimental).
* Cook Codec.
* FLAC.
* MP2.
* MP3.
* Shorten.
* QDM2.
* RealAudio 1.0.
* RealAudio 2.0.
* Vorbis.
* WavPack.
* WMA.

## Caso útil

Si el problema es el tamaño de un archivo de video que se puede considerar como excesivo para la calidad del video y se necesita que el archivo conserve la calidad (dentro de lo posible), o simplemente que su tamaño sea menor; una buena opción sin usar códecs privativos es usar el códec de video H264 o también conocido como MPEG-4 parte 10.
-i Para indicar el archivo (formato) a convertir, en este caso "in_Pelicula.avi".
-ab Para indicar la tasa de bits, se indican 128kbps. Por defecto FFmpeg convierte los videos a una tasa de bits de 64k, puede que sea necesario saber la tasa de bit del video original e indicarla para conservar la calidad del sonido. Se puede consultar la información de un video con "ffprobe".
-vcodec Para indicar el códec de video a utilizar, en este caso se le indica libx264. Se puede consultar los códecs de video y audio utilizando "ffmpeg -codecs".
Un ejemplo práctico algo más extenso para comprimir un archivo de vídeo conservando una calidad casi transparente, con el códec libre x264 y aac lc:

## Legalidad

El estado legal del FFmpeg varía según el país. Algunos códecs incluidos, (como el Soreson 3) son reclamados por los dueños de las patentes. Estos reclamos tendrían valor en países como Estados Unidos donde se reconocen las patentes de software. Aun así muchos de estos códecs están liberados bajo términos que prohíben la ingeniería inversa, incluso para facilitar la interoperabilidad, términos que están prohibidos en algunos países. Por ejemplo en algunos países de la Unión Europea no se reconocen las patentes de software o disponen de leyes que expresamente permiten la ingeniería inversa para cuestiones de interoperabilidad. En cualquier caso muchas distribuciones de GNU/Linux no incluyen FFmpeg para evitar complicaciones legales.

## Proyectos que hacen uso de FFmpeg

FFmpeg es usado en muchos proyectos libres y propietarios, incluyendo ffmpeg2theora, VLC, MPlayer, HandBrake, Blender, Google Chrome, MystiQ, Videomorph y otros.
También hay varios frameworks multimedia que hacen uso de FFmpeg como DirectShow/VFW (ffdshow), QuickTime (perian), GStreamer, OpenMAX, xine.