Raspberry Pi: YouTube Video Upload Server
Viele, die hobbymäßig Videos produzieren und auf YouTube veröffentlichen, werden das Problem kennen: Man hat fertig geschnitten, gerendert und die 1080p Version des Videos, welche nun hochgeladen werden muss, ist mehrere hundert Megabyte oder gar ein paar Gigabyte groß. Bei einer privaten Internetleitung kann das, sofern man nicht gerade VDSL 25 oder mehr hat, mit dem mageren Upstream einige Zeit dauern. Zeit, in der man sein Internet kaum anderweitig nutzen kann, aber der Computer oder Mac die ganze Zeit laufen muss. Wie man über den Raspberry Pi ein Video auf YouTube hochlädt und das am besten auch noch Nachts, wo die Internetleitung sowieso ungenutzt ist, erkläre ich im Folgenden.
Voraussetzung: Raspbian oder vergleichbare Distribution installiert
Step 1
Zunächst müssen wir ein paar benötigte Pakete installieren und aktualisieren zuvor den Paketmanager, damit wir diese auch in aktueller Version installieren.
sudo apt-get update
sudo apt-get -y install python python-gdata python-progressbar python-pycurl
Step 2
Nun benötigen wir ein Script, welches den Upload auf YouTube ermöglicht. Dies können wir unter https://code.google.com/p/youtube-upload/downloads/list herunterladen. Daraufhin entpacken wir das Programm mit folgendem Kommando, benennen den Ordner in youtube-upload um und wechseln in diesen. Zum Zeitpunkt als ich das Tutorial schrieb war Version 0.7.3 aktuell.
wget https://youtube-upload.googlecode.com/files/youtube-upload-0.7.3.tgz
tar xfvz youtube-upload-*.tgz
rm youtube-upload-*.tgz
mv youtube-upload-* youtube-upload
cd youtube-upload
Step 3
Dort können wir nun mittels folgendem Befehl das soeben heruntergeladene Script installieren.
sudo python setup.py install
Step 4
Jetzt können wir mittels dem Befehl python youtube_upload/youtube_upload.py das Video hochladen. Dabei müssen und können wir ein paar Parameter definieren, die in der unten stehenden Tabelle aufgeführt sind.
Beispiel
python youtube_upload/youtube_upload.py [email protected] --password="meinpasswort" --title="Video mit Raspi hochgeladen" --description="Das ist mein erstes Video das ich mit meinem Raspberry Pi hochgeladen habe." --category=Music /home/pi/video.mp4
Nachdem wir nun wissen wie das Hochladen prinzipiell funktioniert, folgen nun alle relevanten Parameter des Upload-Scripts:
Parameter | Werte | Benötigt | Funktion |
---|---|---|---|
–email=““ | YouTube Account E-Mail Adresse | Ja | E-Mail Adresse zur Authentifizierung beim Upload |
–password=““ | YouTube Account Passwort | Ja | Passwort zur Authentifizierung beim Upload |
–title=““ | Text | Ja | Titel des Videos |
– | Dateiname | Ja | Dateiname und -pfad zum Video am Ende der Parameterreihe |
–description=““ | Text | Nein | Videobeschreibung |
–description=“$(< \file.txt)“ | Textdatei | Nein | Videobeschreibung als Textdatei. Vorteilhaft wenn die Videobeschreibung mehrere Absätze hat |
–category=““ | YouTube-Kategorie | Nein | Kategorie in der das Video veröffentlicht werden soll |
–keywords=““ | Text | Nein | Keywords für das Video. Mehrere müssen mit Kommata abgetrennt werden |
–private | – | Nein | Video erhält des Veröffentlichungsstatus bzw. Datenschutzeinstellung Privat |
–unlisted | – | Nein | Video erhält des Veröffentlichungsstatus bzw. Datenschutzeinstellung Nicht gelistet |
–get-categories | – | Nein | Parameter kann nur ohne andere Parameter angegeben werden. Gibt Liste der YouTube-Kategorien zurück |
Step 5 (optional)
Möchte man nun ein Video zu einem bestimmten Zeitpunkt, beispielsweise am 01.01. um Mitternacht hochladen, so kann man hierfür eine At einrichten. Dieses kleine Programm müssen wir zunächst installieren.
sudo apt-get install at
Step 6 (optional)
Wir rufen nun folgende Zeile mit angepassten Paramentern und angepasster Zeiteinstellung auf, um das Kommando zum angegebenen Zeitpunkt aufrufen zu lassen.
echo 'python /home/pi/youtube-upload/youtube_upload/youtube_upload.py [email protected] --password="meinpasswort" --title="Video mit Raspi hochgeladen" --description="Das ist mein erstes Video das ich mit meinem Raspberry Pi hochgeladen habe." --category=Music /home/pi/video.mp4' | at 00:00 31.12.2013
Fertig! Nun kann das Video bequem Nachts über den Raspberry Pi hochgeladen werden und tagsüber ist die Internetleitung zur anderweitigen Nutzung frei!
Dieser Artikel wurde am 20. April 2014 überarbeitet.
55 Kommentare. Hinterlasse eine Antwort
Great Contribution, shall try it soon. Nice to see that you are comming close to the features of a Fonera 2.0n Smart Router.
One small suggestion / request, is it possible to get a Tweet and/or Mail when the Upload is complete ?
I guess, next project would be , to upload PIC’s to PICASSA. 🙂
regards
Picasa, no. Than ca you do easily at your default pc, because of it is not a very big file to upload.
Kann man nach einem Gestarteten Upload die Terminal sitzung verlassen? und kann ich mich später wieder einloggen und den fortschritt anschauen?
Würde ich mittels
screen
lösen.Wie geht das?
Für diejenigen, welche sich noch immer fragen, wie der Upload mit screen funktioniert:
1. screen installieren (sudo apt-get install screen)
2. „screen bash“ eingeben um ein Terminal, welches auch nach Logout weiter läuft, zu öffnen.
3. Upload starten
4. STRG+A+D drücken –> Terminal wird in den Hintergrund geschoben
5. Logout
6. Bei erneutem Login „screen -r“ eingeben um den Fortschritt zu sehen.
7. Um das Hintergrund-Terminal zu beenden (Upload wird abgebrochen, falls noch nicht abgeschlossen) – STRG+D drücken.
Für einmalige (oder durch Skripte individuell geplante) Zeitaufträge eignet sich auch `at` gut.
Z.B.: `echo „example_script.sh“ | at now + 10 minutes`
Dank für deine schönen kompakt-fokussierten Anleitungen hier.
Danke für das Lob und der Tipp. Wollte ich sowieso noch, wenn mal Zeit dafür ist, verbessern.
Super Blog mit vielen nützlichen Tipps rund um den Raspberry. Hat mir viel geholfen. Jedoch hat das youtube-upload tutorial so bei mir nicht funktioniert. Habe lange gesucht bis ich die Lösung gefunden hatte und wollte nun auch andere mögliche Betroffene an der Lösung teilhaben lassen.
Bei kam bei der Verwendung des Skripts immer der Fehler „pycurl.error: (56, ‚GnuTLS recv error (-9): A TLS packet with unexpected length“ und der download brach ab (wenn er überhaupt initiiert wurde). Auf einer anderen Seite wurde berichtet, dass man dies mit der Installation der progressbar sowie eines anderen Pakets umgehen kann. Die Pakete die ich nun installiert habe damit das Skript richtig funktionierte und der oben genannte Fehler verschwand sind folgende:
apt-get install python python-gdata python-progressbar python-pycurl subversion
Hoffe das hilft dem ein oder anderen weiter.
Gruß
FizbanLP
Quelle: http://www.letsplayforum.de/index.php?page=Thread&postID=465928#post465928
Konstruktiver Kommentar mit konkretem Lösungsvorschlag und sogar noch mit Quelle. Top! Bei mir hat es zwar auch ohne den Paketen geklappt, aber ich hab deinen Vorschlag mal dem Tutorial hinzugefügt. Danke.
Hallo, ich habe deine Anleitung ausgeführt und beim start des hochladens bekomme ich folgende meldung.
Start upload using a HTTP post: mit
Traceback (most recent call last):
File „youtube_upload/youtube_upload.py“, line 512, in
sys.exit(catch_exceptions(EXIT_CODES, main, sys.argv[1:]))
File „youtube_upload/youtube_upload.py“, line 111, in catch_exceptions
fun(*args, **kwargs)
File „youtube_upload/youtube_upload.py“, line 509, in main
run_main(parser, options, args)
File „youtube_upload/youtube_upload.py“, line 444, in run_main
url = upload_video(youtube, options, video_path, len(args), index)
File „youtube_upload/youtube_upload.py“, line 363, in upload_video
post(data[„post_url“], {„file“: video_path}, {„token“: data[„token“]})
File „youtube_upload/youtube_upload.py“, line 149, in post
total_filesize = sum(os.path.getsize(path) for path in files_params.values())
File „youtube_upload/youtube_upload.py“, line 149, in
total_filesize = sum(os.path.getsize(path) for path in files_params.values())
File „/usr/lib/python2.7/genericpath.py“, line 49, in getsize
return os.stat(filename).st_size
OSError: [Errno 2] No such file or directory: ‚mit‘
root@raspberrypi:/youtube-upload#
Der Error zeigt halt das hier an.
OSError: [Errno 2] No such file or directory: ‚mit‘
die Datei leigt zu 100% in diesem Ordner und heißt auch so, ich weiß jetzt nicht, was für eion Problem er hat^^.
Sorry für die späte Antwort. Bist du sicher, dass du Step 3 ausgeführt hast? Habe es gerade bei mir noch mal installiere. Ohne Probleme.
Habe eben sicherheitshalber Step 3 nochmal ausgeführt:
pi@raspberrypi ~/youtube-upload $ sudo python setup.py install
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/local/bin/youtube-upload to 755
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/youtube_upload-0.7.3.egg-info
Writing /usr/local/lib/python2.7/dist-packages/youtube_upload-0.7.3.egg-info
aber ich bekomme den gleichen fehler
OK
hat sich erledigt, ich hatte ein “ vergessen. Oh man.
Vielen Dank für dein Tutorial und deine Antwort.
Hey, ich habe noch keinen Pi, werde jedoch in den nächsten Tagen einen bekommen. Ich hab mir jetzt schon einiges durchgelesen und find dein Tutorial hier ziemlich gut gelungen. Ich hab jetzt nur eine Frage dazu, gibt es eine Möglichkeit über ein automatisiertes Skript etwas in der Art zu bauen:
Der Pi ist dauer-an und am Internet, hat meine Youtube daten gespeichert. Nun erzeuge ich einen bestimmten Ordner den der Pi dauerhaft überwacht. Wenn ich in diesen Ordner eine Videodatei kopiere erkennt der Pi dies und beginnt die Datei auf youtube hochzuladen. Wenn er fertig hochgeladen hat löscht er die datei und nimmt die nächste. Als titel soll jeweils der Dateiname genommen werden.
Gibt es eine solche Funktion oder müsste ich sowas selbst schreiben? Würde mich über ne Antwort freuen 🙂
Gruß Achim
Das müsstest du dir selbst schreiben, aber das wäre gleich eine gute Übung um in das Schreiben von Shell Scripten einzusteigen.
Hallo Achim,
ich habe genau das gleiche vor 😀 Hast du denn mittlerweile eine Lösung gefunden?
Gruß Niklas
Hi Jan, tolle Lösung!
Kann man bedingt auf das Ergebnis (erfolgreich / fehlgeschlagen) beispielsweise ein Shellskript ausführen (um das Video zu verschieben / mir eine Email zu schicken o. ähnliches)?
Gruß, Chris!
Ich denke, dass das kein Problem darstellen sollte.
Sehr hilfreicher Beitrag, genau so etwas hatte ich gesucht! Danke!
wenn ich mv youtube-upload-* youtube-upload eingebe, kommt mv: target `youtube-upload‘ is not a directory. was hab ich Falsch gemacht?
Was für eine Ausgabe erhältst du wenn du folgendes in dem selben Ordner, aus dem du das mv Kommando ausgeführt hast, ausführst?
ls -l
pi@raspberrypi ~ $ ls -l
total 32
drwxr-xr-x 2 pi pi 4096 Jan 7 23:09 Desktop
-rw-r–r– 1 pi pi 5781 Feb 3 2013 ocr_pi.png
drwxrwxr-x 2 pi pi 4096 Mar 10 2013 python_games
drwxr-xr-x 5 pi pi 4096 Feb 23 2013 youtube-upload-0.7.2
-rw-r–r– 1 pi pi 11045 Feb 23 2013 youtube-upload-0.7.2.tgz
Okay habs glaube ich selbst gelöst. hab einfach cd youtube-upload-0.7.2 und dann sudo python setup.py install eingegeben. Jetzt geht es hoffentlicht ^^.
Das Kommando mv hätte sowieso nur den Ordnernamen umbenannt. Wenn dus doch noch willst, wie oben beschrieben erst das Packet mittels rm löschen und erst danach mittels mv umbenennen.
Vielen Dank funktioniert super. Kannst du mir sagen wie ich den Script anpassen muss, damit ich mehrere Videos hintereinander hochladen kann?
Würde ich einfach zeitlich abschätzen und dann entsprechend so bei At eintragen. Für ein sicheres Hintereinander müsste man sich etwas weiteres kleines Script in z.B. Bash schreiben.
Kann man auch die playlist angeben in den Script?
Nicht, dass ich wüsste. Das Script kann nur für einen Upload genutzt werden.
Hallo,
Der Blog ist super hat mir sehr viel weiter geholfen.
Seit einem Youtube Update kann man mehrer Youtube Kanäle mit einem account besitzen.
Wenn ich also ein video hochladen will wird der nur auf den erst erstellten kanal hochgeladen.
Wäre echt cool wenn es ein update gäbe.
Valentin
Diese Idee wurde auch schon im Issue Tracker des Projektes benannt, wobei ich nicht auf eine baldige Umsetzung der Entwickler hoffen würde, da der letzte Release im August 2013 schon etwas her ist.
Hey Jan,
erstmal danke für deinen Tollen Block! Das hochladen funktioniert bei mir super allerdings möchte ich nicht immer die ganzen Befehle für Passwort und so weiter mauell eingeben also habe ich diese Zeilen mal in ein neues Dokument geschrieben die Endung .py drangehängt und in der console mit >python Upload.py< ausgeführt. Dann kam dieser error:
File "Upload.py", line 1
echo 'python /home/pi/youtube-upload/youtube_upload/youtube_upload.py
SyntaxError: EOl while scanning string literal
Schau dir mal diese Erklärung durch und lese ggf. auch mal im scheinbar fehlerhaften Script nach, wenn du ausschließen kannst, dass es an deinen Paramenten liegt.
Hallo bei mir kommt ein authentification Fehler habe alles überprüft freue mich über jede antwort
https://www.google.com/settings/security Stelle dort bei „Zugriff von weniger sicheren Apps“ auf aktiviert. Dann sollte es funktionieren, das Problem hatte ich nämlich auch
pi@RaspberryPi ~/youtube-upload/youtube_upload $ youtube_upload.py –get-categories
-bash: youtube_upload.py: Kommando nicht gefunden.
Ich bekimme leider immer diesen Fehler. Ich würde mich über eine Antwort freuen.
Sieht so aus als wärst du schon ein Verzeichnis zu weit.
gehe zurück ins Home Verzeichnis und dann noch einmal in den youtube upload Ordner:
cd
cd youtube-upload
python youtube_upload/youtube_upload.py –get-categories
Ein python wie im Tutorial davor setzen und es sollte laufen 😉
Gibt es eine Möglichkeit den Upload im Hintergrund laufen zu lassen? Sodass ich das script mehrmals ausführen kann, da ich teilweise schonmal 10 Videos gleichzeitig uploade 🙂
Danke
Mir dem Programm screen funktioniert das prima.
Ah ok sodass ich über Putty im Endeffekt einfach nur „neue“ Terminals öffne und in jedem Terminal einmal das upload script ausführe, so wie ich das jetzt verstanden habe. Das macht die ganze Sache recht einfach wenn dies so funktioniert.
Ich habe es allerdings auch geschafft einfach auf Linux Art ein kaufmännisches UND dahinter zu schreiben sodass es auch im Hintergrund läuft. Wenn ich allerdings den Terminal (Putty) schließe also meine Remoteverbindung trenne, dann wird auch der Upload abgebrochen. Das ist das größte Problem was ich habe. Weißt du ob man was dagegen tun kann? hat vllt. was mit der progressbar zu tun
Grüße
Genau dafür kannst du
screen
nutzen.Super danke! Ich benutze es jetzt schon eine Weile und funktioniert einwandfrei.
Gruß
Hey,
ich habe noch mit dem Befehl „nohup“ hinzugefügt, damit ich Putty schließen kann und alles im Hintergrund läuft. Aber gibt es jetzt auch wieder eine Möglichkeit nachdem ich Putty geschlossen habe zu schauen wie weiter der Upload fortgeschritten ist?
Schau am besten mal in der Dokumentation des Projektes nach. Falls dies möglich sein sollte wird es dort beschrieben sein.
Hallo ich habe die Anleitung wie beschrieben befolgt um ein video hochzuladen kurze zeit später schikte mir youtube eine Benachrichtigung das mein Account dauerhaft gelöscht wurde da ich gegen die Nutzungsbedingungen verstoßen hätte mit folgender Begründung
„You agree not to use or launch any automated system, including without limitation, „robots,“ „spiders,“ or „offline readers,“ that accesses the Service in a manner that sends more request messages to the YouTube servers in a given period of time than a human can reasonably produce in the same period by using a conventional on-line web browser. Notwithstanding the foregoing, YouTube grants the operators of public search engines permission to use spiders to copy materials from the site for the sole purpose of and solely to the extent necessary for creating publicly available searchable indices of the materials, but not caches or archives of such materials. YouTube reserves the right to revoke these exceptions either generally or in specific cases. You agree not to collect or harvest any personally identifiable information, including account names, from the Service, nor to use the communication systems provided by the Service (e.g., comments, email) for any commercial solicitation purposes. You agree not to solicit, for commercial purposes, any users of the Service with respect to their Content.“
Ich kann mir ehrlich gesagt kaum vorstellen, dass es an diesem Programm liegt, da dieses meines Wissens nach die offizielle YouTube API verwendet.
Hallo grüße dich.
melde dich bei youtube und sage. Das du die offizielle youtube API mit dem raspberry pi verwendet hast und nicht gegen nutzungsbedingungen verstoßen hast.
ist mir auch passiert. Nach 3 Anläufen wurde der Account wieder entsperrt. Die haben in ihrer spysoftware irgendwas umgeändert wodurch Leute die die API verwenden gesperrt werden. (glaube ich)
Ich kann mich nicht Anmelden. Bei mir kommt immer:
[BadAuthentication] Authentication failed
Kann mir jemand helfen?
Es klingt mir so als sei die E-Mail Adresse oder das Passwort falsch.
Genau das gleiche Problem habe ich auch, jedoch sind alle meine Daten richtig.
PS.
Das Script bzw die Anwendung ist nicht mehr funktionell, habe es gerade selbst beim Ersteller des Scripts gelesen, da YouTube anscheinend was bei der API geändert hat.
Hier ist der Nachfolger.
Mach darüber mal nen Tutorial 🙂
https://github.com/tokland/youtube-upload
Danke für den Hinweis. Ich habe es auf die Liste der zu überarbeitenden Artikel gestellt!
Gerne ! 🙂
Habe es soeben mal auf meinem Pi installiert und getestet, und muss sagen dass es einwandfrei funktioniert.
Gruß Tom