Docker: ffmpeg y yt-dlp en Windows (WSL) y Ubuntu

Docker: ffmpeg y yt-dlp en Windows (WSL) y Ubuntu

Guía práctica para descargar, cortar y convertir vídeos con yt-dlp y ffmpeg en Docker dentro de WSL y Ubuntu. Incluye el docker-compose, el script midu.sh, permisos y resolución de problemas reales.

FECHA:
ACTUALIZADO:
AUTOR:Jorge Beneyto Castelló
LECTURA:6 MINUTOS DE LECTURA

Descargar un vídeo de YouTube y convertirlo para el móvil suele acabar en: “descarga una web random, instala un instalador, acepta 5 cajas de anuncios…”. Con Docker + ffmpeg + yt-dlp montas un entorno limpio y reproducible que funciona igual en Windows (WSL), Linux o macOS, sin contaminar tu sistema. En esta guía te enseño mi setup con un contenedor Alpine, un script midu.sh reutilizable y los errores con los que me enfrenté por el camino.

🤔 ¿Qué vamos a conseguir?

  • Un contenedor Docker con Alpine que trae ffmpeg y yt-dlp instalados.
  • Un script midu.sh con menú interactivo para descargar, cortar y convertir vídeos.
  • Los vídeos guardados en tu disco de Windows (/mnt/c/...) para abrirlos con el reproductor nativo.
  • Ejecutarlo igual en WSL que en Ubuntu puro (sin Docker) o con Docker.
  • Soluciones a los problemas reales: saltos de línea CRLF, permisos root y paths con caracteres especiales.

🧰 Prerrequisitos

  • Windows con WSL (y una distribución Ubuntu instalada) o Ubuntu directo, Linux o macOS.
  • Docker Desktop en Windows (activa la integración WSL) o Docker Engine en Linux.
  • Conocimientos básicos de terminal y Docker Compose.

Si te estás iniciando en Docker, te recomiendo primero Docker: instalación y primeros pasos para tener el entorno listo y entender qué es un contenedor antes de lanzarnos al lío.

🐳 El docker-compose.yml

Guardamos los vídeos en el disco de Windows para abrirlos con el reproductor nativo. En WSL, tu disco C: está montado en /mnt/c/. El fichero docker-compose.yml monta esa carpeta dentro del contenedor y arranca un contenedor Alpine con todo lo necesario:

services:
  downloader:
    image: alpine:latest
    container_name: yt_ffmpeg_downloader
    volumes:
      - /mnt/c/Users/TuUsuario/Videos/test_videos:/test_videos
    working_dir: /test_videos
    user: root
    tty: true
    stdin_open: true
    command: >-
      sh -c "apk update &&
      apk add --no-cache ffmpeg bash python3 py3-pip &&
      pip install --break-system-packages yt-dlp &&
      id -u jorge >/dev/null 2>&1 || adduser -D -u 1000 jorge &&
      chown -R jorge:jorge /test_videos &&
      su-exec jorge bash midu.sh"

Sobre tty e stdin_open: equivalen a -it en docker run. Sin ellas no podrías escribir comandos dentro del contenedor.

Sobre los permisos: user: root es para poder instalar paquetes; luego con su-exec ejecutamos el script como tu usuario real (cambia jorge por el tuyo, lo ves con whoami).

Ojo: cambia TuUsuario por el nombre real de tu usuario de Windows (ls /mnt/c/Users/).

📁 Estructura de carpetas

Tu carpeta test_videos debe quedar así:

test_videos/
├── docker-compose.yml
├── midu.sh
├── conf.json           ← se crea automáticamente al guardar config
├── test/               ← meter aquí los vídeos
└── optimizados/        ← se crea automáticamente

🚀 Pasos para ejecutarlo en WSL

1. Activa la integración WSL en Docker Desktop

Abre Docker Desktop en Windows. En Settings → Resources → WSL Integration, activa tu distribución.

2. Lanza el contenedor

docker compose run --remove-orphans --rm downloader

3. Usa el menú interactivo

Dentro del contenedor, el menú de midu.sh se abre automáticamente. Solo selecciona el modo y sigue los pasos.

4. Usa la CLI directamente (opcional)

Si prefieres la terminal sin menú:

bash midu.sh --convert -s telegram    # Convertir para Telegram
bash midu.sh --cut -ss 5 -e 10        # Cortar de 5s a 10s
bash midu.sh -d "URL"                  # Descargar vídeo
bash midu.sh --info                    # Ver info del vídeo

5. Cierra el contenedor

Al acabar, escribe exit en la terminal del contenedor.

🚀 Ejecutar directamente en Ubuntu (sin Docker)

Si no quieres Docker, instala las dependencias en tu Ubuntu:

sudo apt update && sudo apt install ffmpeg
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp && sudo chmod a+rx /usr/local/bin/yt-dlp

Haz ejecutable el script y ejecútalo:

chmod +x midu.sh
./midu.sh

🚀 Ejecutar con Docker en Ubuntu (sin WSL)

En Ubuntu puro, ajusta las rutas del docker-compose.yml (ya no hay /mnt/c, la ruta es tu home):

volumes:
  - /home/TuUsuario/Videos/test_videos:/test_videos

Y lanza el contenedor igual que en WSL:

docker compose run --remove-orphans --rm downloader

🧪 Comprobar que funciona

  • Versión de herramientas: dentro del contenedor, ffmpeg -version y yt-dlp --version devuelven sus números de versión.
  • Datos del vídeo: bash midu.sh --info "URL" muestra título, duración y formatos disponibles.
  • Archivos generados: tras una descarga, en tu carpeta de Windows Videos/test_videos/ (o optimizados/) aparece el fichero final.
  • Permisos correctos: los ficheros creados te pertenecen a ti y no a root (comprueba con ls -l en la carpeta).

Además puedes verificar que el contenedor habla con tu disco comprobando que la carpeta montada aparece en working_dir: dentro del contenedor pwd debe mostrar /test_videos.

⚠️ Errores comunes

ErrorCausaSolución
mkdi: command not found o syntax error near unexpected token 'do'El docker-compose.yml o midu.sh tiene saltos de línea Windows (CRLF)Cambia a LF en VS Code (clic en “CRLF” en la barra de estado)
Archivos creados como root en los volúmenesEl contenedor ejecuta como rootUsa adduser -D -u 1000 tu_usuario + su-exec tu_usuario bash midu.sh
ffmpeg no encontraba subtítulosEl path de los subtítulos tenía caracteres especialesEscapa el path correctamente en el filtro de ffmpeg
pip mostraba warning por ejecutar como rootAdvertencia de seguridad de pipRedirige: pip install --break-system-packages yt-dlp 2>/dev/null; true
No hay permiso de escritura en la carpeta compartidaEl usuario del contenedor no es dueño del volumenAjusta chown -R al usuario y verifica ls -l de la carpeta
Docker no encuentra el contenedor/composeDocker Desktop sin integración WSL o sin arrancarActiva la distribución en Settings → Resources → WSL Integration y lanza Docker Desktop

🪜 Siguiente nivel

  1. Aprende Docker desde cero si este es tu primer contenedor: Docker: instalación y primeros pasos.
  2. Domina ffmpeg y yt-dlp a fondo (formatos, subtítulos, recortes, filtros): Guía de ffmpeg y yt-dlp.
  3. Automatiza todo con la terminal (bucles, scripts, cron) para procesar listas de vídeos: Comandos útiles de terminal.
  4. Crea tu propio reproductor/pipeline: exporta los vídeos finales por FTP a tu servidor: Cómo conectarse a un servidor FTP.

🔗 Enlaces y recursos

COMPARTIR:
COMENTARIOS:

📋 Contenido