FFmpeg

La Navaja Suiza del Multimedia

jEsuSdA 8)

Edición y Maquetación de Audio y Vídeo (Avanzado)

Monsters

Índice del Módulo

Este módulo tiene una curva de aprendizaje progresiva. Empezaremos con conceptos muy sencillos para ir construyendo sobre ellos hasta llegar a la automatización de tareas complejas. El objetivo final es que os sintáis cómodos usando la línea de comandos para resolver problemas multimedia de forma rápida y eficiente.

Bloque 0: Nuestro Laboratorio Digital

La Máquina Virtual con Linux (Debian)

Máquina Virtual con Linux

Para este módulo usaremos una máquina virtual preconfigurada con Debian MX-Linux, una distribución de Linux muy estable. Esto nos asegura que todos tenemos el mismo entorno de trabajo y las mismas herramientas, evitando problemas de compatibilidad.

¿Por qué usar Linux para FFmpeg?

Importante: FFmpeg funciona exactamente igual en Windows o macOS. Lo que aprendáis aquí es 100% aplicable a cualquier sistema.

La "terminal" o "consola" puede parecer intimidante, pero no es más que una forma de dar instrucciones al ordenador mediante texto en lugar de con clics. Es más directo, más rápido y, sobre todo, automatizable.

¿Por qué usar línea de comandos?

Porque, por difícil que te parezca creerlo...

TODO lo que haces en un entorno gráfico lo puedes hacer con COMANDOS... pero no todo lo que puedes hacer con comandos puedes hacerlo en un entorno gráfico.

Comandos Esenciales para Movernos

Solo necesitas saber tres comandos básicos para manejarte en la terminal de la máquina virtual:

¡Y eso es casi todo lo que necesitamos para empezar!

Comandos Esenciales para Movernos

ls

listar. Muestra los archivos y carpetas del directorio actual.
Comandos básicos Linux

Comandos Esenciales para Movernos

pwd

print working directory. Te dice en qué carpeta estás ahora mismo.
Comandos básicos Linux

Comandos Esenciales para Movernos

cd [nombre_carpeta]

change directory. Te permite moverte a otra carpeta.
Comandos básicos Linux

Comandos Esenciales para Movernos

Solo necesitas saber tres comandos básicos para manejarte en la terminal de la máquina virtual:

6.1: ¿Qué es FFmpeg?

El motor oculto de internet

Logos de aplicaciones que usan FFmpeg

FFmpeg es una colección de software libre que graba, convierte y procesa casi cualquier formato de audio y vídeo. No es un programa con ventanas, es una herramienta de línea de comandos.

La colección FFmpeg incluye principalmente tres herramientas: ffmpeg (el conversor), ffprobe (el analizador) y ffplay (un reproductor muy básico). En este curso nos centraremos en los dos primeros.

La Anatomía de un Comando FFmpeg

La mayoría de comandos de FFmpeg siguen esta estructura:

ffmpeg [opciones globales] -i entrada.mp4 [opciones de procesado] salida.mkv

No te preocupes por memorizar esto. La clave es entender que hay un orden lógico. La práctica hará que lo interiorices de forma natural.

La Anatomía de un Comando FFmpeg

Esquema del comando

Paso 0: "Interroga" tus archivos con ffprobe

Antes de modificar nada, es fundamental conocer nuestro material. ffprobe es como MediaInfo.

Comando:

ffprobe video_ejemplo.mp4

Resultado (simplificado):


Duration: 00:00:30.5, start: 0.000000, bitrate: 2048 kb/s
  Stream #0:0: Video: h264 (High), yuv420p, 1920x1080, 25 fps
  Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, 192 kb/s

ffprobe es una herramienta de solo lectura, es 100% segura, nunca modificará tus archivos. Acostúmbrate a usarla antes de realizar una conversión para saber de qué punto partes. Por ejemplo, si el audio ya está en formato AAC a 192 kb/s, y ese es tu objetivo, quizás no necesites reconvertirlo, ahorrando tiempo y una posible pérdida de calidad.

Paso 0: "Interroga" tus archivos con ffprobe


Duration: 00:00:30.5, start: 0.000000, bitrate: 2048 kb/s
  Stream #0:0: Video: h264 (High), yuv420p, 1920x1080, 25 fps
  Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, 192 kb/s

Nos dice el códec, la resolución, los fotogramas por segundo (fps), el formato de audio... ¡Información crucial!

6.2: Tus Primeras Conversiones

La Magia Automática

FFmpeg es muy inteligente. Si no le especificas nada, tomará las decisiones más lógicas basándose en la extensión del archivo de salida.

¿Qué ocurre "por debajo"? Al pedirle un `.mp4`, FFmpeg elige por defecto el códec de vídeo H.264 y el de audio AAC, la combinación más compatible del mundo. Al pedirle un `.mp3`, elige el códec MP3 LAME con una calidad razonable. Estas conversiones "a ciegas" son perfectas para tareas rápidas donde la máxima compatibilidad es el objetivo.

6.2: Tus Primeras Conversiones

La Magia Automática

El parámetro -vn significa "video no". Le dice a FFmpeg que ignore la pista de vídeo.

6.3: Tomando el Control

A veces, las opciones por defecto no son suficientes. Necesitamos un control más preciso:

6.3: Tomando el Control

Si solo quieres cambiar el contenedor (ej. de .mkv a .mp4) pero los códecs internos ya son correctos, puedes usar -c copy.

Esto no reconvierte nada, simplemente "reempaqueta" los datos. Es un proceso casi instantáneo y sin ninguna pérdida de calidad.

Flujo de Trabajo Avanzado (Audio)

Masterización para Spotify (Norma EBU R128)

Recordad el proceso en Audacity con plugins. Con FFmpeg logramos un resultado más preciso y automatizable mediante un proceso de dos pasadas:

Este flujo de trabajo en dos pasos es el método más profesional. El primer paso nos permite verificar los valores actuales del audio. En flujos de trabajo muy avanzados, los valores exactos medidos en el paso 1 se pueden introducir como parámetros en el paso 2 para una precisión absoluta.

Sin embargo, el filtro loudnorm de FFmpeg es tan avanzado que, incluso usando solo el comando del "Paso 2", internamente realiza un análisis muy similar para aplicar los cambios de la forma más correcta posible.

Flujo de Trabajo Avanzado (Audio)

Masterización para Spotify (Norma EBU R128)

Paso 1: Analizar el audio

Primero, escaneamos el archivo para que FFmpeg mida sus propiedades de sonoridad (Loudness) sin modificarlo. Este comando nos dará las estadísticas en la consola.

ffmpeg -i podcast_crudo.wav -af loudnorm=print_format=summary -f null -

Paso 2: Aplicar la normalización

Ahora, usamos un segundo comando para generar el archivo final, indicando los valores objetivo que exige la norma EBU R128 (y que plataformas como Spotify usan).

ffmpeg -i podcast_crudo.wav -af loudnorm=I=-14:TP=-1 podcast_masterizado.wav

Flujo de Trabajo Avanzado (Vídeo)

Estabilización de Vídeo Profesional

FFmpeg usa un proceso de dos pasadas que resulta en una estabilización mucho más suave y sin artefactos.

Flujo de Trabajo Avanzado (Vídeo)

Estabilización de Vídeo Profesional

Paso 1: FFmpeg analiza cada fotograma del vídeo y guarda toda la información sobre las vibraciones y movimientos en un archivo de texto (transforms.trf).

ffmpeg -i video_movido.mp4 -vf vidstabdetect=file=transforms.trf -f null -

Paso 2: El segundo comando lee el archivo transforms.trf y utiliza esos datos para desplazar y rotar cada fotograma, generando un nuevo vídeo estable.

ffmpeg -i video_movido.mp4 -vf vidstabtransform=input=transforms.trf video_estable.mp4

La Necesidad de Automatizar

¿Y si pudiéramos "guardar" nuestros comandos?

El Problema:

  • Escribir comandos largos y complejos es tedioso.
  • Recordar la secuencia exacta de dos o más comandos es difícil.
  • Es muy fácil cometer un error de escritura y tener que empezar de nuevo.

Los flujos de trabajo de audio y vídeo que acabamos de ver son el ejemplo perfecto.

La Solución: ¡Scripts!

Un script no es más que un archivo de texto plano que contiene una secuencia de comandos de terminal.

Es, literalmente, un "guion" o "receta" que le damos al ordenador para que lo ejecute paso a paso, sin errores y todas las veces que queramos.

Piensa en un script como una receta de cocina. En lugar de tener que recordar todos los ingredientes y pasos cada vez que cocinas, simplemente sigues la receta. Un script nos permite hacer exactamente eso con comandos, garantizando la consistencia y ahorrándonos un tiempo enorme.

Creando y Ejecutando Nuestro Primer Script

En tres sencillos pasos

1. Crear y Editar el Archivo

Un script es un archivo de texto con la extensión .sh (por convención). Lo primero que añadimos es una línea "mágica":

#!/bin/bash

# Esto es un comentario
echo "Hola, soy un script!"
echo "Ahora voy a listar los archivos:"
ls -l

La línea #!/bin/bash (llamada "shebang") y hay que añadirla siempre como primera línea de nuestros scripts.

¿Por qué la extensión .sh?

Es una convención para identificar rápidamente los "shell scripts". El sistema Linux en realidad no se fija en la extensión, sino en el permiso de ejecución y en la línea "shebang" para saber cómo manejar el archivo.

La línea #!/bin/bash (llamada "shebang") le dice al sistema que debe usar el intérprete de Bash para ejecutar los comandos.

¿Qué es Bash?

Es el intérprete de comandos más común en los sistemas Linux, el "cerebro" que lee y ejecuta lo que escribimos en la terminal... y en nuestros scripts.

Creando y Ejecutando Nuestro Primer Script

En tres sencillos pasos

2. Dar Permisos de Ejecución

Por seguridad, los archivos de texto no se pueden ejecutar por defecto. Le damos permiso una sola vez con el comando chmod (change mode):

chmod +x mi_script.sh

Creando y Ejecutando Nuestro Primer Script

En tres sencillos pasos

3. Ejecutar el Script

Para lanzarlo, simplemente escribimos su nombre precedido de ./ que significa "en este directorio actual":

./mi_script.sh

De Comandos a "Recetas"

La Automatización es tu Aliada

Un script no es más que un archivo de texto plano que contiene los comandos que queremos ejecutar, uno tras otro. Es una "receta" que el ordenador puede seguir.

Ejemplo (estabilizar-video.sh):


#!/bin/bash
echo "Paso 1: Analizando el vídeo..."
ffmpeg -i movido.mp4 -vf vidstabdetect=file=data.trf -f null -
echo "Paso 2: Creando el vídeo estabilizado..."
ffmpeg -i movido.mp4 -vf vidstabtransform=input=data.trf estable.mp4
echo "¡Proceso completado!"

Para ejecutarlo, simplemente escribimos en la terminal: ./estabilizar-video.sh

El Superpoder de los Bucles

¿Y si queremos estabilizar 50 vídeos o ajustar o convertir 100 audios?
Aquí es donde los scripts brillan. Podemos usar un BUCLE para aplicar la misma "receta" a todos los archivos de una carpeta.

robot

Trabajo una vez... ejecuto tantas veces como quiera! (El Lema del Vago-Bueno)

El Superpoder de los Bucles

Script para convertir todos los WAV a OGG:


#!/bin/bash
# Crea una carpeta para los archivos convertidos
mkdir -p convertidos

for archivo in *.wav; do
  echo "Convirtiendo ${archivo}..."
  nombre_sin_extension="${archivo%.*}"
  ffmpeg -i "${archivo}" -c:a libvorbis "convertidos/${nombre_sin_extension}.ogg"
done

echo "¡Todos los archivos han sido convertidos!"

Desglose del bucle: for archivo in *.wav; do significa "para cada cosa que termine en .wav, guárdala en la variable 'archivo' y ejecuta el siguiente bloque de código". ${archivo} es cómo usamos el valor de esa variable. ${archivo%.*} es un pequeño truco para quitar la extensión del nombre del archivo.

Tu Asistente Personal

La IA al Rescate de FFmpeg

FFmpeg tiene miles de opciones. ¡Es imposible saberlas todas! Aquí es donde la IA generativa (como ChatGPT) se convierte en un asistente increíble.

La clave es saber pedir. Describe tu objetivo de forma clara y concisa.

Ejemplo de un buen prompt:

"Eres un especialista en scripts bash para linux. Escribe un script con FFmpeg que añada una marca de agua (logo.png) en la esquina inferior derecha de todos los vídeos .MP4 de la carpeta actual. El resultado debe guardarse en una nueva carpeta llamada 'finales'. Gracias."

Proporcionar detalles es fundamental. En lugar de decir "pon un logo", di "pon el archivo logo.png en la esquina inferior derecha". Cuanto más específico seas, mejor será el script que genere la IA. También puedes pedirle que te explique qué hace cada línea del código que ha generado.

No Confíes Ciegamente: ¡Entiende el Código!

La IA puede cometer errores o no entender exactamente lo que necesitas. Gracias a lo que hemos aprendido en este módulo, ahora puedes:


La IA es una herramienta, no un sustituto del conocimiento.

Este es el objetivo final del curso: daros la autonomía y el criterio para usar las herramientas más potentes, ya sea escribiendo los comandos vosotros mismos o supervisando el trabajo de un asistente de inteligencia artificial.