Raspberry Pi: Automatisch Timelapse video’s uploaden naar YouTube

RedRaspberryPi_YouTube Zoals je afgelopen week kon lezen, heb ik mijn webcam aan een van mijn Raspberry Pi’s gehangen (de rode). Met behulp van de open source “motion” software staat die nu al een weekje door mijn zolderraam timelapse filmpjes te maken van de soms heel mooie luchten die we hier in Nederland hebben.
Mooi daarbij is dat Motion niet alleen de individuele foto’s maakt, maar elke nacht om middernacht er ook een MPEG-bestand van maakt. Dat scheelt dan toch net weer een bewerkingsslag als je dat niet zelf hoeft te doen. Op de Earlybird website waar ik gisteren over schreef, zag ik dat ik het echter nóg een stapje verder kon brengen. De timelapse filmpjes die daar gemaakt werden, worden namelijk elke nacht ook automatisch naar YouTube geüpload.

Dat wilde ik ook. Het bleek wat moeilijker dan eerst gedacht, dus voldoende reden voor een blogpost.

Voor het uploaden maakt Earlybird gebruik van Googlecl, een open source Python applicatie op basis van de officiële Google API voor een aantal diensten, waaronder YouTube.

Installatie van Googlecl
Je moet eerst de laatste versie van de gdata code downloaden
Login op je Raspberry Pi met Putty en ga naar de bin map:
$ cd ~/bin
Zoek op https://code.google.com/p/gdata-python-client/downloads/list op wat de meest recente versie is en kopieer de downloadlink naar de .tar.gz versie en plak die met een wget in je Putty venster:
$ wget https://gdata-python-client.googlecode.com/files/gdata-2.0.17.tar.gz
Pak hem daarna uit met:
$ tar xvf *.gz
Ga naar de map die aangemaakt wordt:
$ cd gdata-2.0.17
En installeer hem:
$ sudo python setup.py install

Op de Raspberry Pi met Rasbian kun je daarna met het volgende commando googcl installeren:
$ sudo apt-get update
$ sudo apt-get install googlecl

Het vinden van het configuratiebestand voor googlecl heeft me daarna de nodige tijd gekost. Ik las ergens dat ik eerst googlecl moest runnen zonder opties, zodat het bestand aangemaakt zou worden:
$ google
en dan met ‘quit’ er weer uit. Maar in ~/.googlcl kon ik geen config bestand vinden. Dat stond in ~/config/googlecl.
Open het bestand met:
$ nano ~/.config/googlecl/config
en voeg aan de [General] sectie de regel toe:
auth_browser = lynx
Het maakt niet uit dat lynx niet aanwezig is op de Raspberry Pi, het is nodig om straks de applicatie te kunnen laten aanmelden.
Sluit nano weer af.

Zoek nu een map op met een videobestand dat je (desnoods als test) naar YouTube wilt uploaden.
De eerste keer dat je dit doet zul je de applicatie toegang moeten geven tot je YouTube account. In mijn geval voerde ik in:
$ google youtube post --category People 20130601-timelapse.mpg
De applicatie vraagt dan om je YouTube username. Je moet je gmail.com accountnaam invullen.
Daarna krijg je de melding de lynx niet gevonden is en het verzoek via je browser in te loggen en dan een hele lange url (die eronder weergegeven wordt) in te voeren.
Selecteer die URL in Putty. Je hoeft dan nergens op de drukken, zodra je de muisknop los laat staat de URL op je klembord.

Open een browser en plak de URL er in. Je krijgt dan de vraag of de applicatie toegang tot je YouTube account mag hebben.
googlecl_2
Klik op “Toegang verlenen”
In het Putty-venster kun je nu op ENTER drukken. De video wordt nu geüpload naar YouTube. Dat kan afhankelijk van de omvang van de video even duren.

Heb je weinig geduld, dan kun je het proces naar de achtergrond sturen zodat je het Putty-venster af kunt sluiten met:
CTRL+Z
bg
disown %1
Je kunt dan Putty sluiten en het uploaden gaat door.

Intermezzo: apart YouTube account voor de filmpjes
Mijn YouTube-account is nou niet echt het toonbeeld van een account waarbij erg nagedacht is over het soort filmpjes dat je er kunt vinden. Er staan schermfilmpjes, vakantiefilmpjes, fietsfilmpjes, kortom van alles. Ondanks dat heeft het account 66 abonnees. En om die nou ook nog dagelijks een automatisch toegevoegde timelapse voor te schotelen, dat leek me geen goed idee.
Daarom heb ik voor de Raspberry Pi een apart Google-account en daarmee een apart YouTube-account aangemaakt: Red Raspberry Pi (ik heb een Raspberry Pi met een rode, witte en blauwe case en daarmee zijn ook heel niet-origineel hun interne namen vastgesteld) zodat ik daar de video’s kan uploaden die door deze Raspberry Pi gemaakt worden. Dat zullen niet altijd timelapse filmpjes van wolken zijn, maar voorlopig is deze Raspberry Pi aangewezen als “timelapse Raspberry Pi”.
Ik heb het mailaccount van de Raspberry Pi zo ingesteld dat mails die er naar gestuurd worden, doorgestuurd worden naar mijn eigen mailaccount. Dat zorgt er ook voor dat de mails die je van YouTube krijgt als de upload succesvol is, ook bij mij aankomen zonder dat ik speciaal dat account in de gaten moet gaan houden.

Automatisch uploaden van Timelapse filmpjes
Als je eenmaal toestemming gegeven hebt om filmpjes te laten uploaden naar je YouTube-account (of een apart YouTube-account dat je daarvoor inricht) dan kun je het uploaden daarna automatisch laten gebeuren, dus zonder dat jij de commando’s invoert.
Hoe je dat exact doet, zal een beetje afhangen van hoe je Motion in gericht hebt of hoe de filmpjes heten die op je Raspberry Pi gemaakt worden. In mijn geval wordt elke nacht om middernacht door Motion automatisch een filmpje gemaakt op basis van de schermafbeeldingen van de afgelopen 24 uur. Dat filmpje wordt dan geplaatst in een map die de naam heeft van de dag van de filmpjes en het filmpje bevat ook de naam van die dag.
Dus bijvoorbeeld, het filmpje van 1 juni 2013 staat in mijn geval in: /home/pi/.motion/images/timelapse/20130601/ en heet 20130601-timelapse.mpg, het filmpje voor 2 juni 2013 is dan /home/pi/.motion/images/timelapse/20130602/20130602-timelapse.mpg etc.
Dat maakt het mogelijk om een Bash-script te maken dat elke nacht om 3 uur start (dan heeft de Raspberry Pi 3 uur de tijd om de timelapse samen te stellen) en dan automatisch het filmpje van de afgelopen dag upload naar YouTube. Daarvoor moet ik dan de datum van “gisteren” (een dag eerder) achterhalen en gebruiken in de aanroep.

Dat script ziet er zo uit:
#!/bin/sh

yesterday=$(date -d '1 day ago' +"%Y%m%d")
yesterday2=$(date -d '1 day ago' +"%d-%m-%Y")

google youtube post --title "Timelapse ${yesterday}" --summary "Timelapse created on ${yesterday2} using a Raspberry Pi and auto-uploaded to YouTube." --tags "raspberrypi,timelapse,ictoblog" --category People /home/pi/.motion/images/timelapse/${yesterday}/${yesterday}-timelapse.mpg

Let er op dat die onderste regel één (hele lange) regel is.
Dit bestand heb ik upload_youtube genoemd en toegevoegd aan /home/pi/.motion
Daarna heb ik via $ crontab -e een nieuwe crontab regel toegevoegd:
0 3 * * * /home/pi/.motion/upload_youtube
Hiermee wordt elke nacht om 3 uur het script opgestart. Afgelopen nacht heeft het script voor de eerste keer automatisch gedraaid, het uploaden en verwerken van de ongeveer 500MB aan video duurde iets meer dan een uur en ik had vanochtend netjes een mail van YouTube (verzonden om 4:12 uur) met de melding dat de video online stond. Zo verwacht ik er nu dus elke ochtend eentje waardoor ik ook meteen weet of het proces nog netjes loopt.

Intermezzo: automatisch opstarten van motion en uitzetten autofocus
Het eerste filmpje dat afgelopen nacht aan het Red Raspberry Pi-account werd toegevoegd bracht een probleempje aan het licht. Dat het raam ’s ochtends vol druppels zat was op zich een beetje onhandig, dat er na een paar dagen (het is een schuin dakraam) weer troepjes en opgedroogde druppels opzaten ook. Maar de camera stelde (weer) scherp op die troepjes en niet op de wolkenlucht.
256-20130602115526-00
Wat ik vergeten was, is dat als de Raspberry Pi opnieuw opgestart wordt, de camera weer automatisch op autofocus springt. Ik moest er dus niet alleen voor zorgen dat Motion automatisch opgestart wordt, maar ook dat bij het opstarten van de Raspberry Pi de autofocus van de camera uitgezet wordt en handmatig ingesteld wordt. De commando’s daarvoor had ik hier al beschreven. Ik heb ze een beetje ‘quick and dirty’ toegevoegd aan /etc/rc.local. Voor de exit 0 heb ik toegevoegd:
uvcdynctrl --device=/dev/video0 --set='Focus, Auto' 0
uvcdynctrl --device=/dev/video0 --set='Focus (absolute)' 20
cd /home/pi/.motion
motion

Hierdoor wordt bij het opstarten eerst de autofocus uitgezet en dan handmatig ingesteld. Daarna wordt motion opgestart.
75-20130603050458-00
86-20130603060920-00
Nadeel van het vastzetten van de focus is wel dat de druppels op het raam niet meer scherp te zien zijn in de video (de bovenste is met autofocus, die eronder is zonder). Maar het is natuurlijk sowieso handiger om een opstelling te kiezen waarbij die druppels niet op het raam zitten en bij toekomstige projecten met timelapse waar ik de Raspberry Pi voor ga gebruiken verwacht ik dat het toch gaat om opnames die binnen gemaakt zijn en dan is handmatige focus wél belangrijk en zijn druppels niet te verwachten.

Ik vind het trouwens bijna zonde om deze webcam voor het raam weg te halen want jemig wat hebben we in Nederland eigenlijk mooie wolkenluchten. Ik heb meestal geen hele dag de tijd om te staan kijken, maar nu zo’n 24 uur in net iets minder dan 6 minuten samengevat worden, ziet het er wel heel erg indrukwekkend uit. Zelfs zonder muziek en nabewerking (en dus eerst een paar uur donker)
Kijk maar eens naar de laatste twee minuten van deze als tegen de avond dreigende wolken binnen komen drijven:

We leven in een mooi landje! 🙂

0 0 stemmen
Bericht waardering
1 Reactie
Inline Feedback
Bekijk alle reacties
trackback

[…] RedRaspberryPi_YouTube Zoals je afgelopen week kon lezen, heb ik mijn webcam aan een van mijn Raspberry Pi's gehangen (de rode). Met behulp van de open source “motion” software staat die nu al een weekje door …  […]