ProjekteNerdkrams
In eigener Sache: YouTube — wie schwer kann es schon sein?

Als youtube-dl, ein bekan­ntes Werkzeug zum Offlineguck­en von lang­weiligem Unsinn, vor zwei Wochen rechtliche Prob­leme bekam, weil die RIAA anscheinend der Ansicht ist, dass das Besor­gen urhe­ber­rechtlich geschützten Pop­mülls kein legit­imes Nutzungs­beispiel sein sollte, geri­et das Netz wieder ein­mal in hek­tis­che Angst, was die Zukun­ft des Herun­ter­ladens bet­rifft. Ich habe der Sit­u­a­tion ver­gle­ich­sweise entspan­nt zuge­se­hen, denn mir war etwas aufge­fall­en:

Die ver­gle­ich­sweise oft genan­nte Alter­na­tive you-get teilt mit youtube-dl und vie­len anderen Optio­nen das wesentliche Prob­lem, dass sie in Python geschrieben ist. Python mag en vogue sein, weil es schnelle Lösun­gen ver­spricht, aber das tat BASIC sein­erzeit eben auch — und BASIC war nicht dafür bekan­nt, vor allem elend langsam zu sein. Mehr noch: Nicht sel­ten fand ich auf meinen Sys­te­men nach einem Pythonup­grade manche Anwen­dungssoft­ware nicht mehr lauf­fähig vor, meist wegen inkom­pat­i­bler Abhängigkeit­en. Meine let­zte eigene Python­soft­ware — die Kuck­uck­suhr — ist deshalb inzwis­chen auch in Rust (dazu unten mehr) geschrieben. Je mehr Pro­gramme, die ich ein­set­ze, sta­tisch gelinkt wer­den, desto weniger wahrschein­lich geht nach einem größeren Update irgend­was kaputt.

piko sah als Go-Anwen­dung daher inter­es­sant aus, hat von youtube-dl aber die bei­den Designärg­ernisse abgeguckt, dass es erstens nicht nur Video‑, son­dern auch Bilder­plat­tfor­men unter­stützen will, was die Kom­plex­ität unnötig erhöht, und zweit­ens — für mich selb­st ganz inter­es­sant — keine ein­heitliche Möglichkeit anbi­etet, nach dem Down­load nur noch die Audio­dat­en zu behal­ten. Der zusät­zliche Befehl kann bei häu­figer Nutzung doch recht lästig wer­den.

In einem Anflug geistiger Umnach­tung habe ich daher laut gedacht, so was kön­nte ich auch. Lei­der wollte es dann auch jemand haben. Schade.

Die wesentlichen Funk­tio­nen soll­ten fol­gende sein:

  1. Keine unnöti­gen Spiel­ereien. Es sollen Videos (option­al: nur die Audiostreams) in der besten ver­füg­baren Qual­ität herun­terge­laden wer­den kön­nen. Keine Bilder. Keine GIFs.
  2. Kein Python. Aus Grün­den.
  3. Ein­fache Erweit­er­barkeit. Zwar muss natür­lich YouTube unter­stützt wer­den, aber spätere Erweiterun­gen um andere Seit­en soll­ten so wenig dop­pel­ten Code wie möglich erfordern.

Ich habe also yaydl in Rust pro­gram­miert, ein­er Sprache, mit der ich — schon wegen des beachtlich guten cargo-Sys­tems — sowieso mal mehr machen wollte als bloß ein biss­chen Text auszugeben. Zwar nutze ich in let­zter Zeit vor allem Go (und Perl), aber das wäre ja keine Her­aus­forderung. Das trait-Konzept ist auch recht überzeu­gend: Um eine weit­ere Web­site neben YouTube hinzuzufü­gen, muss in yaydl nur ein Inter­face mit jew­eils sechs Funk­tio­nen imple­men­tiert wer­den. Das sollte schaff­bar sein.

Über Vor- und Nachteile von Go und Rust, auch gegenüber anderen von mir gemocht­en Sprachen, möchte ich an dieser Stelle nicht disku­tieren, das über­lasse ich irgendwelchen Quatschblogs, die mit so was ihr Geld ver­di­enen. Stattdessen möchte ich die ein­gangs gestellte Frage selb­st beant­worten: YouTube macht es einem wirk­lich nicht leicht, Videos herun­terzu­laden, denn direk­te URLs gibt es nicht.

Daher muss man zu einem Video erst die get_video_info-Datei herun­ter­laden, dort das JSON-Objekt mit den Video­dat­en her­aus­suchen und in diesem in ein­er undoku­men­tierten Liste an num­merierten For­mat­en das beste her­aus­suchen und dessen URL extrahieren. Meine erste Ver­sion macht genau das, jedoch scheint es emp­fohlen zu sein, aus diesen vier Schrit­ten (min­destens) zwölf zu machen. Ich ver­mute, die Mach­er von YouTube haben sich etwas dabei gedacht, ich werde den Code nach Abklin­gen mein­er Kopf­schmerzen möglicher­weise entsprechend erweit­ern.

Immer­hin: Ich beginne zu ver­ste­hen, warum es bish­er so wenige gute Alter­na­tiv­en gab.

Senfecke:

  1. Stattdessen möchte ich die ein­gangs gestellte Frage selb­st beant­worten: YouTube macht es einem wirk­lich nicht leicht, Videos herun­terzu­laden, denn direk­te URLs gibt es nicht.

    Daher muss man zu einem Video erst die get_video_in­fo-Datei herun­ter­laden, dort das JSON-Objekt mit den Video­dat­en her­aus­suchen und in diesem in ein­er undoku­men­tierten Liste an num­merierten For­mat­en das beste her­aus­suchen und dessen URL extrahieren. Meine erste Ver­sion macht genau das, jedoch scheint es emp­fohlen zu sein, aus diesen vier Schrit­ten (min­destens) zwölf zu machen. Ich ver­mute, die Mach­er von YouTube haben sich etwas dabei gedacht, ich werde den Code nach Abklin­gen mein­er Kopf­schmerzen möglicher­weise entsprechend erweit­ern.
    Na dann auch viel Spaß, beim regelmäßi­gen Rück­wärts-inge­nieuren und Nach­pfle­gen, wenn YouTube wieder mal kleine oder größere Änderun­gen ein­baut. Es hat schon seinen Grund, warum bei youtube-dl so häu­fige Updates kom­men und andere Pro­jek­te keinen Bock mehr hat­ten.

    Immer­hin: Ich beginne zu ver­ste­hen, warum es bish­er so wenige gute Alter­na­tiv­en gab.
    Na dann wollen wir mal hof­fen, dass Du doch bald noch in ein Alter kommst, in dem Du am Anfang dann mal nicht mehr so groß die Klappe aufreißt. Mit Dein­er “Nur ich allein hab den absoluten Durchblick”-Attitüde wärst Du übri­gens auch ein per­fek­ter Ver­schwörungss­chwur­bler (btw. würde das Deinen Ver­mö­gensver­hält­nis­sen vielle­icht auch ganz gut tun, so wie es bei den Anderen da abge­ht…).

    • Mit Dein­er „Nur ich allein hab den absoluten Durchblick“-Attitüde wärst Du übri­gens auch ein per­fek­ter Ver­schwörungss­chwur­bler

      Was ist los? Ich ver­misse noch die Nie-Na-Nazivor­würfe, weil jemand eine nüt­zliche Soft­ware veröf­fentlicht und eine Andeu­tung der Prob­leme macht, die er wegen der Down­load­ver­hin­derungsstrate­gien (von mir auch gern »Tech­nikver­hin­derung« genan­nt) von Googles YouTube hat. Denn ohne diese Tech­nikver­hin­derung wäre es wirk­lich kein großes Prob­lem, son­dern im Ide­al­fall ein Shell­skript um curl.

      Der Lauf­fähigkeit von Soft­ware ist die Per­sön­lichkeit des Prog­gers völ­lig egal. Zum Glück! ;)

      Und ich ver­misse die Zeit­en damals, als das Inter­net mehr ein Plätsch­ern als ein jede Ver­nun­ft und Zurück­hal­tung mit sich reißen­der Strom war; damals, als ich ein­fach ein YouTube-Video pausieren kon­nte, der Down­load während­dessen weit­erg­ing, so dass ichab warten kon­nte, bis es kom­plett im lokalen Buffer war und es dann ohne Nach­lade­pausen abspie­len kon­nte. Na gut, ich ver­misse die Zeit­en nicht wirk­lich. Aber so sieht das eben ohne Tech­nikver­hin­derung aus. Das Prob­lem ist hier eine hirn­los-geschäft­stüchtig agierende Unternehmung, die ein­er­seits einen Down­load ermöglichen muss (damit der »Stream« in den Brows­er kommt), die ander­er­seits aber einen Down­load erschw­eren oder ver­hin­dern will – und dass diese Unternehmung auch noch sehr willkür­lich zen­siert und dass wertvolle Inhalte (ich meine damit nicht die Ein­las­sun­gen von KenFM und Kon­sorten, die gute Klick­bringer und Reklamev­er­mark­ter für YouTube sind) aus Bull­shit­grün­den ver­schwinden, macht die Sache nicht bess­er. Für mich ist jeden­falls klar, auf welch­er Seite dieses absur­den The­aters das Arschloch ste­ht. Ein ziem­lich tech­nokratis­ches Loch ist es…

      • Für mich ist jeden­falls klar, auf welch­er Seite dieses absur­den The­aters das Arschloch ste­ht. Ein ziem­lich tech­nokratis­ches Loch ist es…
        Wie bitte? Ich soll jet­zt Teil der großen YouTube-Ver­schwörung sein oder was?

        Ich kri­tisierte lediglich, in welchem großkotzi­gen Ton­fall der Autor sich mal wieder äußerte und alle anderen sin­ngemäß als doof und Idioten beschimpfte, und er weiß mal wieder alles bess­er, natür­lich auch als Pro­jek­te, die sich ca. 15 Jahre schon mit dem The­ma herum­schla­gen.

        Und ich bemerk­te, dass er seine immer zur Schau gestellte Großkotz-Attitüde (zusam­men mit Dun­ning-Kruger-Effekt, zu beliebi­gen The­men) eben mit Ver­schwörungss­chwur­blern gemein­sam hat.

        Warum sollte ich Etwas gegen seine Eige­nen­twick­lung haben? Mein Hin­weis ging lediglich in die Rich­tung, dass er bess­er Viele bei der Entwick­lung um sich scharen sollte (bzw. sich schon existieren­den Grup­pen anschließen sollte, die auch schon regelmäßig das Reverse-Engi­neer­ing betreiben, etc.), denn als Ein-Mann-Pro­jekt ist es wegen der vie­len und auch umfan­gre­icheren Änderun­gen bei den Pro­tokollen (die auch mit der Zeit immer kom­plex­er wur­den, siehe auch HLS, etc.) der Por­tale ziem­lich aufwändig, die Soft­ware funk­tions­fähig zu hal­ten.

  2. Also… ich komme ziem­lich gut mit SaveFrom.net zurecht. Spricht etwas aus Experten­sicht dage­gen?

    • Zu viele Track­ingscripts, zu wenig Trans­parenz. Ich per­sön­lich mag keine Web­di­en­ste. Aber bitte, wenn’s den Zweck erfüllt?

    • ver­such mal mit sowas wie Save­From zb vr-3D-180/360° videos im Equirec­tan­gu­lar-for­mat (und vor allem eben nicht als cube-map) in 4K von youtube zu ziehen. geht idr nicht mit web­di­en­sten. du *weisst*, die sind auf dem youtube-serv­er, kommst aber ums ver­reck­en nicht ran. manch­mal erwis­cht ne app wie vid­Mate die richtige webM-fas­sung, aber nor­maler­weise bekomm­ste nur die stan­dart-mono-fas­sung in max. 1080 ange­boten.

      nervt.

  3. Cool von dir, dass du diese Lern­er­fahrung in deinen Blog gepackt hat. Manch­mal muss man es halt erst wirk­lich bauen um zu sehen warum etwas kom­pliziert ist.

Comments are closed.

https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_smilenew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_biggrin2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_sadnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_eek.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_shocked.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_confusednew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_coolnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_lol.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_madnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_aufsmaul.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_seb_zunge.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_blushnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_frown.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil1.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/icon_mad.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_rolleyesnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_wink2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_idea2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_arrow2.gif 
mehr …
 

Erlaubte Tags:
<strong> <em> <pre> <code> <a href="" title=""> <img src="" title="" alt=""> <blockquote> <q> <b> <i> <del> <tt> <span style=""> <strike>

Datenschutzhinweis: Deine IP-Adresse wird nicht gespeichert. Details findest du hier.