12 puntos por GN⁺ 2025-11-13 | 2 comentarios | Compartir por WhatsApp
  • yt-dlp es una herramienta de descarga por línea de comandos que permite bajar audio y video desde miles de sitios, y es un fork de youtube-dl
  • Para la desencriptación de n/sig de YouTube, ahora se requiere un runtime externo de JavaScript (por ejemplo, Deno, Node.js, Bun, QuickJS) junto con el módulo recién agregado yt-dlp-ejs
  • Deno está configurado como runtime predeterminado, y los usuarios pueden especificar otro runtime con la opción --js-runtimes
  • Con este cambio, para usar completamente las funciones relacionadas con YouTube es obligatorio instalar yt-dlp-ejs y un runtime de JS
  • Agregar una dependencia de runtime externo es una medida necesaria para responder a los cambios en la estructura de cifrado de YouTube, y será un elemento clave para el mantenimiento futuro

Resumen de yt-dlp

  • yt-dlp es un fork de youtube-dl, y es un proyecto desarrollado sobre youtube-dlc, que ya no recibe mantenimiento
  • Permite descargar audio y video desde miles de sitios web, y ofrece varias funciones como selección de formatos, posprocesamiento, subtítulos y plugins

Cambios relacionados con el soporte de YouTube

  • Se requiere el paquete yt-dlp-ejs para la desencriptación de los valores n/sig de YouTube
    • Este paquete se distribuye bajo Unlicense e incluye componentes con licencias MIT e ISC
  • Para ejecutar yt-dlp-ejs es obligatorio un runtime de JavaScript
    • Runtimes compatibles: deno (recomendado), node.js, bun, QuickJS
    • La configuración relacionada puede indicarse con la opción --js-runtimes
  • La opción --no-js-runtimes permite restablecer la configuración predeterminada del runtime

Instalación y dependencias

  • yt-dlp soporta las versiones Python 3.10+ (CPython) y 3.11+ (PyPy)
  • Dependencias fuertemente recomendadas:
    • ffmpeg / ffprobe: para combinar audio y video y para el posprocesamiento
    • yt-dlp-ejs: para descifrar el cifrado de YouTube
    • JavaScript runtime: para ejecutar yt-dlp-ejs
  • Como dependencias de red opcionales están certifi, brotli, requests, curl_cffi, entre otras

Principales opciones de comando

  • --js-runtimes RUNTIME[:PATH]: especifica el runtime de JS a usar
  • --no-js-runtimes: desactiva todos los runtimes de JS
  • --remote-components COMPONENT: opción para permitir componentes externos de JS
  • --no-remote-components: bloquea la carga de componentes remotos

Importancia

  • Con este cambio, yt-dlp ahora exige obligatoriamente un runtime externo de JS para brindar soporte completo a la estructura de cifrado más reciente de YouTube
  • Se trata de un cambio estructural para responder a las continuas actualizaciones de seguridad y cifrado de YouTube, y representa una modificación clave para el mantenimiento futuro y la expansión de funciones

2 comentarios

 
kimjoin2 2025-11-14

Guau... es impresionante lo bien que bloquean, y también lo impresionante que es que logren saltárselo. ¿Cómo lo analizan y cómo consiguen romperlo?

 
GN⁺ 2025-11-13
Opiniones en Hacker News
  • Ya viene incluido en los repos de Arch, así que funciona de inmediato
    Solo hay que agregar una bandera al comando yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...
    Al ejecutarlo, descarga el solver en tiempo de ejecución y tarda apenas unos 0.5 segundos. Da la impresión de que la velocidad de inicio de la descarga mejoró bastante
    Aun así, cuando se ejecuta en entornos restringidos, estaría bueno poder descargar el solver por adelantado con un comando aparte. Ya está bastante bien, pero sería más cómodo si hubiera automatización de empaquetado

    • Qué bueno que haya mejorado la velocidad. Últimamente ni en el navegador YouTube anda bien, así que es impresionante que el equipo siga manteniendo accesible esto desde un script de Python
    • Me intriga en qué entorno Python funciona pero JS no
      Si la preocupación es la seguridad, usando Deno el sandboxing está bastante bien resuelto
      Si Deno o Node no están disponibles para ese OS, también se podría considerar QuickJS, escrito en C. Es lento, pero funciona en casi cualquier entorno
      Eso sí, en ese caso se pierde el sandboxing. Aun así, si el código viene del dominio oficial de YouTube, me parece razonable confiar en él
    • Si quieres descargar el solver por adelantado, basta con bajar cualquier video una vez y luego copiar el archivo ejs desde el directorio de caché de yt-dlp (por ejemplo: /home/username/.cache)
      O también se puede intentar la automatización de empaquetado con make yt-dlp-extra
    • El paquete yt-dlp-ejs en AUR parece ser justo para eso
    • Yo instalé Deno manualmente con Chocolately y yt-dlp también con choco, así que la versión es v2025.10.22
  • Últimamente YouTube empezó a obligar el encabezado referrer en videos embebidos
    Si entras directamente a youtube.com/embed/<videoid>, aparece un error, y en el FAQ también se aclara que es una política intencional
    Según la documentación oficial, quien embebe debe proporcionar un HTTP Referer; si no, se muestra la pantalla de “error 153”

    • Cada vez más servicios embebidos se están moviendo en esa dirección. El objetivo es reforzar el rastreo. Incluso a veces exigen iniciar sesión
    • En realidad se puede esquivar con una simple línea de JS que redirija. El costo de implementación es de cientos de miles de dólares, y el costo de saltárselo es cero. Al final parece más un mensaje de “si queremos, podemos bloquearte cuando queramos”
  • Cuando salió QuickTime en 1991, parecía obvio que los videos simplemente se podían copiar, pegar y guardar
    Ahora cuesta creer lo mala que se volvió la experiencia de usuario incluso con videos que ni siquiera tienen DRM

    • Hoy estamos mucho mejor que antes. En esa época era común arruinar el sistema instalando RealPlayer, Flash, packs de códecs y hasta adware.
      Ahora con el reproductor del sistema o VLC ya se resuelve casi todo
    • A inicios de los 90 fue cuando la PC era más interesante. Ahora que el smartphone pasó a ser lo principal, para el usuario común la idea de copiar/guardar quedó reducida a capturas de pantalla o grabación de pantalla
    • El video tiene una densidad de datos muy alta, así que alojarlo cuesta mucho. Por eso terminaron quedando solo plataformas grandes como YouTube, y alternativas como Nebula, PeerTube u Odysee tienen límites en calidad o costo
    • Antes el objetivo era optimizar pensando en el usuario, pero ahora vivimos en una época donde las empresas actúan priorizando su propio beneficio
    • El estándar de transmisión ATSC 3 también tuvo problemas de compatibilidad con receptores existentes al agregar DRM tarde
  • Desde 2010 uso yt-dlp, incluyendo la época de youtube-dl, para archivar todos los videos a los que les doy like
    Ahora ya tengo guardados decenas de miles de videos, y una buena parte de ellos ya desapareció del sitio
    También guardo videos como los resúmenes de sumo de NHK, que solo se publican durante un mes

    • Se podría decir que soy un acumulador digital. Estaría divertido hacer una función tipo Google Memories que te recuerde periódicamente videos viejos
    • Empecé a guardarlos porque muchos canales borran o eliminan sus propios videos, y quería conservar buen contenido antes de que desapareciera
    • Todo en internet puede desaparecer en cualquier momento. Lo importante hay que guardarlo uno mismo si se quiere volver a ver
    • Nunca pensé que me iba a encontrar acá con alguien que guarda videos de sumo. Somos más de los que parece
    • En una época de sobreabundancia de contenido, me pregunto si realmente hace falta guardarlo todo. Antes juntaba MP3 y películas, pero ahora solo guardo fotos en la nube
  • A veces pienso que, en esta batalla interminable entre bloqueo de anuncios e inserción de anuncios, al final podría aparecer AGI/ASI.
    Los dos bandos van a usar LLM, y los humanos vamos a quedar en el medio perdiendo dinero y atención

  • En 10 años quizá YouTube sea totalmente inaccesible desde el navegador
    Si pasa a dominar una generación acostumbrada a apps de tablet, Google podría sentirse con la confianza suficiente como para abandonar la web

    • Si de verdad quieren imponer DRM, van a necesitar hardware dedicado. Tendrían que hacer que el stream cifrado solo se reproduzca en dispositivos con certificación L2
    • La web móvil tiene tantos bugs que casi no se puede usar. Los comentarios también desaparecen seguido
    • Aun así, Google siempre ha mantenido una estrategia centrada en la web
    • Sigue habiendo mucha gente que ve YouTube desde el navegador, y también existen alternativas como bilibili en China
    • Pero como la generación con poder adquisitivo usa navegador, no creo que Google abandone por completo ese mercado
  • En yt-dlp issue #14404 se propuso usar Selenium o un navegador headless, pero
    el equipo de mantenimiento respondió que eso sería una declaración de derrota y va en contra del espíritu del proyecto

  • El scraping es realmente un trabajo durísimo. Es impresionante poder mantener algo así cuando las APIs se rompen seguido y el proveedor te odia

    • Justamente eso de que “el proveedor nos odia” me parece parte del encanto de este proyecto
    • Yo jamás podría mantener yt-dlp. Es un trabajo demasiado desgastante
  • Se nota que YouTube cada vez adopta una postura más hostil hacia los usuarios
    bloquear bloqueadores de anuncios, recolectar contenido para entrenar IA, restringir la API… parece que se aprovechan de no tener competencia

    • En realidad, el verdadero cliente de Google son los anunciantes. Nosotros somos solo su producto
      Son muy sensibles a mantener contentos a los anunciantes, pero tratan a usuarios y creadores como consumibles
      Empezar gratis, eliminar a la competencia y luego construir una estructura monopólica fue una especie de estrategia de carnada.
      Ahora hace falta una alternativa nueva. Aunque sea paga, estaría bien un servicio transparente
    • Últimamente, sobre todo en videos para niños, aumentaron mucho los anuncios que no se pueden saltar
    • Los costos operativos de YouTube son tan altos que creo que el bloqueo de anuncios sí puede afectar la sostenibilidad del servicio
    • Al final, la UX hecha pedazos (enshittification) de hoy ya se volvió parte del modelo de negocio
  • Según la wiki de yt-dlp EJS, se recomienda Deno porque
    permite ejecutar código con permisos restringidos y puede obtener dependencias de EJS remotamente desde npm

    • Pero no hay que sobreestimar el sandboxing de Deno como medida de seguridad. Como el aislamiento a nivel runtime es débil,
      es más seguro usar aislamiento a nivel SO/VM como Firecracker
    • Antes yt-dlp interpretaba JS solo con Python, pero a medida que fueron apareciendo requisitos de runtime más complejos, su intérprete propio empezó a mostrar límites