Zurück zum Technik@tlas

www.n-21.de

Beitrag im Rahmen des n21-Wettbewerbs "Technik@tlas
Niedersachsen" (Beitragsrunde 2010/2011) mit dem Thema:

"Baustellen-Webcam"


Schule: Corvinianum Northeim

Projektbeschreibung: Der Beitrag des Corvinianums in Northeim besteht im wesentlichen aus zwei Skripten, die im Rahmen der Schulnetz-AG entstanden sind und noch immer weiter verbessert werden. Mit diesem Skript werden Bilder einer Webcam auf unsere aktuelle Baustelle aufbereitet und auf der Homepage der Schule öffentlich gemacht - alles mit Hilfe von freier Software und viel Phantasie und Geschick.

Das Ergebnis des hier dokumentierten Projektes findet man auf unserer Homepage.

  • Vorstellung/Hintergrund
    • Im Mai 2011 begannen die Bauarbeiten für unser neues Multifunktionalgebäude am Corvinianum in Northeim.
    • Um möglichst viele Schüler, Lehrer, Eltern und sonstige Interessierte am Bau teilhaben zu lassen, beschlossen wir in der Schulnetz-AG, die auch für die Betreuung der Homepage zuständig ist, eine Webcam einzurichten.
    • Zunächst mussten die rechtlichen Rahmenbedingungen für eine Webcam auf dem Gelände geklärt werden, wobei Schulleitung, Schul- und Bauträger die Idee sofort unterstützten.
    • Im Anschluss suchten wir anhand der Pläne nach einem geeigneten Standort und wurden am Fenster der Politiksammlung des Gebäudes fündig, da hier seit kurzem einer der wenigen Netzwerkanschlüsse lag und ein guter Blick auf die Baustelle gewährleistet sein würde. Einige Schüler bastelten eine Webcam-Halterung aus Umzugsresten und brachten eine einfache Webcam aus Privatbeständen des Lehrers an.
    • Als Hardware diente der unter Windows laufende Lizenzserver (Lenovo IdeaCentre Q150) der Schule, der hier ohnehin 24 Stunden am Tag lief und sich bei Stromausfällen ggf. neu startete.
    • Die Bilder der Webcam werden durch das Java-Programm YawCam geschossen, welches einem der Schüler bekannt war. Da es nichts anderes als einen Windows-Dienst darstellt, der als alle 5 Minuten ein Webcam-Bild auf der Festplatte speichert, hätte es hierzu viele Alternativen gegeben. Aber YawCam verrichtet seinen Dienst seither ohne Probleme.
    • Nach dem diese Voraussetzungen gegeben waren, machten wir uns im Rahmen der AG daran, die Umsetzung für unsere Homepage vorzunehmen.
  • Schritt 1 - Das Live-Bild
    • Die Aufgabe war zunächst, die zahllosen Bilder aufzubereiten, auf dem Schulserver zwischenzuspeichern (auch, falls mal etwas schief gehen sollte), und danach in unsere Webseite einzubinden.
    • Eine Gruppe rechnete den abzusehenden Speicherbedarf aus (wir einigten uns auch eine mittlere Auflösung und ein Bild alle 5 Minuten, dadurch ca. 100MB/Tag), eine weitere Gruppe befasste sich mit den Möglichkeiten unseres Homepage-CMS Contao, ein Webcam-Bild einzubinden. Dank der vielen Plugins für dieses CMS wurden wir sehr schnell fündig.
    • Webcam-Bild
    • Die etwas erfahreneren Schüler befassten sich zusammen mit H. Schröder mit dem eigentlichen Skript, welches das Bild bearbeiten und hochladen sollte.
    • Nebenher waren alle angehalten, ihr Vorgehen, insbesondere das entstehende Skript, zu dokumentieren - auf Deutsch und Englisch.
    • Nach zahlreichen Versionen, Tests, viel Recherche, vorher ungeahnten Problemen (Übergabe von Parametern) und z.T. "genialen" Ideen (Verkürzung des Codes), blieben folgende Zeilen übrig:
      1. #/bin/bash
      2. # tiny two-liner, that takes the last image of a directory (for us its $rfolder), adds the date to the picture (so keeps the original image) and puts it to a word readable place, where our official homepage can get it from
      3. RFOLDER='/media/corvicam'
      4. # so what we do here is listing the directory sorted by time, taking the newest file and resizing it
      5. ls /media/corvicam/ -t | head -1 | xargs -i convert /media/corvicam/{} -resize 50% /tmp/webcam.jpg
      6. # now we write the date inside the picture using the free "convert". doing this twice to have more beautiful text
      7. date | xargs -i convert /tmp/webcam.jpg -gravity south -stroke '#000C' -strokewidth 2 -annotate 0 '{}' -stroke none -fill white -annotate 0 '{}' /var/www/corvicam.jpg
  • Schritt 2 - Das Video
    • Ermuntert durch die schnelle Umsetzung des Webcam-Bildes und in Anlehnung an "Zeitraffer-Videos" aus Internet und Fernsehen entschieden wir uns, aus den Bildern irgendwie einen Film zusammenzustellen.
    • Zunächst beschäftigten wir uns etwas mit der Theorie (Codecs, Containern, Komprimierung) und sammelten verschiedene Programme, die für das Projekt hilfreich sein könnten. Insbesondere mit ffmpeg machten wir uns vertraut.
    • Ein letzer Schritt war die Idee, das Video mit Musik zu unterlegen. Da wir uns viel mit Freier Software beschäftigt hatten, lag die Verwendung von frei verfügbarer Musik nahe. Nachdem wir einige Musik gehört hatten, entschieden wir uns für das Musikstück Voyage.
    • Fehlte noch ein Homepage-Modul, welches den Film (wir wollten FLV verwenden) abspielen konnte. Auch hier ließ uns Contao mit der Flowplayer-Erweiterung nicht allein.
    • An dieser Stelle als Beispiel mal ein Tag aus dem Leben unserer Webcam:
    • Etwas unterschätzt hatten wir die Herausforderungen, die letztlich mit dem Skript auf uns zukamen. Mal waren die Videos zu groß, mal konnte man nichts erkennen. Das ausführen dauerte manchmal Stunden, der Speicherplatz wurde knapp... Aber als wir zum ersten Mal nach vielen Tests und Verbesserungen den ersten Bildern als Film zuschauen konnten, merkten wir, dass es die Mühe wert war. Hier also unser Skript:.
      1. #/bin/bash
      2. # this tiny script that will encode a (remote) folder of pictures to a flv-movie with some music added
      3. # pictures are synced with WFOLDER/cc (also as backup), music is available as a wav-file in WFOLDER/music.wav
      4. # prerequisites (in order of apearance):
      5. # rsync (synchronization), imagemagick (converting images), ffmpeg (creating/muxing the movie), sox (audio manipulation), qwavfade (a part of quelcom, fading the music)
      6. # this script was created by the schulnetz-ag at corvinianum northeim using many hints and faqs
      7. # written by the worldwide linux community - so we are mostly composers, not creators
      8. # use this script freely (as long as you support the of free software)
      9. # we cant hold it: as colorful windows ever may be, it will never unlock the freedom of your imagination as efficiently as linux in general and bash scripting specifically does ;-)
      10. # ok... prepare for work (careful - these are OUR paths, choose your own here)
      11. WFOLDER='/home/webcam'
      12. RFOLDER='/media/corvicam'
      13. mkdir $WFOLDER/ccrenamed $WFOLDER/ccsmall
      14. # sync remote image folders with local backup (always backup, always always backup)
      15. rsync $RFOLDER/ $WFOLDER/cc/ -a
      16. # resize the images. extract the date from filename and write it into the picture. careful! our files have THIS name-structure: corvicam_YYYY-MM-DD_HH.MM.SS.jpg - so you may need to change the string-copy-operations
      17. cd $WFOLDER/cc
      18. for i in *jpg; do sn="${i:17:2}.${i:14:2}.${i:9:4}"; convert -size 320x240 -quality 85 -gravity south -stroke '#000C' -strokewidth 2 -annotate 0 "$sn" -stroke none -fill white -annotate 0 "$sn" "$i" $WFOLDER/ccsmall/"$i"; done
      19. # hard to find out: we rename the images as ffmpeg needs them (one genius idea - create hardlinks instead of copies)
      20. cd $WFOLDER/ccsmall
      21. x=1; for i in *jpg; do counter=$(printf %05d $x); ln "$i" $WFOLDER/ccrenamed/img"$counter".jpg; x=$(($x+1)); done
      22. # now encode jpegs to mpg
      23. ffmpeg -f image2 -sameq -y -i $WFOLDER/ccrenamed/img%05d.jpg $WFOLDER/tmp.mpg
      24. # the score! trim music, fade end, create mp3 (mind: sox on lenny without mp3 support; for simple fading we use qwavfade)
      25. ffmpeg -i $WFOLDER/tmp.mpg 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,// | xargs -i sox $WFOLDER/music.wav $WFOLDER/tmp.wav trim 0 {}
      26. qwavfade -d 8s -o $WFOLDER/tmp.wav
      27. ffmpeg -i $WFOLDER/tmp.wav -ar 22050 -ac 1 -ab 64k $WFOLDER/tmp.mp3
      28. # mux mpg and mp3 to the final flv movie (some tweaks for hq)
      29. ffmpeg -i $WFOLDER/tmp.mpg -i $WFOLDER/tmp.mp3 -ar 22050 -ab 96k -r 25 -y -f flv -qscale 6 $WFOLDER/webcam.flv
      30. # copy to webserver
      31. scp $WFOLDER/webcam.flv corvinianum.de:/var/www/httpdocs/corvi_dateien/medien/video
      32. # we are neat people - cleaning!
      33. rm -f $WFOLDER/tmp.mpg $WFOLDER/tmp.wav $WFOLDER/tmp.mp3 $WFOLDER/webcam.flv
      34. rm -rf $WFOLDER/ccrenamed
      35. rm -rf $WFOLDER/ccsmall
  • Richtfest - Geht noch mehr?
    • Zum Richtfest wurden wir gefragt, ob man das Video nicht auch außerhalb der Homepage vorführen könne.
    • Dafür traf sich kurzfristig eine kleine Gruppen von Schülern mit dem Lehrer, um das Skript auf hohe Auflösung umzustellen. Dafür waren nur kleine Änderungen (und eine Nacht Rechenzeit) notwendig. Aus:
      1. ffmpeg -i $WFOLDER/tmp.mpg -i $WFOLDER/tmp.mp3 -ar 22050 -ab 96k -r 25 -y -f flv -qscale 6 $WFOLDER/webcam.flv
    • wurde nun:
      1. ffmpeg -i $WFOLDER/tmp.mpg -i $WFOLDER/tmp.mp3 -ar 22050 -ab 96k -r 25 -y $WFOLDER/film_hd.mpg
    • Und so fand am 25.8.2011 die "Uraufführung" unseres Werkes in "HD" statt.
  • (Wie) geht es weiter?
    • Ein neues Schuljahr, eine neue AG - einige alte, einige neue Gesichter. Und Unmengen an Bildmaterial auf unserem Server.
    • Collagen, schnellere Zeitraffer, Bildmontagen, etc. - was immer aus unserem Projekt noch entstehen mag, gelohnt hat es sich jetzt schon.
    • Neben dem Film haben wir viel über freie Software, das Programmieren von Skripten, Bild-, Ton- und Videobearbeitung gesprochen, vieles ausprobiert und auch neue Ideen entwickelt. Was vor allem bleibt ist die Erkenntnis, dass man mit einfachen und vor allem kostenlosen Mitteln etwas erreichen kann, was man selbst mit teurer Software nicht ohne weiteres hinbekommt.
    • Wir hoffen, dass sich die ein oder andere AG bzw. andere Schülerinnen und Schüler ermuntert fühlen, selbst ähnliche Projekte durchzuführen. Unser Skript stellen wir dafür gerne zur Verfügung. Auch über Rückfragen und Verbesserungswünsche, insbesondere unserer Skripte, freuen wir uns.

7.9.2011, Schulnetz-AG, Corvinianum Northeim

Hier geht es zurück zum Technikatlas.