6 Punkte von GN⁺ 2024-10-28 | 1 Kommentare | Auf WhatsApp teilen
  • You-Get ist ein kleines Kommandozeilen-Utility zum Herunterladen von Medieninhalten wie Videos, Audio und Bildern aus dem Web und wird verwendet, wenn es keine andere einfache Methode gibt
  • Von vielen Websites wie YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili und TikTok lassen sich Videos, Bilder und Audio herunterladen oder Online-Videos in einen Media-Player streamen
  • Mit --info lassen sich verfügbare Qualitäten und Formate prüfen und mit --itag auswählen, aber die Formatauswahl ist auf den meisten unterstützten Websites im Allgemeinen nicht implementiert; Standard ist die höchste Qualität
  • Die Installation ist über pip, GitHub-Download oder -Klon, Homebrew, FreeBSD-pkg, Flox usw. möglich; empfohlene Abhängigkeiten sind Python 3.7.4 oder höher, FFmpeg 1.0 oder höher und optional RTMPDump
  • Es bietet direkten URL-Download, Webpage-Scraping, Download auf Basis der Google-Videos-Suche, Pausieren und Fortsetzen, Proxy-Unterstützung, Laden von Cookies sowie Ausgabe extrahierter URLs und JSON, aber einige Funktionen sind noch experimentell oder nicht stabilisiert

Was You-Get macht

  • You-Get ist ein kleines Kommandozeilen-Utility zum Herunterladen von Medieninhalten aus dem Web
    • Zielinhalte sind Videos, Audio und Bilder
    • Es wird verwendet, wenn es im Web keine andere einfache Download-Möglichkeit gibt
  • Als Gründe für die Nutzung werden persönliches Herunterladen zum eigenen Genuss, Kontrolle über Online-Videos mit blockierter Speicherung, das Umgehen geschlossener Technologien oder proprietärem JavaScript bzw. Flash sowie eine Orientierung an Hacker-Kultur und freier Software genannt
  • Die Hauptfunktionen sind wie folgt
    • Video- und Audio-Downloads von populären Websites wie YouTube, Youku und Niconico
    • Streaming von Online-Videos in einem Media-Player ohne Webbrowser
    • Auslesen von Webseiten zum Herunterladen interessanter Bilder
    • Download beliebiger nicht-HTML-Inhalte wie Binärdateien

Installation und Laufzeitumgebung

  • Empfohlene Abhängigkeiten sind Python 3.7.4 oder höher, FFmpeg 1.0 oder höher und optional RTMPDump
  • Laut Mitteilung vom 30. Mai 2022 wird die Unterstützung für Python 3.5, 3.6 und 3.7 letztlich eingestellt
  • Es gibt mehrere Installationswege
    • Auf PyPI mit pip install you-get
    • Für Zsh-Nutzer mit Antigen via antigen bundle soimort/you-get
    • Download des stabilen master-Branches oder des develop-Branches von GitHub
    • Für Entwickler empfohlen: git clone git://github.com/soimort/you-get.git
    • Unter macOS mit brew install you-get
    • Unter FreeBSD mit pkg install you-get
    • Auf Mac, Linux und Windows WSL mit flox install you-get
  • Shell-Autovervollständigungen für Bash, Fish und Zsh finden sich unter contrib/completion
  • Je nach Installationsmethode ist ein Upgrade mit pip install --upgrade you-get, durch Herunterladen des neuesten Releases oder durch erzwungene Neuinstallation des develop-Branches möglich

Grundlegender Download-Ablauf

  • Beim Herunterladen eines Videos kann man mit you-get -i URL oder --info zunächst die verfügbaren Qualitäten und Formate prüfen
    • Die Ausgabe enthält Website, Titel, Stream, Container, Qualität, Größe und ein Beispiel für das beim Download zu verwendende --itag
    • Der Standard-Download verwendet den obersten Eintrag in der Liste
  • Wenn ein anderes Format gewünscht ist, wird der in der Ausgabe angezeigte --itag-Wert verwendet
    • Im Beispiel des YouTube-Videos Me at the zoo kann mit --itag=18 mp4 ausgewählt werden
  • Falls ein YouTube-Video Untertitel hat, werden diese zusammen mit der Videodatei im SubRip-Untertitelformat heruntergeladen
  • Die Formatauswahl ist auf den meisten unterstützten Websites noch nicht als allgemeine Funktion implementiert
    • In diesem Fall ist das Standard-Downloadformat die höchste Qualität
  • FFmpeg wird für das Herunterladen und Zusammenführen von Videos benötigt, die in mehrere Segmente gestreamt werden, sowie für hochauflösende YouTube-Videos ab 1080p
    • Wenn die Segmente nach dem Download nicht zusammengeführt werden sollen, verwendet man --no-merge oder -n

Download per URL, Webseite oder Suche

  • Wenn die genaue Ressourcen-URL bekannt ist, kann direkt mit you-get URL heruntergeladen werden
    • Gibt man zum Beispiel eine JPEG-Bild-URL ein, werden Website, Titel, Typ und Größe angezeigt und die Datei gespeichert
  • Wird statt der genauen Ressourcen-URL eine Webseiten-URL angegeben, versucht das Tool, die Seite auszulesen und interessante Elemente zu finden
    • Diese Funktion ist experimentell und nicht perfekt
    • Sie funktioniert am besten beim Scraping großer Bilder auf populären Websites wie Tumblr oder Blogger
    • Es gibt kein universelles Muster, das auf alle Websites im Internet anwendbar ist
  • Wird statt einer URL eine Zeichenkette übergeben, sucht das Tool bei Google Videos und lädt das relevanteste Video herunter
    • Es ist möglicherweise nicht exakt das Gewünschte, soll aber mit hoher Wahrscheinlichkeit ein sehr plausibles Ergebnis liefern

Download-Steuerung und Ausführungsoptionen

  • Während des Downloads kann mit Ctrl+C abgebrochen werden; im Ausgabeverzeichnis bleibt dann eine temporäre .download-Datei zurück
    • Bei erneutem Ausführen mit denselben Argumenten wird fortgesetzt und zwar ab der letzten Sitzung
    • Wenn bereits eine vollständige Datei ohne die temporäre Erweiterung vorhanden ist, wird der Download übersprungen
    • --force oder -f erzwingt einen erneuten Download und überschreibt vorhandene Dateien oder temporäre Dateien mit demselben Namen
  • Mit --output-dir oder -o lässt sich der Speicherpfad festlegen und mit --output-filename oder -O der Dateiname
    • Das ist nützlich, wenn der Standard-Videotitel Sonderzeichen enthält, die nicht zur aktuellen Shell, zum Betriebssystem oder Dateisystem passen
    • Ebenso ist es nützlich in Batch-Download-Skripten, wenn in einem bestimmten Ordner mit einem bestimmten Namen gespeichert werden soll
  • Mit --http-proxy oder -x kann ein HTTP-Proxy angegeben werden
    • Standardmäßig wird die System-Proxy-Einstellung über die Umgebungsvariable http_proxy verwendet
    • Zum Deaktivieren des Proxys dient --no-proxy
    • Für einige Websites wie Youku kann --extractor-proxy oder -y verwendet werden, um Videoinformationen zu extrahieren, die nur vom chinesischen Festland aus zugänglich sind
  • --player oder -p übergibt das Video statt des Downloads an einen Media-Player wie mpv oder vlc
    • Wenn ein Browser als Player angegeben wird, kann das Video dort ohne Werbung oder Kommentarbereich angesehen werden
    • Es kann auch zum Starten anderer Download-Manager verwendet werden, passt aber womöglich nicht gut dazu

Authentifizierung, Extraktionsdaten und unterstützte Websites

  • Für Inhalte, die eine Kontenanmeldung erfordern, etwa nicht öffentliche Videos, müssen Browser-Cookies mit --cookies oder -c übergeben werden
    • Aktuell unterstützte Cookie-Formate sind Mozilla cookies.sqlite und Netscape cookies.txt
  • --url oder -u gibt eine Liste der aus der Seite extrahierten herunterladbaren Ressourcen-URLs aus
  • --json gibt eine Zusammenfassung der extrahierten Daten im JSON-Format aus
    • Diese Funktion ist noch nicht stabilisiert, und das JSON-Schema kann künftig Breaking Changes enthalten
  • Die Liste unterstützter Websites umfasst unter anderem YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok und Zhihu
    • Je nach Website unterscheidet sich die Unterstützung für Video, Bild und Audio
  • Für Websites, die nicht in der Liste stehen, sucht der generische Extractor auf der Seite nach interessanten Ressourcen und lädt sie herunter

Fehlermeldungen und Lizenz

  • Wenn sich gewünschte Inhalte nicht herunterladen lassen, sollte zuerst Known Bugs geprüft werden
  • Vor dem Melden neuer Probleme oder dem Beitragen sollte die Beitragsrichtlinie gelesen werden
  • Kurze Fragen können im Gitter-Kanal #soimort/you-get gestellt werden
  • Die Software wird unter der MIT license vertrieben
    • Die Software wird ohne Gewähr „wie besehen“ bereitgestellt
    • Für Urheberrechtsverletzungen oder andere rechtswidrige Nutzungszwecke übernehmen die Autoren keine Verantwortung
    • Das Repository stellt nur den Code bereit; die Art der Nutzung liegt im Ermessen der Nutzer

1 Kommentare

 
GN⁺ 2024-10-28
Meinungen auf Hacker News
  • Eine Zeit lang war Internet teuer und die Bandbreite gering, aber ich hörte gern Musik und Vorlesungen auf YouTube. Irgendwann wurde mir klar, dass man 90 % der Bandbreitenkosten sparen kann, wenn man nur den Audiostream lädt.
    youtube-dl und yt-dlp hatten ein -G-Flag, das die URL für das angeforderte Format/die angeforderte Qualität ausgibt; am Computer holte ich mir die URL per Kommandozeile und spielte sie in VLC ab.
    Auf dem Handy nutzte ich anfangs einen umständlichen Umweg: erst per SSH die Datei auf einen VPS laden und dann wieder aufs Telefon herunterladen. Später merkte ich, dass der Browser auf dem Telefon die URL direkt abspielen kann, und baute ein PHP-Frontend für youtube-dl -G -f bestaudio {url}.
    Es ist inzwischen nicht mehr online und den Code habe ich auch verloren, aber im Grunde war es ein Einzeiler. you-get scheint mit --url / -u denselben Zweck zu unterstützen, deshalb wollte ich darauf hinweisen, wie nützlich diese Funktion ist.
    Wenn man mit ausgeschaltetem Bildschirm abspielt, spart man außerdem 80 % Akku. YouTube weiß das ebenfalls, weshalb sie Hintergrundwiedergabe, die nur den Audiostream abruft, wohl zu einem Bezahl-Feature gemacht haben.

    • Der Browser Brave Mobile kann die Audiowiedergabe von Videos im Hintergrund aktivieren, sodass man kein Abo wie YouTube Premium braucht.
    • youtube-dl scheint nicht mehr richtig zu funktionieren; ich musste den Fork yt-dlp verwenden. So ein Projektwechsel fühlt sich immer unsicher an, aber immerhin scheint es weit verbreitet zu sein.
    • Meine Mutter liebt Hörbücher sehr, also habe ich ihr mit node-red einen Telegram-Bot gebaut, der YouTube-Links verarbeitet, wenn man sie teilt.
      Links werden in eine FIFO geschickt, und ein kleiner Daemon lädt sie der Reihe nach herunter und speichert sie in einem dedizierten Incoming-Ordner. Der Bot kann nur Audio oder auch das komplette Video laden; für die Telegram-ID meiner Mutter habe ich eingestellt, dass nur Audio geladen wird.
      Jellyfin überwacht diesen Ordner, sodass meine Mutter die Dateien herunterladen oder direkt anhören kann. In zwei Jahren hat sie über 1 TB Hörbücher heruntergeladen und ist sehr zufrieden damit.
      Daemon-Code: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
    • Bei geringer Bandbreite wähle ich oft 144p. Die Dateigröße ist ungefähr so groß wie bei einem reinen Audiostream in guter Qualität, hat aber den Vorteil, dass man den Sprecher wenigstens einmal alle 45 Minuten sehen kann. Akku spart man genauso.
      144p-Video ist auf seltsame Weise friedlich und angenehm. Man wird nicht von leuchtenden Farben oder komplexen Details abgelenkt und kann sich einfach aufs Zuhören konzentrieren.
    • In iOS Safari kann man es so „verhaken“, dass der Ton eines YouTube-Videos im Hintergrund abgespielt wird: Safari verlassen und dann in der „Aktuelle Wiedergabe“-Oberfläche schnell auf die Wiedergabetaste für das Video tippen.
      Ich nutze das hauptsächlich für Mitglieder-exklusive Videos, die selbst mit YouTube Premium nicht im Hintergrund laufen. Bei jedem iOS-Update hoffe ich, dass Apple diesen „Glitch“ nicht schließt.
  • Dieses Projekt scheint nicht zu wollen, dass man nur Issues meldet, ohne einen Fix-PR einzureichen.
    Dort steht sinngemäß: „Um ein Problem zu melden, das Sie bei der Nutzung von you-get entdeckt haben, müssen Sie einen Pull Request öffnen …“ So etwas habe ich vorher noch nicht gesehen.

    • Wie jemand anders sagte, scheint damit gemeint zu sein, dass sie nicht unbedingt den Fix selbst wollen, sondern einen fehlschlagenden Test.
      Gefordert sind eine ausführliche Beschreibung des Problems und mindestens ein Commit, der dieses Problem als Unit-Test behandelt. Das Wort „addressing“ ist hier nicht ideal; „demonstrating“ wäre wohl besser gewesen.
    • In der chinesischen Version gibt es eine zusätzliche Überschrift, die sich etwa mit „Um Missbrauch von GitHub Issues zu verhindern, akzeptieren wir keine normalen Issues“ übersetzen lässt. In einer früheren englischen Formulierung stand:
      you-get experimentiere derzeit mit einem aggressiven Ansatz für die Issue-Bearbeitung, und Bugreports müssten über Pull Requests im Code behandelt werden.
      https://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
      Vermutlich gab es einfach zu viel Spam. Nebenbei: tests/test.py scheint die Extractors direkt gegen mehrere Websites auszuführen, und ich konnte nicht finden, wo Netzwerk-Requests und -Responses gemockt werden. Vielleicht soll das den Prozess für PR-Ersteller einfacher machen.
    • Es scheint zu bedeuten, dass man einen PR mit Test einreichen soll, der zeigt, ob das Problem behoben ist.
    • Die Idee, Leute dazu zu ermutigen, Tests oder gleich einen vollständigen Fix zu versuchen, ist interessant; aber nur so etwas anzunehmen wirkt etwas überzogen. Allerdings maintaine ich you-get nicht, also weiß ich nicht, womit sie zu kämpfen haben.
      Es könnte eine wirksame Methode sein, eine Flut wiederholter Issues von Leuten herauszufiltern, die ein Kommandozeilenprogramm nicht richtig ausführen können.
    • Einen fehlschlagenden Test zu schreiben ist vergleichsweise einfach und reduziert den Aufwand für Issue-Triage erheblich. Außerdem sinkt das Risiko, dass GitHub Issues zu einem Support-Forum werden.
      Wenn das die Wartung des Projekts erleichtert und es dadurch länger weiterbesteht, finde ich das in Ordnung.
  • Nur anhand des Titels und des Anfangs der Beschreibung dachte ich, es sei ein heuristisches Tool, das versucht, irgendetwas von einer Seite herauszufischen. Also ein Tool, das nützlich ist, wenn es keine Unterstützung für eine bestimmte Website gibt – meist also „wenn yt-dlp sie nicht unterstützt“.
    Tatsächlich ist es aber eine Extractor-basierte Architektur mit separaten Extractors für jede halbwegs populäre Quelle. Am Ende wirkt es damit eher wie ein einfacherer yt-dlp-Klon.

  • Ich frage mich, ob noch jemand ständig diesen Fehler bekommt.
    Er beginnt mit you-get: [error] oops, something went wrong. und weist darauf hin, Netzwerkprobleme zu prüfen, auf die neueste Version zu aktualisieren, bekannte Bugs zu prüfen und die Option --debug auszuführen.
    Das Debug-Flag hat auch nicht wirklich geholfen; bei pattern = str(pattern, 'latin1') kam TypeError: decoding to str: need a bytes-like object, NoneType found.
    Ich wollte sehen, ob sich eine Altersbeschränkung umgehen lässt, aber derselbe Fehler trat auch bei Videos ohne Altersbeschränkung auf.

    • Es wäre gut, die Python-Version zu prüfen.
      Man kann mit einem Tool wie Pyenv auf eine aktuelle Python-Version wechseln oder ein Docker-Image starten, etwa docker run -it -v $(pwd):/mnt python:3.13 bash, und das Utility darin ausprobieren.
  • Kann jemand erklären, warum das besser sein soll als yt-dlp?

    • Interessante Frage. Es hat nur eine einzige Library als Abhängigkeit, aber ich frage mich, wie viel Code tatsächlich selbst geschrieben ist.
      Zum Beispiel fand ich es überraschend, dass es einen eigenen mp4-Joiner gibt. Wenn ffmpeg bereits vorhanden ist, dürfte es kaum eine Möglichkeit geben, das selbst besser zu machen.
      https://github.com/soimort/you-get/blob/develop/src/you_get/...
    • Mich würde interessieren, woraus du geschlossen hast, dass es besser als yt-dlp ist. In einem Bereich, in dem Google ständig versucht, Dinge zu blockieren, gilt für mich: Je mehr Optionen, desto besser.
  • Es ist zwar schwierig, einen Media-Downloader im ytdl-Stil mit sitespezifischen Extraktoren und Transcoder-Libraries wirklich als „dummes“ Tool zu bezeichnen, aber mehr Projekte wie ytdl sind trotzdem gut.

  • Ich verstehe nicht ganz, warum Bandcamp in der Liste der unterstützten Sites steht. Bei Bandcamp kann man die Dateien einfach herunterladen, wenn man den Künstlern vorher Geld bezahlt.
    Was man mit diesem Tool herunterladen kann, ist nur das, was Künstler vor dem Kauf kostenlos anhören lassen. Das mit diesem Tool herunterzuladen wirkt völlig unnötig und ein bisschen respektlos. Auf Bandcamp sind vor allem kleine unabhängige Künstler und Labels.

    • Die Liste der unterstützten Sites ist keine moralische Erklärung dazu, wo man dieses Tool einsetzen sollte. Es ist einfach nur eine Liste populärer Sites, auf denen dieses Tool funktioniert.
    • Ich denke, man kann dieses Tool auch nach einem Abo oder Kauf verwenden. Leute laden selbst Inhalte, für die sie bereits bezahlt haben, mit solchen Automatisierungstools herunter, um sich das Einloggen in fünf Apps verschiedener geschlossener Ökosysteme zu ersparen.
    • Vielleicht lebt nicht jeder in einem Land, von dem aus man bei Bandcamp bezahlen kann.
      Auch ich persönlich möchte oder muss Medien manchmal offline konsumieren, wegen instabiler oder langsamer Netze oder teurer Provider. Das heißt nicht, dass ich später nicht bezahlen würde, wenn mir etwas gefällt.
    • Ab welchem Einkommensniveau betrachten Piraten es eigentlich als moralisch oder unmoralisch, welche Inhalte zu stehlen?
    • Nicht alle sind sich einig, dass Künstler für ihre Werke Geld bekommen sollten.
  • Sieht gut gemacht aus. Aus Verbrauchersicht frage ich mich aber, warum man statt yt-dlp you-get verwenden sollte.
    Welche Vorteile hat es gegenüber yt-dlp, das auf einer riesigen Zahl von Sites ziemlich gut funktioniert?
    [1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....

  • In der Dokumentation steht: „Auf Google Videos suchen und herunterladen: $ you-get "Richard Stallman eats"“.
    Ich lese Dokumentation nicht oft, aber diesmal habe ich sie gelesen und ein ziemlich widerliches Easter Egg gefunden.

  • Gefällt mir. Ich stelle mir vor, dass es schön wäre, wenn es eine Begleiterweiterung für Chrome/Firefox gäbe, die you-get als Backend nutzt und sauber integriert ist.
    Noch einen Schritt weiter gedacht könnte man sich eine you-get-Erweiterung vorstellen, die beim Aufruf von YouTube den YouTube-Player umgeht und Inhalte direkt ohne Werbung abspielt. Das ließe sich nicht nur auf YouTube, sondern auch auf andere Plattformen anwenden.