Youtube Videos downloaden

Damit hier nicht direkt gemeckert wird: ich werde nur Inhalt von mir runterladen. Alles von meinem Channel und den Channels meiner Freunde (hab deren Erlaubnis).

Jetzt zum Inhalt. Ich soll für zwei meiner Freunde ein Tool schreiben. Dabei muss ich jedoch einige Videos runterladen. Doch ich kenne keinen Weg, dies in Java zu tun. Nach einigem googlen habe ich diesen stackoverflow link (How to download videos from youtube on java? - Stack Overflow)gefunden, der Code-Schnipsel geht aber irgendwie nicht.Kennt ihr vielleicht einen Weg? Denn mir fällt nichts mehr ein…

Danke :smiley:

Mit JDownloader kann ich YouTube Videos runterladen, irgendwie muss das also in Java auch gehen. Umgewandelt wird dann mit ffmpeg was dann zusätzlich installiert werden kann.

EDIT: Ach ich sehe gerade, dass du schon ein Snippet gefunden hast. Tja, Interna über YouTube und dessen Videoverwaltung auf deren Seite habe ich leider auch nicht parat.

Geht aber irgendwie nicht? Hmmm. Du könntest den Schnipsel irgendwie anders benutzen. Oder irgendwas anders machen im vergleich zu dem was do sonst irgendwie probiert hast.

Du siehst, mit so konkreten Angaben kommt man nicht sehr weit. Beschreibe was du machen willst, was du bereits versucht hast und wieso der Code den du gefunden hast bei dir nicht funktioniert. Irgendwie zählt nicht.

Ich finde dieses Snippet in php hilfreicher

How can I download youtube videos php? - Stack Overflow

Daten über die entsprechende URL Laden.
Die Daten sind URL-Encoded. Also Decoden.
Dort nach url_encoded_fmt_stream_map suchen und man bekommt eine Liste der Streams. Mit Semicolon getrennt.
Davon einen Auswählen und herunterladen.

Mit Java habe ich es nicht probiert, aber manuell funktioniert das (copy paste im Browser) und man erhält die mp4 Datei.

Evtl. benötigt man zur Kommunikation einen HttpClient, damit die nötigen Header und Cookies mitgesendet werden.

Wenn es ganz bitter ist, dann halt Selenium nehmen und einen Firefox fernsteuern.

Um eine Channelliste auszulesen etc. gibt es auch eine Offizielle API von Google, bzw. Youtube.

Tue dir und deinen Freunden einen Gefallen, und nutzt einfach eines der 100 bereits existierenden Tools. Ansonsten musst du dein Programm pflegen, damit nach der nächsten Youtube-Änderung dein Programm immernoch funzt. JDownloader klappt wunderbar (es ist Open Source und in Java, falls du an deinem Vorhaben festhälst).

Es ist relativ einfach Daten von YouTube zu laden, habe selbst einen funktionierenden Code (sogar mit Login um auch “private” Videos vom eigenen Channel laden zu können). Man findet eigentlich alles nötige im Netz und mit einem Sniffer wie WireShark um den eigentlichen Ablauf nachvollziehen zu können (SSL-Proxy wie z.B. Kaspersky zum Mitlesen des gesicherten Traffics ist sehr hilfreich) hat man nötiges innerhalb von 5 bis 10 Minuten zusammen.
Es gibt hier (und auch “drüben”) einige Threads zu diesem Thema auf die ich entsprechend folgend geantwortet habe : “Es gibt ein kleines Geheimnis das man kennen muss.” Dies bezieht sich auf eine interne Sicherung von YouTube die garantieren soll das halt nur der Player der aktuellen Session auch wirklich die Daten bekommt. Kann man aber recht einfach mit entsprechenden Aufrufen aber simulieren und so umgehen. Man braucht noch nicht mal irgendein Framework, URLConnection reicht völlig aus.

Einzig was mitlerweile etwas umständlich wird ist das Format : Video und Audio sind in zwei getrennten Files die erst im Player zum “vollständigen” Video zusammengefügt werden. Ergo muss man 2 Downloads durchführen : einmal das Video-File und zusätzlich das Audio-File.
Dann braucht man noch ein Tool um aus diesen zwei Files das gewünschte Ausgangsformat zu erzeugen … FERTIG !
ffmpeg sollte ausreichen, denn ich nutze FormatFactory, welches intern mit ffmpeg arbeitet, also wird man wohl ein entsprechendes Command zusammenbasteln können (Gibt es eigentlich Java-Bindings über JNI für ffmepg ?).

Ansonsten : jedem sollte bewusst sein das diese Art des Downloads

  1. gegen die AGB von YouTube/Google verstößt.
  2. rechtlich zumindest in Deutschland bei geschütztem Material verboten ist, da die vom Urteil (ich weis gar nicht mehr von welchem Gericht) als “technisch notwendige Zwischenspeicherung” die sonst beim normalen “Streaming” (nichts anderes ist es ja eigentlich) bewusst ausgehebelt und das File bewusst dauerhaft gespeichert wird.

Der 2te Punkt ist es warum ich keine direkte Hilfe in Form von Code gebe da ich halt nicht weis was der Nutzer am Ende wirklich mit macht und ich dann als Urheber des Codes zur Rechenschaft gezogen werden könnte. Ich gebe lediglich Hinweise damit man selbst drauf kommt wie die eingebauten Sicherungen zu umgehen sind.

Aber : Google baut gerne mal viel rum, es ist also mühsam ein eigenes Tool immer up-to-date zu halten. Ist zwar meist nicht viel was geändert wird, aber wenn man keine Lust hat sich ständig damit zu beschäftigen würde auch ich Raten : nutz lieber eines der unzähligen Tools die es bereits gibt, achte aber darauf seriöse Software zu nutzen, denn gerade diese “YT-Downloader” sind gerne mal mit Schadsoftware oder anderem belastet. Würde hier, so fern es wirklich geht, auch auf den JDownloader gehen, denn bei diesem kann man zumindest nachvollziehen was wirklich so alles mit dabei ist, und auch die große Community dahinter steigert die Sicherheit.

Das ist leider bzw. zum Glück falsch. Beim Herunterladen von Youtube fertigt der Nutzer eine Privatkopie an, die in Deutschland ausdrücklich weiterhin erlaubt ist. Vorraussetzung ist, dass der Nutzer diese Kopie nicht von offensichtlich illegalen Anbietern einholt. Youtube ist in keinster Weise ein offensichtlich illegaler Anbieter. Du kannst deinen Code also problemlos sharen.

Ich wusste nicht, dass das so einfach über http möglich ist, flash player ist ja auch nicht “quelloffen”. Interessantes Thema, auch das, was auf stack overflow und exchange steht, dort wird eine lib verwendet.

YouTube streamt schon länger über HTML5. Flash wird nur noch für ältere Browser verwendet.

Liegt immer im Auge des betrachters und ist halt eine rechtliche „Grauzone“.

Konkret ging es in dem von mir angesprochenen Urteil um das „Streaming“ von geschütztem Material (wie Kino-Filme) und die Frage ob dies als „illegaler Download“ angesehen werden kann. Im Urteil wurde dann klargestellt das die „technisch notwendige Zwischenspeicherung“ eben nicht als ein „bewusster Download“ angesehen wird und, wie du erwähnt hast, in solchen Fällen eigentlich nur das Verbreiten/Anbieten von geschütztem Material durch den Hoster für diesen selbst die eigentliche Straftat darstellt. Es wurde jedoch nicht eindeutig geklärt wie ein „bewusster Download“ nun genau zu bewerten ist. Natürlich kann man sich immer noch auf den Punkt „Privatkopie“, welche ja erlaubt ist, beziehen, aber bis diese Frage halt nicht eindeutig geklärt ist möchte ich mir halt selbst kein Bein stellen in dem ich halt Code zur Verfügung stelle der für sowas eben genutzt werden kann.

Außerdem, wie gesagt, verstößt ein „Download von Content“ gegen die AGB von YouTube/Google, womit theoretisch jeder, der entsprechenden Code veröffentlicht, potentiell von Google zur Rechenschaft gezogen werden kann.

Es hat ja auch nichts damit zu tun das der selbst-entwickelte Player von YouTube nicht „public domain“ ist, sonder damit für welche technische Umsetzung sich YouTube entschieden hat. Sicher hätte man auch irgendwas selbstgebasteltes nutzen können, vielleicht sogar auch eine gesicherte Verbindung, aber irgendwo her muss der Player ja seine Daten bekommen, und die kann man halt abgreifen bzw. den Request mit jeder anderen Sprache simulieren.
Das es halt nur ein simpler HTTP-Request ist und man sich somit halt direkte „Download-Links“ zusammenbauen kann ist halt so, wäre aber auch nicht viel anders wenn man halt ein proprietäres Protokoll genutzt hätte das dann irgendein cleverer Hacker knackt und public macht so das es andere nachimplementieren können.

Die AGB sind nicht rechtskräftig. Sie können daraus weder die Nutzer verklagen, die dagegen verstoßen, noch Entwickler die hierfür eine entsprechende Software bereitstellen. Sie können lediglich dein Konto sperren (als Nutzer).
Es soll nicht heißen, dass man am Ende nicht verklagt wird, aber die AGB können eben keine Anspruchsgrundlage darstellen. Sie könnten aber über einen entstanden Schaden (wie im Fall von Ebay vs Web Scraper [auch dort war der Verbot in den AGB vor Gericht unwichtig]) oder das Markenrecht gehen. Offensicht geht Youtube weder gegen den „Youtube Downloader“, noch gegen die hunderten von GitHub Repositories vor, also würde ich mir keine Sorgen machen.

[QUOTE=Sen-Mithrarin]Es hat ja auch nichts damit zu tun das der selbst-entwickelte Player von YouTube nicht “public domain” ist, sonder damit für welche technische Umsetzung sich YouTube entschieden hat. Sicher hätte man auch irgendwas selbstgebasteltes nutzen können, vielleicht sogar auch eine gesicherte Verbindung, aber irgendwo her muss der Player ja seine Daten bekommen, und die kann man halt abgreifen bzw. den Request mit jeder anderen Sprache simulieren.
Das es halt nur ein simpler HTTP-Request ist und man sich somit halt direkte “Download-Links” zusammenbauen kann ist halt so, wäre aber auch nicht viel anders wenn man halt ein proprietäres Protokoll genutzt hätte das dann irgendein cleverer Hacker knackt und public macht so das es andere nachimplementieren können.[/QUOTE]

Ich sag ja auch nicht, das ich so ein Programm schreiben möchte, sondern nur, das ich den Artikel dazu interessant finde. Für yt duerfte es whrs. auch egal sein, ob ein Video 5 oder 10mal aufgerufen wird. Hoffentlich ‘unterstellt’ mir Dark jetzt nicht irgendetwas Illegales oder Verbotenes, obwohl ich mir dazu noch gar keine Gedanken gemacht hab. Ich dachte eigtl., man versteht sich ganz gut. Er hat seine Ansichten, ich hab meine, und die behalte auch für mich. Noch mal, ich bin Informatikerin’, nicht Jurist, Bwl’er, Öko, Arzt o. Ä.

Ääääh, was? :smiley: