Hay muchas herramientas de código abierto por ahí para editar, ajustar y convertir multimedia en exactamente lo que necesitas. Herramientas como Audacity o Handbrake son fantásticas, pero a veces sólo quieres cambiar un archivo de un formato a otro rápidamente. Entre en FFmpeg.
FFmpeg es una colección de diferentes proyectos para manejar archivos multimedia. A menudo se utiliza detrás de las escenas en muchos otros proyectos relacionados con los medios de comunicación. A pesar de su nombre, no tiene nada que ver con el Moving Picture Experts Group o los innumerables formatos multimedia que ha creado.
En este artículo utilizaré FFmpeg a través de la herramienta de línea de comandos ffmpeg, que es sólo una pequeña parte del proyecto FFmpeg. Está disponible en muchos sistemas operativos diferentes y se incluye en algunos sistemas operativos por defecto. Se puede descargar desde el sitio web de FFmpeg o a través de la mayoría de los gestores de paquetes.
FFmpeg es una poderosa herramienta que puede hacer casi cualquier cosa que se pueda imaginar con archivos multimedia. En este artículo, nos interesa utilizarlo para convertir archivos, por lo que no vamos a profundizar en todo su conjunto de características. Antes de ver el uso de FFmpeg, primero tenemos que echar un vistazo rápido a lo que es exactamente un archivo multimedia.
Archivos multimedia
En una vista de muy alto nivel, un archivo multimedia se divide en un contenedor y sus flujos. Los flujos incluyen los componentes audiovisuales reales, como el audio o el vídeo de una película, y se codifican utilizando una codificación multimedia concreta, o códec. Cada códec tiene sus propias propiedades, puntos fuertes y débiles. Por ejemplo, el códec FLAC es bueno para el audio sin pérdidas de alta calidad, mientras que Vorbis está diseñado para competir con el MP3 en cuanto al tamaño de los archivos y ofrecer una mejor calidad de audio. Esto significa que un archivo con formato FLAC será mucho más grande que un flujo de audio Vorbis, pero debería sonar mejor. Ninguno es intrínsecamente mejor que el otro, ya que cada uno intenta hacer cosas diferentes.
El contenedor es la envoltura de los flujos. Presenta una única interfaz con la que los reproductores y las herramientas multimedia pueden interactuar. Algunos contenedores son muy avanzados y permiten cualquier tipo de flujo, incluyendo múltiples flujos de vídeo y audio dentro de un solo contenedor. Sin embargo, los flujos en un contenedor no tienen por qué ser sólo de audio o vídeo. Diferentes contenedores permiten diferentes flujos, por ejemplo, subtítulos, información de capítulos u otros metadatos. Todo depende de lo que el contenedor esté configurado para permitir.
Esta es una representación abstracta de los archivos multimedia y se salta muchas de las diferencias entre contenedores. Muchos requieren ciertos flujos y metadatos o ponen restricciones a los códecs o contenidos permitidos. Esta explicación es suficiente para que puedas leer este artículo. Para obtener más información, haga clic en los enlaces anteriores.
Tenga en cuenta que la codificación de vídeo y audio puede tardar mucho tiempo en ejecutarse. Usted debe estar preparado para establecerse en un tiempo cuando se utiliza FFmpeg.
Conversión básica
Lo que hace tropezar a la mayoría de la gente cuando se trata de convertir audio y vídeo es la selección de los formatos y contenedores correctos. Por suerte, FFmpeg es bastante inteligente con su configuración por defecto. Por lo general, selecciona automáticamente los códecs y contenedores correctos sin ninguna configuración compleja.
Por ejemplo, digamos que tienes un archivo MP3 y quieres convertirlo en un archivo OGG:
ffmpeg -i input.mp3 output.ogg
Este comando toma un archivo MP3 llamado input.mp3 y lo convierte en un archivo OGG llamado output.ogg. Desde el punto de vista de FFmpeg, esto significa convertir el flujo de audio MP3 en un flujo de audio Vorbis y envolver este flujo en un contenedor OGG. No tienes que especificar los tipos de flujo o contenedor, porque FFmpeg lo ha calculado por ti.
Esto también funciona con los vídeos:
ffmpeg -i input.mp4 output.webm
Debido a que WebM es un formato bien definido, FFmpeg sabe automáticamente qué vídeo y audio puede soportar y convertirá los flujos para que sean un archivo WebM válido.
Dependiendo del contenedor que elijas, esto no siempre funcionará. Por ejemplo, los contenedores como Matroska están diseñados para manejar casi cualquier flujo que se quiera poner en ellos, sean válidos o no. Esto significa que el comando:
ffmpeg -i input.mp4 output.mkv
puede resultar en un archivo con los mismos códecs que tenía input.mp4, que puede o no ser lo que quieres.
Seleccionando tus códecs
¿Entonces qué haces cuando quieres usar un contenedor como Matroska (que puede manejar casi cualquier stream) pero aún así influir en qué códecs están en la salida? ¡FFmpeg al rescate! Puedes seleccionar los códecs necesarios utilizando la bandera -c.
Esta bandera te permite establecer los diferentes códecs a utilizar para cada flujo. Por ejemplo, para establecer que el flujo de audio sea Vorbis, utilizarías el siguiente comando:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
Lo mismo se puede hacer para cambiar el flujo de vídeo así como el de audio:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
Esto hará un contenedor Matroska con un flujo de vídeo VP9 y un flujo de audio Vorbis, esencialmente lo mismo que el WebM que hicimos antes.
El comando ffmpeg -codecs imprimirá todos los códecs que FFmpeg conoce. La salida de este comando cambiará dependiendo de la versión de FFmpeg que tengas instalada.
Cambiar un solo stream
Más a menudo de lo que te gustaría, el archivo que tienes es parcialmente correcto con un solo stream en el formato equivocado. Puede llevar mucho tiempo recodificar el flujo correcto. FFmpeg puede ayudar en esta situación:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Este comando copia el flujo de vídeo de input.webm en output.mkv y codifica el flujo de audio Vorbis en un FLAC. La bandera -c es realmente potente.
Cambiar un contenedor
El ejemplo anterior puede aplicarse tanto a los flujos de audio como a los de vídeo, lo que permite convertir de un formato de contenedor a otro sin tener que hacer ninguna codificación adicional del flujo:
ffmpeg -i input.webm -c:av copy output.mkv
Influir en la calidad
Ahora que tenemos controlados los códecs, la siguiente pregunta es: ¿Cómo establecemos la calidad de cada flujo?
El método más sencillo es cambiar la tasa de bits, lo que puede dar lugar o no a una calidad diferente. La capacidad de los humanos para ver y oír no es tan limpia y clara como nos gustaría pensar. A veces, cambiar la velocidad de bits supone una gran diferencia en la calidad subjetiva. Otras veces no hace más que cambiar el tamaño del archivo. A veces es muy difícil saber lo que sucederá sin probarlo.
Para establecer la tasa de bits de cada flujo, se utiliza la bandera -b, que funciona de manera similar a la bandera -c, excepto que en lugar de las opciones de códec se establece una tasa de bits.
Por ejemplo, para cambiar la tasa de bits del vídeo, se utilizaría así:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Esto copiará el audio (-c:a copy) de input.webm y convertirá el vídeo a un códec VP9 (-c:v vp9) con una tasa de bits de 1M/s (-b:v), todo ello en un contenedor Matroska (output.mkv).
Otra forma en la que podemos influir en la calidad es ajustando la tasa de fotogramas del vídeo utilizando la opción -r:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Esto crea un nuevo Matroska con el flujo de audio copiado y la tasa de fotogramas del flujo de vídeo forzada a 30 fotogramas por segundo, en lugar de utilizar la tasa de fotogramas de la entrada (-r 30).
También puedes ajustar las dimensiones de tu vídeo utilizando FFmpeg. La forma más sencilla es utilizar un tamaño de vídeo predeterminado:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Esto modifica el vídeo a 1280×720 en la salida, pero puede establecer la anchura y la altura manualmente si lo desea:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Esto produce exactamente la misma salida que el comando anterior. Si desea establecer tamaños personalizados en FFmpeg, recuerde que el parámetro de la anchura (1280) viene antes de la altura (720).
Ajustar la velocidad de fotogramas y la tasa de bits son dos técnicas rudimentarias pero eficaces para afectar a la calidad de los medios. Ajustar estos valores muy alto no puede mejorar la calidad de una fuente existente si su calidad ya es baja.
Cambiar estos ajustes es más efectivo para reducir rápidamente un flujo de alta calidad para hacer un archivo de menor tamaño. Ajustar el tamaño del vídeo no puede mejorar la calidad, pero puede hacer que quepa mejor en una tableta en lugar de en el televisor. Cambiar el tamaño de un vídeo de 640×480 a 4K no lo mejorará.
Cambiar la calidad de tus archivos es una cuestión muy subjetiva, lo que significa que no hay una forma que funcione siempre. El mejor método es hacer algunos cambios y probar si se ve o suena mejor para usted.
Modificar los flujos
A menudo tienes un archivo que es casi perfecto, y sólo necesitas recortar algunas partes. Esto puede hacerse más fácilmente con una herramienta que te muestre lo que estás cambiando, pero si sabes exactamente dónde quieres recortarlo, es muy fácil hacerlo en FFmpeg:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Esto copiará los flujos de vídeo y audio (-c:av copy) pero recortará el vídeo. La opción -t establece la duración del corte en 10 segundos y la opción -ss establece el punto de inicio del vídeo para el recorte, en este caso en un minuto (00:01:00). Puede ser más preciso que sólo horas, minutos y segundos, bajando a milisegundos si es necesario.
Extrayendo el audio
A veces no le interesa realmente el vídeo, sólo quiere el audio. Por suerte esto es muy sencillo en FFmpeg con la bandera -vn:
ffmpeg -i input.mkv -vn audio_only.ogg
Este comando extrae sólo el audio de la entrada, lo codifica como Vorbis, y lo guarda en audio_only.ogg. Ahora tienes un flujo de audio aislado. También puede utilizar las banderas -an y -sn de la misma manera para eliminar los flujos de audio y subtítulos.
Haciendo un GIF
Recientemente, los GIFs animados (con una g dura porque no soy un monstruo) han hecho una reaparición. Personalmente creo que el GIF es el peor formato que se puede elegir para un vídeo. Tiene una calidad de compresión y un tamaño terribles; tiene límites muy duros en torno a los colores, la velocidad de los fotogramas y los metadatos del contenedor; y no admite audio. Aun así, es bastante popular. Entonces, ¿cómo puedes convertir un clip de vídeo en un GIF animado?
Usar la bandera -an, similar a lo que hicimos anteriormente, es mejor que crear un GIF animado si quieres hacer un vídeo sin audio, pero hay muchos lugares que soportan GIFs que no soportan un formato de vídeo diferente. Para todos ellos:
ffmpeg -i input.mkv output.gif
Este comando crea un GIF de las mismas dimensiones que el archivo de entrada. Esto suele ser una mala idea, ya que los GIF no se comprimen bien en relación con otros formatos de vídeo (en mi experiencia, un GIF será unas ocho veces más grande que el vídeo de origen). Puede ser útil utilizar la opción -s para cambiar el tamaño de su GIF a algo un poco más pequeño, especialmente si la fuente de entrada es bastante grande, como el vídeo de alta definición.
Otras herramientas
Aunque FFmpeg es la herramienta para la mayoría de las tareas AV, no es perfecto para todo. Hay algunas herramientas que, usadas junto con FFmpeg, pueden hacer que todo sea un poco más fácil.
Conseguir vídeos de YouTube
Puede ser muy fácil subir algo a YouTube, perder el vídeo original de origen y que sólo quede la versión de YouTube. ¿Cuál es la forma más fácil de recuperar una copia de tus vídeos de YouTube?
Youtube-dl es una pequeña e ingeniosa herramienta que puedes utilizar para obtener vídeos de YouTube y de otros servicios de transmisión de vídeos. Es muy fácil de usar:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Este comando descarga el vídeo en la URL indicada y lo guarda localmente.
Youtube-dl tiene varias opciones para controlar la calidad y el formato del vídeo descargado, pero me resulta más fácil usar el comando anterior. Descarga el audio y el vídeo de mayor calidad en un solo archivo, y luego uso FFmpeg para convertirlos al formato que quiero.
Obtener información sobre los medios
A veces todo lo que necesitas saber es lo que hay dentro del contenedor de medios. Aunque hay varias herramientas que pueden hacer esto, mi preferida es MediaInfo. MediaInfo muestra toda la información dentro de un contenedor de medios, para cada uno de los diferentes flujos, así como los metadatos para el archivo de entrada. Esto le da todo lo que podría querer saber-y probablemente un montón de cosas que no lo hizo.
Ejecutar el comando mediainfo inputFile.mkv escupe una lista de información sobre el archivo de entrada en una forma legible por los humanos.
Y más…
Esto es sólo rascar la superficie de lo que FFmpeg puede hacer. Por suerte, la documentación de FFmpeg y de las demás herramientas del proyecto es muy buena y vale la pena consultarla. Te enseñará todo sobre los diferentes trucos que este perro puede hacer.
Si buscas una herramienta con una interfaz gráfica para convertir multimedia, Handbrake es una herramienta excepcionalmente buena disponible en Linux, Mac OS X y Windows. Handbrake utiliza FFmpeg (entre otras herramientas) bajo el capó.