Raspberry Pi: YouTube Video Upload Server

02 Jul
2. Juli 2013

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=webmaster@jankarres.de --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=webmaster@jankarres.de --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.

Dir hat der Artikel gefallen?
Teile ihn mit deinen Freunden!
55 Antworten
  1. charudatt says:

    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

    Antworten
  2. sebastianseifertian says:

    Kann man nach einem Gestarteten Upload die Terminal sitzung verlassen? und kann ich mich später wieder einloggen und den fortschritt anschauen?

    Antworten
    • Jan Karres says:

      Würde ich mittels screen lösen.

      Antworten
      • Jonas says:

        Wie geht das?

        Antworten
        • lilTV media says:

          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.

          Antworten
  3. Victor says:

    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.

    Antworten
  4. FizbanLP says:

    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

    Antworten
    • Jan Karres says:

      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.

      Antworten
  5. Tom says:

    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^^.

    Antworten
    • Jan Karres says:

      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.

      Antworten
      • Tom says:

        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

        Antworten
  6. Cqwer says:

    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

    Antworten
  7. Chris says:

    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!

    Antworten
  8. Niggolai (@TheNiggolai) says:

    Sehr hilfreicher Beitrag, genau so etwas hatte ich gesucht! Danke!

    Antworten
  9. Jonas says:

    wenn ich mv youtube-upload-* youtube-upload eingebe, kommt mv: target `youtube-upload‘ is not a directory. was hab ich Falsch gemacht?

    Antworten
    • Jan Karres says:

      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

      Antworten
      • Jonas says:

        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

        Antworten
        • Jonas says:

          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 ^^.

          Antworten
          • Jan Karres says:

            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.

  10. Paul says:

    Vielen Dank funktioniert super. Kannst du mir sagen wie ich den Script anpassen muss, damit ich mehrere Videos hintereinander hochladen kann?

    Antworten
    • Jan Karres says:

      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.

      Antworten
  11. Blooddragon says:

    Kann man auch die playlist angeben in den Script?

    Antworten
  12. Valentin says:

    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

    Antworten
  13. Stefan says:

    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

    Antworten
  14. germanbeast says:

    Hallo bei mir kommt ein authentification Fehler habe alles überprüft freue mich über jede antwort

    Antworten
  15. JalicX says:

    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.

    Antworten
    • Christopher M. says:

      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

      Antworten
    • Jan Karres says:

      Ein python wie im Tutorial davor setzen und es sollte laufen 😉

      Antworten
  16. Christopher M. says:

    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

    Antworten
    • Jan Karres says:

      Mir dem Programm screen funktioniert das prima.

      Antworten
      • Christopher M. says:

        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

        Antworten
  17. vorhangk says:

    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?

    Antworten
  18. Leon says:

    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.“

    Antworten
    • Jan Karres says:

      Ich kann mir ehrlich gesagt kaum vorstellen, dass es an diesem Programm liegt, da dieses meines Wissens nach die offizielle YouTube API verwendet.

      Antworten
      • Christopher Morgenstern says:

        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)

        Antworten
  19. Fabian says:

    Ich kann mich nicht Anmelden. Bei mir kommt immer:

    [BadAuthentication] Authentication failed

    Kann mir jemand helfen?

    Antworten
  20. tompage16Tompage says:

    Hier ist der Nachfolger.
    Mach darüber mal nen Tutorial 🙂
    https://github.com/tokland/youtube-upload

    Antworten

Antworten

Kommentar verfassen

JanKarres.de © 2007-2018