
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.

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.
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.
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.
Solo necesitas saber tres comandos básicos para manejarte en la terminal de la máquina virtual:
ls : listar. Muestra los archivos y carpetas del directorio actual.pwd : print working directory. Te dice en qué carpeta estás ahora mismo.cd [nombre_carpeta] : change directory. Te permite moverte a otra carpeta.cd .. te sube a la carpeta padre).¡Y eso es casi todo lo que necesitamos para empezar!
ls
listar. Muestra los archivos y carpetas del directorio actual.

pwd
print working directory. Te dice en qué carpeta estás ahora mismo.

cd [nombre_carpeta]
change directory. Te permite moverte a otra carpeta.

Solo necesitas saber tres comandos básicos para manejarte en la terminal de la máquina virtual:
ls -l: LISTA los archivos con más detalles (permisos, tamaño, fecha).mkdir [nombre_nueva_carpeta]: Crea una NUEVA CARPETA.mv [archivo_origen] [archivo_destino]: MUEVE o renombra un archivo.cp [archivo_origen] [archivo_destino]: Hace una COPIA un archivo.
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 mayoría de comandos de FFmpeg siguen esta estructura:
ffmpeg [opciones globales] -i entrada.mp4 [opciones de procesado] salida.mkv
-i.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.

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.
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!
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.
ffmpeg -i video_apple.mov video_web.mp4
ffmpeg -i cancion.wav cancion.mp3
¿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.
ffmpeg -i mi_video.mp4 -vn mi_audio.mp3
El parámetro -vn significa "video no". Le dice a FFmpeg que ignore la pista de vídeo.
A veces, las opciones por defecto no son suficientes. Necesitamos un control más preciso:
-c:v / -c:a : Especifica el códec de vídeo o audio.
... -c:v libx264 -c:a aac
-b:v / -b:a : Fija el bitrate (calidad) del vídeo o audio.
... -b:v 2M -b:a 192k (2 Megabits/s para vídeo, 192 Kilobits/s para audio).
-vf : Aplica filtros de vídeo (video filters).
... -vf scale=1280:720 (Cambia la resolución a 1280x720).
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.
-c copy: copia sin recodificar.
ffmpeg -i video.mkv -c copy video.mp4
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.
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 -
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
FFmpeg usa un proceso de dos pasadas que resulta en una estabilización mucho más suave y sin artefactos.
Este proceso es un candidato perfecto para ser automatizado con un script. Un script nos permitiría ejecutar los dos comandos de forma secuencial con una sola orden, sin tener que esperar a que termine el primero para lanzar el segundo. Veremos cómo hacerlo en la siguiente sección.
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
Los flujos de trabajo de audio y vídeo que acabamos de ver son el ejemplo perfecto.
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.
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.
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.
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.
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
Para lanzarlo, simplemente escribimos su nombre precedido de ./ que significa "en este directorio actual":
./mi_script.sh
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
¿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.

Trabajo una vez... ejecuto tantas veces como quiera! (El Lema del Vago-Bueno)
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.
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.
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.