6 puntos por GN⁺ 2024-10-28 | 1 comentarios | Compartir por WhatsApp
  • You-Get es una pequeña utilidad de línea de comandos para descargar contenido multimedia como video, audio e imágenes desde la web, pensada para usarse cuando no hay otra forma sencilla de hacerlo
  • Puede descargar video, imágenes y audio desde sitios como YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili y TikTok, o transmitir video en línea a un reproductor multimedia
  • Con --info se pueden revisar las calidades y formatos disponibles, y elegir con --itag, pero la selección de formato todavía no está implementada de forma general en la mayoría de los sitios compatibles, y el valor predeterminado es la mejor calidad
  • Se puede instalar con pip, descargando o clonando desde GitHub, con Homebrew, pkg de FreeBSD, Flox y otros métodos; las dependencias recomendadas son Python 3.7.4 o superior, FFmpeg 1.0 o superior, y RTMPDump como opción
  • Ofrece descarga directa por URL, scraping de páginas web, descargas basadas en búsquedas de Google Videos, pausa y reanudación, proxy, carga de cookies, extracción de URLs y salida JSON, aunque algunas funciones siguen siendo experimentales o aún no están estabilizadas

Qué hace You-Get

  • You-Get es una pequeña utilidad de línea de comandos para descargar contenido multimedia desde la web
    • El contenido objetivo incluye video, audio e imágenes
    • Está pensado para usarse cuando no existe otra forma sencilla de descargar desde la web
  • Entre las razones para usarlo se mencionan la descarga para disfrute personal, tener control sobre videos en línea cuyo guardado está bloqueado, evitar tecnologías cerradas o JavaScript/Flash propietario, y una orientación hacia la cultura hacker y el software libre
  • Sus funciones principales son las siguientes
    • Descarga de video y audio desde sitios populares como YouTube, Youku y Niconico
    • Streaming de video en línea en un reproductor multimedia sin usar navegador web
    • Extraer páginas web para descargar imágenes de interés
    • Descargar contenido no HTML arbitrario, como archivos binarios

Instalación y entorno de ejecución

  • Las dependencias recomendadas son Python 3.7.4 o superior, FFmpeg 1.0 o superior, y RTMPDump como opción
  • Según un anuncio del 30 de mayo de 2022, el soporte para Python 3.5, 3.6 y 3.7 eventualmente se suspenderá
  • Hay varias rutas de instalación
    • Desde PyPI con pip install you-get
    • Para usuarios de Zsh, con Antigen: antigen bundle soimort/you-get
    • Descargando la rama estable master o la rama develop desde GitHub
    • Con git clone git://github.com/soimort/you-get.git, recomendado para desarrolladores
    • En macOS: brew install you-get
    • En FreeBSD: pkg install you-get
    • En Mac, Linux y Windows WSL: flox install you-get
  • Las definiciones de autocompletado para Bash, Fish y Zsh están en contrib/completion
  • La actualización puede hacerse, según el método de instalación, con pip install --upgrade you-get, descargando la última release, o reinstalando a la fuerza la rama develop

Flujo básico de descarga

  • Al descargar un video, primero se puede revisar la calidad y los formatos disponibles con you-get -i URL o --info
    • La salida incluye el sitio, el título, el stream, el contenedor, la calidad, el tamaño y un ejemplo de --itag para la descarga
    • La descarga predeterminada usa el elemento que aparece al inicio de la lista
  • Si se quiere otro formato, se usa el valor --itag mostrado en la salida
    • Por ejemplo, en el video Me at the zoo de YouTube se puede elegir mp4 con --itag=18
  • Si un video de YouTube tiene subtítulos, se descargan junto con el archivo de video en formato de subtítulos SubRip
  • La selección de formato todavía no está implementada como función general en la mayoría de los sitios compatibles
    • En esos casos, el formato de descarga predeterminado es la mejor calidad
  • FFmpeg es necesario para descargar y unir videos transmitidos en varios fragmentos, así como para videos de alta resolución de YouTube de 1080p o superior
    • Si no se quiere unir los fragmentos después de la descarga, se puede usar --no-merge o -n

Descargas por URL, página web y búsqueda

  • Si se tiene la URL exacta del recurso, se puede descargar directamente con you-get URL
    • Por ejemplo, al ingresar la URL de una imagen JPEG, se muestran el sitio, el título, el tipo y el tamaño, y luego se guarda el archivo
  • Si en vez de la URL exacta del recurso se pasa la URL de una página web, intentará extraer la página para encontrar elementos de interés
    • Esta función es experimental y no es perfecta
    • Funciona mejor para extraer imágenes grandes en sitios populares como Tumblr y Blogger
    • No existe un patrón universal que aplique a todos los sitios de Internet
  • Si se pasa una cadena en lugar de una URL, busca en Google Videos y descarga el video más relevante
    • Puede no ser exactamente lo que se busca, pero se indica que es muy probable que el resultado sea bastante acertado

Control de descarga y opciones de ejecución

  • Durante la descarga se puede interrumpir con Ctrl+C, y queda un archivo temporal .download en el directorio de salida
    • Si se ejecuta de nuevo con los mismos argumentos, reanuda desde la última sesión
    • Si ya existe un archivo completo sin la extensión temporal, se omite la descarga
    • --force o -f fuerza una nueva descarga y sobrescribe archivos existentes o temporales con el mismo nombre
  • Con --output-dir o -o se puede especificar la ruta de guardado, y con --output-filename o -O se puede definir el nombre del archivo
    • Esto es útil cuando el título predeterminado del video contiene caracteres especiales incompatibles con el shell actual, el sistema operativo o el sistema de archivos
    • También sirve para guardar con carpeta y nombre definidos en scripts de descargas por lotes
  • Se puede especificar un proxy HTTP con --http-proxy o -x
    • De forma predeterminada se aplica la variable de entorno http_proxy de la configuración del sistema
    • Para desactivar el proxy, se usa --no-proxy
    • En algunos sitios como Youku, --extractor-proxy o -y se puede usar al extraer información de videos accesibles solo desde China continental
  • --player o -p envía el video a un reproductor multimedia como mpv o vlc en lugar de descargarlo
    • Si se especifica un navegador como reproductor, se puede ver en el navegador sin anuncios ni sección de comentarios
    • También puede usarse para iniciar otros gestores de descarga, aunque puede no encajar del todo bien

Autenticación, datos extraídos y sitios compatibles

  • Para contenido que requiere iniciar sesión, como videos no públicos, es necesario pasar las cookies del navegador con --cookies o -c
    • Los formatos de cookies compatibles actualmente son Mozilla cookies.sqlite y Netscape cookies.txt
  • --url o -u imprime la lista de URLs de recursos descargables extraídas de la página
  • --json imprime un resumen de los datos extraídos en formato JSON
    • Esta función todavía no está estabilizada y el esquema JSON podría sufrir cambios incompatibles en el futuro
  • La lista de sitios compatibles incluye YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok y Zhihu, entre otros
    • El soporte de video, imagen y audio varía según el sitio
  • Para sitios que no figuran en la lista, el extractor genérico busca en la página recursos de interés y los descarga

Reporte de problemas y licencia

  • Si no se puede descargar el contenido deseado, primero hay que revisar Known Bugs
  • Antes de reportar un problema nuevo o contribuir, se debe leer la guía de contribución
  • Las preguntas rápidas se pueden hacer en el canal de Gitter #soimort/you-get
  • El software se distribuye bajo la MIT license
    • El software se proporciona “tal cual”, sin garantías
    • El autor no se hace responsable por infracciones de derechos de autor ni otros usos ilegales
    • El repositorio solo proporciona el código, y la forma de uso queda a criterio del usuario

1 comentarios

 
GN⁺ 2024-10-28
Opiniones de Hacker News
  • Durante un tiempo, internet era caro y el ancho de banda era bajo, pero me gustaba escuchar música y clases en YouTube. En algún momento me di cuenta de que si solo recibía el stream de audio podía reducir el costo de ancho de banda en un 90%
    youtube-dl y yt-dlp tenían la bandera -G, que imprime la URL del formato/calidad solicitado, y en la computadora obtenía la URL desde la línea de comandos y la metía en VLC
    En el celular, al principio usaba un rodeo complicado: primero bajaba el archivo a un VPS por SSH y luego lo volvía a descargar al teléfono, pero después descubrí que el navegador del teléfono podía reproducir la URL directamente, así que hice un frontend en PHP para youtube-dl -G -f bestaudio {url}
    Ya no está en línea y perdí el código, pero en la práctica era de una sola línea. Parece que you-get también soporta el mismo uso con --url / -u, así que quería comentar lo útil que es esta función
    Si reproduces con la pantalla apagada, también ahorras 80% de batería. YouTube también lo sabe, así que parece que convirtió la reproducción en segundo plano que solo toma el stream de audio en una función de pago

    • El navegador Brave Mobile permite activar la reproducción de audio de videos en segundo plano, así que ya no hace falta una suscripción como YouTube Premium
    • Parece que youtube-dl ya no funciona tan bien, y tuve que usar el fork yt-dlp. Cambiarse así de proyecto siempre da algo de inseguridad, pero al menos parece bastante usado
    • A mi mamá le encantan los audiolibros, así que le hice con node-red un bot de Telegram que procesa los enlaces de YouTube que le comparten
      Los enlaces se envían a una FIFO, y un pequeño daemon los descarga en orden y los guarda en una carpeta incoming dedicada. El bot puede bajar solo el audio o el video completo, pero para el ID de Telegram de mi mamá lo dejé configurado para bajar solo audio
      Jellyfin monitorea esa carpeta, así que mi mamá puede descargarlos o escucharlos directamente. En dos años ha bajado más de 1 TB de audiolibros y está encantada
      Código del daemon: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
    • En situaciones de bajo ancho de banda suelo elegir 144p. El tamaño es casi el mismo que el de un stream solo de audio de buena calidad, pero tiene la ventaja de que, aunque sea una vez cada 45 minutos, puedes ver al hablante. También ahorra batería de forma similar
      El video en 144p tiene algo curiosamente pacífico y cómodo. No te distraes con colores brillantes ni detalles complejos, y puedes concentrarte simplemente en escuchar
    • En Safari para iOS, si sales de la app de Safari y luego presionas rápidamente el botón de reproducir video en la interfaz de “Ahora suena”, puedes hacer que el audio de un video de YouTube se reproduzca en segundo plano mediante una especie de falla
      Lo uso sobre todo para reproducir videos solo para miembros que no se reproducen en segundo plano aunque tengas YouTube Premium. Cada vez que iOS se actualiza, rezo para que no bloqueen este “glitch”
  • Este proyecto parece no querer reportes de issues sin un PR de corrección
    Dice algo como “Para reportar un problema encontrado al usar you-get, debes abrir un Pull Request…”, y nunca había visto algo así

    • Como dijo otra persona, parece que no piden la corrección en sí, sino una prueba que falle
      El requisito es una descripción detallada del problema y al menos un commit que cubra ese problema con una prueba unitaria. La palabra “addressing” no es muy buena ahí; creo que “demonstrating” habría sido mejor
    • La versión en chino tiene un encabezado adicional que se traduce como “Para evitar el abuso de GitHub Issues, no se aceptan issues generales”. La redacción anterior en inglés decía lo siguiente
      you-get actualmente está experimentando con un enfoque agresivo para la gestión de issues, y los reportes de bugs deben abordarse en código mediante pull requests
      https://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
      Probablemente había demasiado spam. Como referencia, tests/test.py parece ejecutar directamente los extractores contra varios sitios web, y no pude encontrar dónde hacen mocking de las solicitudes y respuestas de red. Tal vez la intención sea simplificar el proceso para quienes crean PR
    • Parece que quieren que se envíe un PR con una prueba que pueda mostrar si el problema quedó resuelto
    • La idea de animar a la gente a intentar escribir una prueba o incluso la corrección completa es interesante, pero aceptar solo eso me parece un poco excesivo. Aunque yo no mantengo you-get, así que no sé por lo que pasan ellos
      También podría ser una forma eficaz de filtrar la avalancha de issues repetitivos de gente que no sabe ejecutar correctamente un programa de línea de comandos
    • Escribir una prueba que falle es relativamente fácil y reduce mucho el trabajo de triage de issues. También baja el riesgo de que GitHub Issues se convierta en un foro de soporte
      Si gracias a esto el proyecto se vuelve más fácil de mantener y dura más tiempo, me parece bien
  • Por el título y el inicio de la descripción pensé que era una herramienta basada en heurísticas para capturar cualquier cosa de una página. Una herramienta útil cuando no existe soporte específico para un sitio, es decir, la mayoría de las veces “cuando yt-dlp no lo soporta”
    Pero en realidad tiene una arquitectura basada en extractores, con un extractor separado para cada fuente más o menos popular. Al final, creo que se parece más a una copia más simple de yt-dlp

  • Me pregunto si hay alguien a quien le siga saliendo este error
    Empieza con you-get: [error] oops, something went wrong. y luego indica revisar problemas de red, confirmar que se tenga la versión más reciente, revisar bugs conocidos y ejecutar con la opción --debug
    Usar la bandera de depuración tampoco ayudó mucho, y en pattern = str(pattern, 'latin1') salió TypeError: decoding to str: need a bytes-like object, NoneType found
    Quería ver si podía saltarme la restricción de edad, pero el mismo error apareció incluso en videos sin restricción de edad

    • Conviene revisar la versión de Python
      Puedes cambiarte a una versión reciente de Python con una herramienta como Pyenv, o levantar una imagen de Docker con algo como docker run -it -v $(pwd):/mnt python:3.13 bash y probar la utilidad dentro de ese entorno
  • ¿Alguien puede explicar por qué esto es mejor que yt-dlp?

    • Es una pregunta interesante. Solo depende de una biblioteca, pero me da curiosidad cuánto del código realmente está escrito desde cero
      Por ejemplo, me sorprendió que tenga un unidor de mp4 dedicado. Si ya existe ffmpeg, casi no habría forma de hacer algo mejor por cuenta propia
      https://github.com/soimort/you-get/blob/develop/src/you_get/...
    • Me da curiosidad cómo inferiste que es mejor que yt-dlp. En un ámbito donde Google intenta bloquear las cosas constantemente, creo que mientras más opciones, mejor
  • Es difícil llamar exactamente “tonta” a una herramienta estilo ytdl para descargar medios, con extractores y conversores por sitio, pero sigue siendo bueno que haya más proyectos como ytdl

  • No entiendo bien por qué Bandcamp está en la lista de sitios compatibles. Bandcamp simplemente te permite descargar los archivos si primero le pagas al artista
    Lo que puedes bajar con esta herramienta es porque el artista permitió escucharlo gratis antes de comprarlo. Descargarlo con esta herramienta parece completamente innecesario y algo descortés. En Bandcamp hay principalmente artistas y sellos independientes pequeños

    • La lista de sitios compatibles no es una declaración moral sobre dónde deberías usar esta herramienta. Es solo una lista de sitios populares donde la herramienta funciona
    • Creo que también puedes usar esta herramienta después de suscribirte o comprar. La gente descarga con estas herramientas de automatización incluso contenido por el que ya pagó, para ahorrarse el trabajo de iniciar sesión en 5 apps de distintos ecosistemas cerrados
    • Puede que no todo el mundo viva en un país donde pueda pagar en Bandcamp
      Personalmente, a veces quiero o necesito consumir medios offline por redes inestables o lentas, o por operadoras caras. Eso no significa que no vaya a pagar después si me gusta
    • Quienes piratean, ¿a partir de qué nivel de ingresos consideran moral o inmoral robar qué contenido?
    • No todo el mundo está de acuerdo en que los artistas deban cobrar por su obra
  • Parece bien hecho. Pero, como consumidor, me pregunto qué motivo tendría para usar you-get en lugar de yt-dlp
    ¿Qué ventaja tiene frente a yt-dlp, que funciona bastante bien en una enorme cantidad de sitios?
    [1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....

  • En la documentación dice: “Buscar y descargar desde Google Videos: $ you-get "Richard Stallman eats"
    No suelo leer la documentación con frecuencia, pero esta vez la leí y me encontré con un easter egg bastante desagradable

  • Me gusta. Me imagino que estaría bueno que hubiera una extensión complementaria para Chrome/Firefox que use you-get como backend y esté implementada de forma fluida
    Yendo más allá, uno podría imaginar una extensión de you-get que, al entrar a YouTube, evite el reproductor de YouTube y reproduzca el contenido directamente, sin anuncios. No solo sería aplicable a YouTube, sino también a otras plataformas