FFmpeg – Lo más completo en conversión multimedia

FFmpeg es una potente y completa herramienta de conversión de archivos multimedia. Aparte del conversor multimedia, el proyecto contiene estas aplicaciones, entre otras:

  • ffserver: Sirve para hacer streaming multimedia en directo a través de internet. No hablaré de él porque aún está en fase experimental y es de uso complejo.
  • ffplay: Reproductor multimedia que soporta todos los formatos del proyecto.
  • La biblioteca libavcodec que contienen los codecs y es usada en otros grandes proyectos como VLC

ÍNDICE

Antes de empezar

Con FFmpeg se instala libavcodec, una librería que soporta la mayoría de codecs multimedia existentes. Esto no quita de que haya algún formato no soportado o que requiera la instalación de otro software para funcionar con ffmpeg. En el caso de que esto te ocurra, lo mejor es buscar en los repositorios de tu distribución las librerías necesarias para la codificación de ese formato. Si quieres la lista completa de codecs en tu instalación actual, ejecuta ffmpeg -codecs

FFmpeg únicamente ofrece una interfaz en modo texto, manejable desde la terminal. Si prefieres usar una interfaz gráfica, existen algunas como WinFF, aunque no suelen ser tan completas.

Esta entrada y todos los comandos en ella se han probado en la versión 2.2.1 de FFmpeg. Es muy probable que si usas versiones anteriores haya algunas características que no funcionen o por lo menos no correctamente. Si usas una versión superior puede que haya formas más eficientes de hacer lo expuesto aquí o incluso que se haya cambiado por completo. Puedes saber tu versión del programa ejecutando ffmpeg -version. Ten también en cuenta que no soy ningún experto ni en FFmpeg ni en multimedia, por lo que puede haber fallos y muchas cosas mejorables en esta entrada.

Instalación

FFmpeg está disponible en los repositorios de la mayoría de distribuciones, en Debian y derivadas se puede instalar con:
aptitude install ffmpeg

Para paquetes precompilados de otras plataformas o descargar el código fuente y compilarlo tú mismo visita su página de descargas.

USOS

Sintaxis

La sintaxis del programa es la siguiente:
ffmpeg -i "archivo de entrada.formato" [opciones] "archivo de salida.formato"
Si no se especifican argumentos, intentará reconocer el formato especificado en el nombre del archivo de salida y convertirá la entrada con los parámetros por defecto.

Opciones más útiles

  • -i "ARCHIVO": archivo de entrada
  • -map archivo:pista: selecciona una pista concreta de uno de los archivos. Archivo es el número asignado a un archivo. Esta numeración es en función del orden en que se especificaron los archivos empezando por 0. Puedes saber la numeración exacta de las pistas ejecutando el programa sin especificar archivo de salida.
  • -n: no sobrescribir ningún archivo. Si el nombre de salida especificado es el mismo de un archivo existente, el comportamiento por defecto es preguntar si se desea que se sobrescrito.
  • -b:v *: Tasa de bits (o bitrate) del vídeo (bits/s).
  • -codec:v "codec": Códec de vídeo. Ej: mpeg4
  • -r *: Imágenes por segundo.
  • -s *x*: tamaño del vídeo. Ej: 320×240 (ancho por alto).
  • -aspect *:*: Aspecto. Ej: 16:9. También puede ser un número decimal.
  • -vn: Eliminar la pista de vídeo.
  • -b:a *: Tasa de bits (o bitrate) del audio (bits/s).
  • -ar *: Frecuencia del audio (Hz)
  • -codec:a "codec" : Códec de audio. Ej: mp3
  • -vol *: volumen del audio. 256=normal
  • -an: eliminar la pista de audio.
  • -sn: eliminar la pista de subtítulos.
  • -codec:s "codec": códec para los subtítulos. Ej: srt
  • -threads *:Indica el número de núcleos del procesador que quieres que se usen. Si el valor es 0, el programa seleccionará el número de núcleos que vaya a proporcionar un mejor resultado
  • -loglevel valor: selecciona la cantidad de información que es mostrada en pantalla durante el proceso. Los posibles valores, de menor a mayor detalle son: quiet, panic, fatal, error, warning, info, verbose y debug. Siendo quiet que no se reporta nada, info el valor por defecto y debug el máximo valor, con información útil para diagnosticar errores del programa.

NOTA: Todos los valores numéricos, entre ellos la tasa de bits, si no se especifica lo contrario, se mide en bits/s. Para medirlo en kilobits añade «K» al final del número, «M» para megabits y «G» para gigabits. Para usar los prefijos binarios (múltiplos de 1024) es Ki, Mi,… y también se pueden usar bytes: B (KiB, MiB, GiB o KB, MB, GB).

Subtítulos

Existen varias formas de usar subtítulos para un archivo de vídeo:

  1. Vídeo y subtítulos en archivos diferentes. Por ejemplo: pelicula.avi y pelicula.srt
  2. Ambos en diferentes pistas de un mismo archivo contenedor, por ejemplo el formato mkv
  3. Subtítulos incrustados en el vídeo. Esta es la opción menos apropiada, porque los subtítulos no se pueden extraer ni desactivar, aunque es útil para poder reproducir vídeos con subtítulos en dispositivos que no soportan la selección de los mismos desde otro archivo o ninguno de los formatos contenedores.

Para extraer la pista de subtítulos de un archivo de vídeo se puede usar el siguiente comando. Se puede cambiar el formato de los subtítulos, pero srt es uno de los más habituales y ampliamente soportado:
ffmpeg -i archivo_de_video.formato -codec:s srt subtitulos.srt
Si el archivo contiene más de una pista con subtítulos guardará la primera. Puedes ver todas las pistas del archivo con ffmpeg -i archivo. Para seleccionar una pista en concreto usa la opción -map, por ejemplo, para extraer los subtítulos que están en la pista 4 de un archivo:
ffmpeg -i archivo_de_video.formato -map 0:4 -codec:s srt subtitulos.srt

Para añadir una nueva pista de subtítulos simplemente tienes que especificarla entre los archivos de entrada. También tienes que tener en cuenta que no todos los formatos de archivo soportan esto. Uno que sí y que es bastante común, es .mkv. El comando para crear un archivo mkv a partir de un vídeo cualquiera y un archivo de subtítulos manteniendo la calidad y los codecs es:
ffmpeg -i video.formato -i subtitulos.formato -codec copy video_resultante.mkv
Puedes añadir tantos archivos de subtitulos de entrada, precedidos por el argumento -i, como pistas de subtítulos quieras.

Para incrustar los subtítulos en un vídeo hay que usar filtros, que son incompatibles con la opción de escribir copy para el codec, por lo que habrá que averiguar primero cuáles eran el bitrate del audio y del vídeo del archivo original para especificarlos en el comando y mantener la calidad:
ffmpeg -i video.formato -vf subtitles="subtitulos.formato" -b:v bitrate_video -b:a bitrate_audio archivo_de_salida.formato

Comandos preparados

Ahora una serie de diferentes comandos para cumplir con diferentes necesidades.

Comando para PSP
ffmpeg -i "entrada" -f psp -r 29.97 -b:v 512ki -ar 24000 -b:a 64ki -s 320x240 "salida.mp4"
Puede funcionar con otros tamaños, pero este sirve bien. Buen aspecto calidad/peso y se puede ver en pantalla completa. Para verlo en la PSP debes copiarlo a la carpeta «VIDEO» dentro de la Memory Stick.

Comando para PS3
ffmpeg -i original.formato -vf "scale=720:-2" -r 23.98 -b:v 1Mi -b:a 224ki salida.mp4
Lo que hace este comando es tomar adecuar el tamaño del vídeo a una anchura de 720 pixels manteniendo la proporción. Si tu vídeo es de mala calidad deberías ajustar los valores del bitrate y el tamaño para no hacer que pese más sin ganar calidad y al contrario: si es de mejor calidad quizás te interese subir el bitrate y aumentar el tamaño.

Comando para Android
ffmpeg -i "ARCHIVO ORIGEN" -r 30 -b 500k -ar 24000 -ab 128k -s 480x360 "NOMBRE.mp4" -threads 0
Explicación: Este código lo he sacado de los datos que aparecen en la página de android sobre formatos multimedia compatibles Y es de calidad alta, pero sin llegar a HD, ya que vídeos HD no está disponible para todos los dispositivos ni versión de Android. Recuerda que actualizando Android conseguirás soportar más codecs. También existen numerosas aplicaciones para Android como VLC que permiten reproducir multitud de formatos tanto de audio como de vídeo.

FFPLAY

FFplay es un reproductor multimedia muy sencillo con el que puedes reproducir todos los formatos que soporta ffmpeg.

El uso es el siguiente:
ffplay "archivo multimedia"

Las opciones que ofrece el programa puedes verlas escribiendo:
ffplay -h
Y para el manual del programa:
man ffplay

Pero estas son las opciones más destacadas que ofrece ffplay

  • -x * : Forzar el ancho del vídeo
  • -y * : Forzar la altura del vídeo
  • -ss * : Ir a la posición del vídeo (en segundos) especificada.
  • -window_title «título» : Asigna un título diferente al del archivo para la ventana.
  • -loop * : Reproduce el mismo archivo un número * de veces. 0 = bucle infinito.
  • -autoexit : Finaliza el programa cuando finalice la reproducción
  • -nodisp : Reproduce sin ventana (útil para canciones)

Controles durante la reproducción:

  • q : Salir
  • f : Pantalla completa
  • p o ESPACIO : Pausar la reproducción
  • Flecha izquierda : 10 segundos atrás
  • Flecha derecha : 10 segundos hacia delante
  • Flecha abajo : 1 minuto atrás
  • Flecha arriba : 1 minuto hacia delante

12 comentarios en “FFmpeg – Lo más completo en conversión multimedia

  1. Pingback: Cambiar música de inicio de sesión | FreeBunTux

  2. Pingback: Pequeño “truco” para ejecutar muchos comandos seguidos -> Script bash | FreeBunTux

  3. Pingback: Aplicaciones y Paquetes Recomendados en Ubuntu | FreeBunTux

  4. Si queremos cambiar el codec de audio a un vídeo, por ejemplo en formato .avi, que este con ac3 o aac y pasarlo mp3 para poderlo reproducir directamente en televisores, decodificadores o reproductores DVDs el comando sería:

    ffmpeg -i entrada.avi -vcodec copy -acodec libmp3lame -ab 128k -ac 2 -threads 0 salida.avi

  5. Pingback: NVIDIA monitoreo de la temperatura de la GPU | FreeBunTux

  6. Pingback: Aplicaciones y Paquetes Recomendados en Ubuntu | FreeBunTux

  7. Quiero añadir una pista de subtítulos a un vídeo mkv que ya cuenta con una pista y al poner -i fichero.mkv -i fichero.srt el resultado no añade ninguna nueva pista de subtítulos.

Comenta!