{"id":17473,"date":"2020-11-08T21:34:14","date_gmt":"2020-11-08T20:34:14","guid":{"rendered":"https:\/\/tuxproject.de\/blog\/?p=17473"},"modified":"2020-11-09T14:41:06","modified_gmt":"2020-11-09T13:41:06","slug":"in-eigener-sache-youtube-wie-schwer-kann-es-schon-sein","status":"publish","type":"post","link":"https:\/\/tuxproject.de\/blog\/2020\/11\/in-eigener-sache-youtube-wie-schwer-kann-es-schon-sein\/","title":{"rendered":"In eige\u00adner Sache: You\u00adTube \u2013 wie schwer kann es schon sein?"},"content":{"rendered":"<p>Als <code>youtube-dl<\/code>, ein bekann\u00adtes Werk\u00adzeug zum Off\u00adlin\u00adegucken von lang\u00adwei\u00adli\u00adgem Unsinn, vor zwei Wochen <a href=\"https:\/\/linuxnews.de\/2020\/10\/youtube-dl-von-github-entfernt\/\">recht\u00adli\u00adche Pro\u00adble\u00adme bekam<\/a>, weil die RIAA anschei\u00adnend der Ansicht ist, dass das Besor\u00adgen urhe\u00adber\u00adrecht\u00adlich gesch\u00fctz\u00adten Pop\u00adm\u00fclls kein legi\u00adti\u00admes Nut\u00adzungs\u00adbei\u00adspiel sein soll\u00adte, geriet <em>das Netz<\/em> wie\u00adder ein\u00admal in hek\u00adti\u00adsche Angst, was die Zukunft des Her\u00adun\u00adter\u00adla\u00addens betrifft. <!--more-->Ich habe der Situa\u00adti\u00adon ver\u00adgleichs\u00adwei\u00adse ent\u00adspannt zuge\u00adse\u00adhen, denn mir war etwas auf\u00adge\u00adfal\u00adlen:<\/p>\n<p>Die ver\u00adgleichs\u00adwei\u00adse oft genann\u00adte Alter\u00adna\u00adti\u00adve <code>you-get<\/code> teilt mit <code>youtube-dl<\/code> und vie\u00adlen ande\u00adren Optio\u00adnen das wesent\u00adli\u00adche Pro\u00adblem, dass sie in Python geschrie\u00adben ist. Python mag <em>en vogue<\/em> sein, weil es schnel\u00adle L\u00f6sun\u00adgen ver\u00adspricht, aber das tat BASIC sei\u00adner\u00adzeit eben auch \u2013 und BASIC war <em>nicht<\/em> daf\u00fcr bekannt, vor allem elend lang\u00adsam zu sein. Mehr noch: Nicht sel\u00adten fand ich auf mei\u00adnen Syste\u00admen nach einem Pythonup\u00adgrade man\u00adche Anwen\u00addungs\u00adsoft\u00adware nicht mehr lauf\u00adf\u00e4\u00adhig vor, meist wegen inkom\u00adpa\u00adti\u00adbler Abh\u00e4n\u00adgig\u00adkei\u00adten. Mei\u00adne letz\u00adte eige\u00adne Python\u00adsoft\u00adware \u2013 die <a href=\"https:\/\/twitter.com\/die_kuckucksuhr\">Kuckucks\u00aduhr<\/a> \u2013 ist des\u00adhalb inzwi\u00adschen auch in Rust (dazu unten mehr) geschrie\u00adben. Je mehr Pro\u00adgram\u00adme, die ich ein\u00adset\u00adze, sta\u00adtisch gelinkt wer\u00adden, desto weni\u00adger wahr\u00adschein\u00adlich geht nach einem gr\u00f6\u00ad\u00dfe\u00adren Update irgend\u00adwas kaputt.<\/p>\n<p><a href=\"https:\/\/github.com\/mlvzk\/piko\">piko<\/a> sah als Go-Anwen\u00addung daher inter\u00ades\u00adsant aus, hat von <code>youtube-dl<\/code> aber die bei\u00adden Design\u00e4r\u00adger\u00adnis\u00adse abge\u00adguckt, dass es <em>erstens<\/em> nicht nur Video\u2011, son\u00addern auch Bil\u00adder\u00adplatt\u00adfor\u00admen unter\u00adst\u00fct\u00adzen will, was die Kom\u00adple\u00adxi\u00adt\u00e4t unn\u00f6\u00adtig erh\u00f6ht, und <em>zwei\u00adtens<\/em> \u2013 f\u00fcr <em>mich selbst<\/em> ganz inter\u00ades\u00adsant \u2013 kei\u00adne ein\u00adheit\u00adli\u00adche M\u00f6g\u00adlich\u00adkeit anbie\u00adtet, nach dem Down\u00adload nur noch die Audio\u00adda\u00adten zu behal\u00adten. Der zus\u00e4tz\u00adli\u00adche Befehl kann bei h\u00e4u\u00adfi\u00adger Nut\u00adzung doch recht l\u00e4stig wer\u00adden.<\/p>\n<p>In einem Anflug gei\u00adsti\u00adger Umnach\u00adtung habe ich daher <a href=\"https:\/\/www.linux-bibel-oesterreich.at\/2020\/10\/24\/youtube-dl-am-ende-ersatz\/#comment-1911\">laut gedacht<\/a>, so was k\u00f6nn\u00adte ich auch. Lei\u00adder woll\u00adte es dann auch jemand haben. Scha\u00adde.<\/p>\n<p>Die wesent\u00adli\u00adchen Funk\u00adtio\u00adnen soll\u00adten fol\u00adgen\u00adde sein:<\/p>\n<ol>\n<li>Kei\u00adne unn\u00f6\u00adti\u00adgen Spie\u00adle\u00adrei\u00aden. Es sol\u00adlen Vide\u00ados (optio\u00adnal: nur die Audio\u00adstreams) in der besten ver\u00adf\u00fcg\u00adba\u00adren Qua\u00adli\u00adt\u00e4t her\u00adun\u00adter\u00adge\u00adla\u00adden wer\u00adden k\u00f6n\u00adnen. Kei\u00adne Bil\u00adder. Kei\u00adne GIFs.<\/li>\n<li>Kein Python. Aus Gr\u00fcn\u00adden.<\/li>\n<li>Ein\u00adfa\u00adche Erwei\u00adter\u00adbar\u00adkeit. Zwar muss <em>nat\u00fcr\u00adlich<\/em> You\u00adTube unter\u00adst\u00fctzt wer\u00adden, aber sp\u00e4\u00adte\u00adre Erwei\u00adte\u00adrun\u00adgen um ande\u00adre Sei\u00adten soll\u00adten so wenig dop\u00adpel\u00adten Code wie m\u00f6g\u00adlich erfor\u00addern.<\/li>\n<\/ol>\n<p>Ich habe also <a href=\"https:\/\/code.rosaelefanten.org\/yaydl\"><code>yaydl<\/code><\/a> in Rust pro\u00adgram\u00admiert, einer Spra\u00adche, mit der ich \u2013 schon wegen des beacht\u00adlich guten <code>cargo<\/code>-Systems \u2013 sowie\u00adso mal mehr machen woll\u00adte als blo\u00df ein biss\u00adchen Text aus\u00adzu\u00adge\u00adben. Zwar nut\u00adze ich in letz\u00adter Zeit vor allem Go (und Perl), aber das w\u00e4re ja kei\u00adne Her\u00adaus\u00adfor\u00adde\u00adrung. Das <code>trait<\/code>-Kon\u00adzept ist auch recht \u00fcber\u00adzeu\u00adgend: Um eine wei\u00adte\u00adre Web\u00adsite neben You\u00adTube hin\u00adzu\u00adzu\u00adf\u00fc\u00adgen, muss in <code>yaydl<\/code> <em>nur<\/em> ein Inter\u00adface mit <a href=\"https:\/\/code.rosaelefanten.org\/yaydl\/file?name=src\/definitions.rs&amp;ci=tip\">jeweils sechs Funk\u00adtio\u00adnen<\/a> imple\u00admen\u00adtiert wer\u00adden. Das soll\u00adte schaff\u00adbar sein.<\/p>\n<p>\u00dcber Vor- und Nach\u00adtei\u00adle von Go und Rust, auch gegen\u00ad\u00fcber ande\u00adren von mir gemoch\u00adten Spra\u00adchen, m\u00f6ch\u00adte ich an die\u00adser Stel\u00adle nicht dis\u00adku\u00adtie\u00adren, das \u00fcber\u00adlas\u00adse ich irgend\u00adwel\u00adchen Quatsch\u00adblogs, die mit so was ihr Geld ver\u00addie\u00adnen. Statt\u00addes\u00adsen m\u00f6ch\u00adte ich die ein\u00adgangs gestell\u00adte Fra\u00adge selbst beant\u00adwor\u00adten: You\u00adTube macht es einem <em>wirk\u00adlich nicht leicht<\/em>, Vide\u00ados her\u00adun\u00adter\u00adzu\u00adla\u00adden, denn direk\u00adte URLs <em>gibt es nicht<\/em>.<\/p>\n<p>Daher muss man zu einem Video erst die <code>get_video_info<\/code>-Datei her\u00adun\u00adter\u00adla\u00adden, dort das JSON-Objekt mit den Video\u00adda\u00adten her\u00adaus\u00adsu\u00adchen und in die\u00adsem in einer undo\u00adku\u00admen\u00adtier\u00adten Liste an num\u00adme\u00adrier\u00adten For\u00adma\u00adten das beste her\u00adaus\u00adsu\u00adchen und des\u00adsen URL extra\u00adhie\u00adren. Mei\u00adne erste Ver\u00adsi\u00adon macht <em>genau das<\/em>, jedoch scheint es <a href=\"https:\/\/tyrrrz.me\/blog\/reverse-engineering-youtube\">emp\u00adfoh\u00adlen zu sein<\/a>, aus die\u00adsen vier Schrit\u00adten (min\u00adde\u00adstens) zw\u00f6lf zu machen. Ich ver\u00admu\u00adte, die Macher von You\u00adTube haben sich etwas dabei gedacht, ich wer\u00adde den Code nach Abklin\u00adgen mei\u00adner Kopf\u00adschmer\u00adzen m\u00f6g\u00adli\u00adcher\u00adwei\u00adse ent\u00adspre\u00adchend erwei\u00adtern.<\/p>\n<p>Immer\u00adhin: Ich begin\u00adne zu ver\u00adste\u00adhen, war\u00adum es bis\u00adher so weni\u00adge gute Alter\u00adna\u00adti\u00adven gab.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Als you\u00adtube-dl, ein bekann\u00adtes Werk\u00adzeug zum Off\u00adlin\u00adegucken von lang\u00adwei\u00adli\u00adgem Unsinn, vor zwei Wochen recht\u00adli\u00adche Pro\u00adble\u00adme bekam, weil die RIAA anschei\u00adnend der Ansicht ist, dass das Besor\u00adgen urhe\u00adber\u00adrecht\u00adlich gesch\u00fctz\u00adten Pop\u00adm\u00fclls kein legi\u00adti\u00admes Nut\u00adzungs\u00adbei\u00adspiel sein soll\u00adte, geriet das Netz wie\u00adder ein\u00admal in hek\u00adti\u00adsche Angst, was die Zukunft des Her\u00adun\u00adter\u00adla\u00addens betrifft.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[5,19],"tags":[],"series":[],"class_list":["post-17473","post","type-post","status-publish","format-standard","hentry","category-projekte","category-nerdkrams"],"share_on_mastodon":{"url":"","error":""},"wp-worthy-pixel":{"ignored":false,"public":null,"server":null,"url":null},"wp-worthy-type":"normal","_links":{"self":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/17473","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/comments?post=17473"}],"version-history":[{"count":0,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/17473\/revisions"}],"wp:attachment":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/media?parent=17473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/categories?post=17473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/tags?post=17473"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/series?post=17473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}