Cómo nació el programa youtube-dl

Como saben, en este momento el repositorio de youtube-dl en GitHub está bloqueado por una solicitud DMCA de la RIAA. Aunque no puedo comentar sobre los planes actuales de los mantenedores o las discusiones actuales, pero después de las acusaciones hechas por la RIAA, pensé que sería útil para mí como creador del programa y primer mantenedor hablar sobre los primeros años de youtube-dl.



Colectores de cobre



En cualquier buena historia, debe haber un villano, y como tal personaje decidí elegir recolectores de cobre: ​​ladrones que recolectaban metales no ferrosos en el área. Fueron ellos quienes impulsaron la creación de youtube-dl. En 2006, mi pueblo estaba ubicado a 5-10 kilómetros de la pequeña ciudad de Avilés en el norte de España. Los residentes de Avilés disfrutaron de una buena infraestructura y servicios, incluida la televisión por cable y el acceso a Internet ADSL. No había nada de eso en mi área: demasiado lejos de una central telefónica ADSL, y los recolectores de cobre durante años robaron cables de cobre en el camino hacia ella, ocasionando ocasionalmente interrupciones en la conexión telefónica y obligando a la compañía telefónica a reemplazar esos cables por otros más débiles y delgados, porque también es probable que sean robados. Esto continuó durante varios años.



La única forma de conectarse desde casa era un módem V.90 de 56k . De hecho, la calidad de la conexión era tan mala que fue necesario reducir la velocidad a 33,6 kbps para lograr estabilidad. Las velocidades de descarga reales rara vez superan los 4 KB / s. Al mismo tiempo, apareció en Internet un interesante servicio de videos YouTube, que estaba ganando popularidad rápidamente y, a fines del mismo año, fue comprado por Google.



Quédate despierto toda la noche para ver una pieza



Ver cualquier video de YouTube a través de una conexión de 33.6Kbps fue una experiencia insoportable. Casi cualquier video tardaba una eternidad en descargarse. Por ejemplo, se necesitan 40 minutos para descargar un video corto de 10 MB, lo que imposibilita la transmisión. Un video más largo y de mayor calidad toma varias horas y ocupa completamente el canal, sin mencionar el hecho de que la conexión se puede interrumpir en cualquier momento, ¡y la descarga tendrá que comenzar de nuevo! Imagina que realmente te gustó un video en particular y quieres verlo por segunda o tercera vez. La repetición de este proceso se convirtió prácticamente en un acto de masoquismo.



En tal situación, comencé a pensar en las posibilidades de descargar archivos de video: si el video era interesante, tener una copia te permite revisarlo varias veces después. Y si el programa de descarga es realmente bueno, luego de la conexión interrumpida podrá reanudar la descarga desde el mismo lugar.



En ese momento, había otras soluciones para descargar videos de YouTube, incluido el popular script Greasemonkey.... Por pura coincidencia, no pude configurar ninguna de las soluciones existentes para que funcionara, así que decidí escribir mi propia herramienta. Así apareció el programa youtube-dl. Fue más conveniente y rápido para mí iniciarlo desde la consola, por lo que no hay una interfaz gráfica. Se eligió Python porque tiene una extensa biblioteca estándar, con el agradable efecto secundario de que funcionará en cualquier plataforma.



Lanzamiento etéreo



La primera versión solo funcionó en YouTube. El programa no tenía prácticamente una arquitectura normal, porque no era necesario. Escrito como un simple guión, fue directo al grano. El tamaño del programa es de 223 líneas, con solo 143 códigos reales, 44 líneas de comentarios y 36 líneas vacías. El nombre fue elegido por pura conveniencia: youtube-dl es obvio, comprensible, difícil de olvidar y se puede ingresar intuitivamente como "YOU-TAB" en la consola.



Como llevo varios años usando Linux, decidí publicar el programa bajo una licencia libre (MIT en las primeras versiones) en caso de que alguien lo encuentre útil. En aquel entonces, GitHub aún no había aparecido y tuvimos que conformarnos con SourceForge . Pero allí, al crear un nuevo proyecto, tenía que completar un formulario tedioso. Entonces, en lugar de SourceForge, publiqué rápidamente el código enpágina personal , que fue proporcionada por el proveedor de Internet. Si bien esto parece inusual hoy en día, los ISP solían dar a los usuarios una dirección de correo electrónico y un alojamiento donde podían cargar archivos a través de FTP. Por lo tanto, puede alojar su propio sitio web personal en la web. La primera versión del programa se publicó el 08.08.2006, aunque para entonces ya llevaba varias semanas utilizándolo.



Durante el proceso de desarrollo, fue necesario comprender las operaciones del navegador Firefox al ver videos en YouTube. Si mal no recuerdo, Firefox aún no ha incorporado herramientas de desarrollo para analizar la actividad de la red. La mayoría de las conexiones eran HTTP, por lo que el programa Wireshark, conocido en ese momento como Ethereal, se convirtió en una herramienta invaluable para analizar el tráfico de la red. Escribí youtube-dl con el propósito específico de hacer lo mismo que hacía el navegador web al extraer un video. El programa incluso envió la misma cadena de usuario-agente copiada literalmente de Firefox para Linux para asegurarse de que el sitio enviaría al programa las mismas páginas web que el navegador.



Además, YouTube usó el reproductor Adobe Flash en ese entonces.... Los videos se servían como archivos Flash Video (FLV), por lo que se requería un complemento propietario para verlos en un navegador (muchos recordarán la temida biblioteca libflashplayer.so), por lo que cualquier herramienta de desarrollo en el navegador era inútil. Este complemento propietario ha sido una fuente constante de vulnerabilidades y problemas de seguridad. Tenía una extensión de Firefox llamada Flashblock que impedía que el contenido se cargara de forma predeterminada y lo reemplazaba con marcadores de posición con un icono en el que se podía hacer clic, de modo que el contenido solo se cargaba a pedido y la biblioteca de complementos no se usaba a menos que el usuario lo solicitara.



Además de mejorar la seguridad, Flashblock tenía otros dos beneficios. Primero, eliminó una gran cantidad de anuncios ruidosos y desagradables, que también podrían ser una fuente de problemas de seguridad. En segundo lugar, facilitó el análisis del proceso de carga de video en el reproductor. Esperé a que la página se cargara por completo y luego inicié Wireshark justo antes de hacer clic en el ícono Flashblock, comenzando la descarga del video. Por lo tanto, el único tráfico a analizar estaba relacionado con el complemento que cargaba la aplicación del reproductor de video y la propia aplicación cargaba el video.



También vale la pena señalar que el complemento Flash Player en ese momento ya cargó una copia del video en el disco duro (en Linux estaban almacenados en/tmp), y muchos usuarios han confiado en esta funcionalidad para realizar una copia sin herramientas adicionales. Entonces, youtube-dl fue más conveniente solo porque extrajo el nombre del video y lo asignó al archivo automáticamente, por ejemplo.



¡Oh, carne fresca!



Finalmente, se cambió Flash Player para hacer que los videos fueran más difíciles de extraer . Una de las primeras medidas fue romper el enlace al archivo de video después de que fue creado para que el i-nodo aún exista y esté disponible para el proceso que lo usa (hasta que se cierre), manteniendo el archivo invisible desde el punto de vista del sistema de archivos. Aún era posible tomar un archivo usando el sistema /procde archivos para examinar los descriptores de archivo usados ​​por el proceso del navegador, pero con cada uno de estos pequeños pasos youtube-dl se volvió cada vez más conveniente.



Como muchos entusiastas del código abierto en ese momento, usé Freshmeat para suscribirme a nuevos lanzamientos de proyectos que me interesaban. Cuando creé youtube-dl, también creé una entrada de proyecto en este sitio web para que los usuarios puedan ser notificados de nuevos lanzamientos y un registro de cambios que enumera nuevas funciones, correcciones y mejoras. En el catálogo Freshmeat, se pueden buscar proyectos nuevos e interesantes; la primera página publica las últimas actualizaciones, generalmente varias docenas al día. Supongo que de esta forma Joe Barr (que descanse en paz), el editor de linux.com , se enteró del programa y decidió escribir un artículo al respecto.en 2006. Linux.com era uno de los recursos más populares para los entusiastas de Linux en ese momento, junto con otros sitios clásicos como Slashdot o Linux Weekly News. Al menos para mi.



A partir de ese momento, la popularidad de youtube-dl comenzó a crecer, y de vez en cuando comencé a recibir cartas de agradecimiento por la creación y apoyo del programa.



Recuento de tráfico



Avance rápido hasta 2008. La popularidad de youtube-dl siguió creciendo lentamente, y los usuarios a menudo pedían crear programas similares para descargar de otros sitios, y acepté esta solicitud varias veces. Fue en este punto que decidí reescribir el programa desde cero para implementar el soporte original para múltiples sitios de videos. Tenía algunas ideas simples sobre cómo dividir las partes internas del programa en varias partes para simplificar las partes más importantes: un cargador de archivos separado, común para todos los sitios web, y extractores de información por separado: objetos (clases) que contienen código específico para un sitio de videos. Cuando se proporciona una URL o pseudo-URL, se solicita a los extractores que averigüen cuál puede manejar este tipo de URL, y luego se solicita que extraigan información sobre ese video o lista de videos.con el propósito principal de obtener una URL de video o una lista de URL con formatos disponibles, así como algunos otros metadatos como títulos como.



También aproveché para cambiar el sistema de control de versiones y trasladar el proyecto a otro hosting. En ese momento, Git estaba ganando la guerra del control de versiones distribuidas, pero Mercurial también tenía muchos usuarios. Probé ambos y decidí que me gusta Mercurial un poco más que Git. Comencé a usarlo para youtube-dl y publiqué el proyecto en Bitbucketque fue una elección natural. En ese momento, Bitbucket solo hospedaba repositorios Mercurial y GitHub solo hospedaba Git. Ambos se lanzaron en 2008 y son un soplo de aire fresco en comparación con SourceForge. Diferentes espacios de nombres de proyectos para cada usuario (es decir, el nombre de su proyecto no tiene que ser globalmente único, sino único solo para sus proyectos) con sistemas de control de versiones distribuidos significa que puede publicar sus proyectos personales en cuestión de minutos en cualquiera de los dos sitios ... En cualquier caso, trasladar el historial del proyecto a Git y trasladar el proyecto a GitHub siguió un par de años después .



Al reescribir el proyecto, sin duda debería haber aprovechado la oportunidad y cambiarle el nombre, pero no quería confundir a los usuarios existentes y dejé el nombre en un intento de mantener el programa un poco popular.



El contexto tecnológico también cambió ligeramente ese año. Los planes de datos móviles comenzaron a ganar terreno y, a fines de ese año, me compré un módem 3G y un plan de datos que por primera vez me permitió navegar por la web a una velocidad decente. De todos modos, no me hizo dejar de usar youtube-dl. Pagué 45 euros al mes, pero el límite de datos mensual estaba limitado a 5 GB, lo que significa que solo podía usar unos 150 MB por día en promedio. Y la velocidad le permitió descargar mucho más, por lo que tuvo que monitorear el tráfico y seleccionar contenido de manera selectiva, evitando grandes descargas si es posible. Por lo tanto, youtube-dl ayudó mucho a evitar múltiples descargas de archivos de video grandes y mantenerse dentro del plan de tarifas.



Episodio: Nuevo hogar



Algún tiempo después, a finales de 2009, me mudé y finalmente comencé a vivir con mi novia (ahora mi esposa y madre de dos) en Avilés. Por primera vez, obtuve Internet de alta velocidad, que ha sido el estándar para muchos de mis amigos y familiares durante muchos años. Recuerdo que era una conexión por cable de 100/10 Mbps (descarga / carga) sin limitación de tráfico. Esto definitivamente marcó un punto de inflexión en la frecuencia con la que usé youtube-dl y la atención que presté al proyecto.



Más tarde, finalmente porté el código a Git y GitHub. En ese momento, YouTube comenzó a experimentar con video HTML5, que se convertiría en el predeterminado alrededor de 2015. En 2011 trabajé a tiempo completo durante varios años como ingeniero de software y, en general, al regresar del trabajo, realmente no quería programar y configurar youtube-dl ni implementar, a pedido de los usuarios, una función que yo mismo no iba a usar personalmente.



En el segundo semestre de 2011, en medio de otro proyecto importante, decidí dejar el puesto de mantenedor de youtube-dl, ya que no había podido hacer frente a la tarea durante varios meses. Philip Hagemeisterdemostró ser un excelente programador y envió varias solicitudes de extracción a GitHub con correcciones en las que muchas personas estaban interesadas. Le di acceso a las confirmaciones en mi repositorio de youtube-dl, y fue esencialmente el final de la historia de mi parte. Los registros ascendentes me muestran un flujo continuo de confirmaciones hasta marzo de 2011 y luego un salto a agosto de 2011 con una fusión de Philip. Ya que he hecho la única cometen en 2013 para un cambio en el rg3.github.com código fuente a rg3.github.io cuando GitHub trasladó páginas personalizadas de USERNAME.github.com a USERNAME.github.io para evitar problemas de seguridad con código malicioso en su propio dominio, si mal no recuerdo.



Aunque no participé en el desarrollo de youtube-dl, durante muchos años la página oficial del proyecto todavía estaba bajo mi cuenta en https://github.com/rg3/youtube-dly https://rg3.github.io/youtube-dl/. Necesitaba aparecer cuando Philip u otros mantenedores pidieron dar acceso a los compromisos a desarrolladores adicionales, como Filippo Valsorda o Sergey M. , uno de los mantenedores actuales. Desafortunadamente, en 2019 hubo un pequeño problema con los trolls en el rastreador, y solo los propietarios de proyectos pueden bloquear usuarios. Esto hizo que finalmente trasladamos el proyecto a la organización GitHub, donde se invitó a todos los que tenían acceso a los commits (aunque no todos se unieron). La organización de GitHub permitió a los mantenedores actuar con mayor libertad, sin tirar de mí ante la menor provocación.



Quiero expresar una vez más mi más sincero agradecimiento a los varios encargados del proyecto a lo largo de los años que han mejorado significativamente el código, han podido crear una comunidad real y han hecho el proyecto mucho más popular de lo que era cuando lo dejé hace casi 10 años.



Sin conexión y gratis



Me gustaría señalar una vez más que el propósito de youtube-dl como herramienta prácticamente no ha cambiado durante los 14 años de su existencia. Antes y después de recibir la carta DMCA de la RIAA, muchos hablaron sobre cómo usan youtube-dl para diferentes propósitos .



Para mí, siempre ha sido el acceso sin conexión a videos que ya están disponibles para el público en general en Internet. En el mundo de las redes móviles y la conectividad permanente, podría preguntarse si es realmente necesario. Creo que sí, si Netflix, Amazon, Disney y HBO han implementado una funcionalidad similar en sus populares aplicaciones de transmisión. Para viajes largos por carretera o viajes al extranjero, especialmente con niños, o bajo tierra, en un avión o en un lugar con conexiones limitadas o deficientes, es increíblemente conveniente tener acceso sin conexión a un podcast, una conferencia, una reseña, una noticia o una obra de arte.



Un efecto secundario adicional de youtube-dl es el acceso al contenido cuando la interfaz en línea no está a la altura de la tarea. El antiguo complemento flash propietario no funcionaba para todas las plataformas y arquitecturas. Actualmente, los navegadores pueden reproducir videos, pero a veces no aprovechan la decodificación eficiente de la GPU y desperdician mucha energía de la batería. Youtube-dl se puede usar con su propio reproductor para hacer que ciertos videos sean reproducibles y / o eficientes. Por ejemplo, el reproductor mpv incluye soporte integrado para youtube-dl. Solo necesita pasarle la URL y usa youtube-dl para acceder al flujo de video y reproducirlo sin guardar nada en su disco duro.



Es posible que la interfaz en línea predeterminada no tenga funciones de accesibilidad que algunas personas necesitan para navegar, o filtros daltónicos, nuevamente disponibles en la aplicación nativa del reproductor de video.



Por último, pero no menos importante, herramientas como youtube-dl le permiten acceder a videos en línea utilizando solo software gratuito. Entiendo que no hay tantos partidarios del software estrictamente gratuito y de código abierto en el mundo. Ni siquiera me considero como tal, en general. El software propietario está constantemente presente en nuestra vida moderna y se nos entrega todos los días en forma de una gran cantidad de líneas Javascript en el navegador, con muchos propósitos diferentes y no siempre en el mejor interés de los usuarios. La prueba es la aparición del RGPD, con todos sus defectos y problemas. Acceder a videos en línea con youtube-dl le asegura una total tranquilidad de incógnito donde uBlock Origin o Privacy Badger apenas lo alivian.



All Articles