Inhaltsverzeichnis

Zeitrafferfilm der Webcam-Bilder erstellen

Wer kennt sie nicht und hat nicht selbst in der Kindheit mal ein kleines Daumenkino gebastelt. Was liegt also ferner, als das gleiche nun mit den Bildern einer Wetter-Webcam zu machen!

In dem nun folgendem Beitrag sehen wir uns das nun mal ein wenig näher an. Ziel ist es am Ende ein kleines Filmchen, wie dieses hier zu erzeugen:

Konfiguration

Abholen und Abspeichern der Wetter-Webcam-Bilder

Bevor wir uns nun ein Script zum Abspeichern von einzelnen Standbildern machen, legen wir noch kurz das benötigte Zielverzeichnis an:

 $ mkdir -p /home/weather/movies

Als nächsten legen wir uns ein passendes Downloadscript an.

 # vim /usr/local/bin/cam4mov.sh
/usr/local/bin/cam4mov.sh
#!/bin/sh 
# Script zum Abholen und Abspeichern der Wetter-WebcamBilder für die Zeitrafferfilme 
# Das script wird jede Minute (user-crontab!) aufgerufen.
#
# usercrontab
# jede Minute ein Bild für den Wetterfilm abspeichern
# * 4-22 * * * /usr/local/bin/cam4mov.sh 1>/dev/null 2>&1
#
# Django : 2013-03-13 
 
 
WORKDIR="/home/weather/movies"
CAMURL_1="https://cam-west.intra.nausch.org/record/current.jpg"
CAMURL_2="https://cam-ost.intra.nausch.org/record/current.jpg"
 
PIC_CAM_1="CAM_WEST_"
PIC_CAM_2="CAM_OST_"
PIC_DAY=`date +%d`
PIC_MONTH=`date +%m`
PIC_YEAR=`date +%Y`
PIC_HOURS=`date +%H`
PIC_MINUTES=`date +%M`
PIC_SECONDS=`date +%S`
PIC_NAME_1=$PIC_CAM_1$PIC_YEAR$PIC_MONTH$PIC_DAY"_"$PIC_HOURS"-"$PIC_MINUTES"-"$PIC_SECONDS".jpg"
PIC_NAME_2=$PIC_CAM_2$PIC_YEAR$PIC_MONTH$PIC_DAY"_"$PIC_HOURS"-"$PIC_MINUTES"-"$PIC_SECONDS".jpg"
 
cd $WORKDIR
/usr/bin/wget --user="webcamuser" --password="Django-is-a-G33k!" $CAMURL_1
/usr/bin/rsync -av current.jpg $PIC_NAME_1
/bin/rm current.jpg
/usr/bin/wget --user="webcamuser" --password="Django-is-a-G33k!" $CAMURL_2
/usr/bin/rsync -av current.jpg $PIC_NAME_2
/bin/mv current.jpg $PIC_NAME_2

Ergibt pro Stunde 60 Bilder je Webcam, oder 1140 Bilder in 19 Stunden, bzw. 120 Bilder pro Stunde und 2280 Bilder am Tag (19 Stunden).

Damit nun die Minutenbilder auch gespeichert werden können, legen wir uns für unseren Wetter-User eine crontab an.

 $ crontab -e
SHELL=/bin/bash
MAILTO="weather@wetterstation-pliening.info"
 
# In der Zeit von 4:00 - 22:59 Uhr jeweils ein Bild der Webcams für den Wetterfilm abspeichern
* 4-22 * * * /usr/local/bin/cam4mov.sh 1>/dev/null 2>&1

Generieren des Zeitrafferfilms

Zum Generieren des bzw. der Zeitrafferfilme greifen wir auf das Programm ffmpeg aus dem gleichnamigen Projekt FFmpeg zurück.

Falls noch nicht geschehen, installieren wir uns das betreffende Paket mit Hilfe von YUM.

 # yum install ffmpeg -y

Nun erstellen wir uns ein kleines shell-Script

 # vim /usr/local/bin/pics2movie.sh
/usr/local/bin/pics2movie.sh
#!/bin/bash 
# Script zum Erstellen eines Zeitrafferfilms aus den minütlich abgespeicherten Webcambildern. 
# Das script wird jede Minute (user-crontab!) aufgerufen.
#
# usercrontab
# Nach dem Speichern des letzten Bildes um 23:01 Uhr werden die beiden Webcam-Zeitrafferfilme
# generiert.
#1 23 * * * /usr/local/bin/pics2movie.sh 1>/dev/null 2>&1
#
# Django : 2014-02-02
 
# Definition der Variablen
WORKDIR="/home/weather/movies/"
WORKDIR_1="/home/weather/movies/WEST"
WORKDIR_2="/home/weather/movies/OST"
ARCHIVEDIR="/mnt/nas/weather/movies/archive/"
TEMPFILE="/home/weather/movies/output.avi"
TEMPFILE2="/home/weather/movies/output2.avi"
MUSIK="/home/weather/movies/musik/Joakim_YAMA_-_Astralia_60sec.wav"
QUELLE_1="/home/weather/movies/CAM_WEST*"
QUELLE_2="/home/weather/movies/CAM_OST*"
 
MOVIE_DAY=`date +%d`
MOVIE_MONTH=`date  +%m`
MOVIE_YEAR=`date +%Y`
MOVIE_NAME_1="west"_"$MOVIE_YEAR$MOVIE_MONTH$MOVIE_DAY".avi
MOVIE_NAME_2="ost"_"$MOVIE_YEAR$MOVIE_MONTH$MOVIE_DAY".avi
 
# ersten Film erstellen:
# ins Zielverzeichnis wechseln
cd $WORKDIR_1
rm * -f
/bin/mv $QUELLE_1 $WORKDIR_1 
 
# Bilder zum anschließendem Bearbeiten mit ffmpeg umbenennen
i=0
for File in $(ls *.jpg)
        do ((i++))
        mv $File $(printf "PIC_%04d.jpg " $i)
done
 
# Film erstellen und Musik dazumischen
/usr/bin/ffmpeg -f image2 -i PIC_%04d.jpg -i $MUSIK -shortest -vcodec libx264 $ARCHIVEDIR$MOVIE_NAME_1
 
# zweiten Film erstellen:
# ins Zielverzeichnis wechseln
cd $WORKDIR_2
rm * -f
/bin/mv $QUELLE_2 $WORKDIR_2
 
# Bilder umbenennen
i=0
for File in $(ls *.jpg)
        do ((i++))
        mv $File $(printf "PIC_%04d.jpg " $i)
done
 
# Bilder zum anschließendem Bearbeiten mit ffmpeg umbenennen
/usr/bin/ffmpeg -f image2 -i PIC_%04d.jpg -i $MUSIK -shortest -vcodec libx264 $ARCHIVEDIR$MOVIE_NAME_2

Wie im Script schon vermerkt benötigen wir nun nur noch einen cronjob, der uns täglich den Filme erstellt. Diesen cronjob erstellen wir mit den Rechten des Wetterusers.

 # su - weather

Die crontab des Useres weather bearbeiten wir nun mit dem folgendem Befehl:

 $ crontab -e
SHELL=/bin/bash
MAILTO="django@nausch.org"
#Wetterdatenupdate der Webcam
*  *  *  *  *   /usr/local/bin/cam-update.sh 1>/dev/null 2>&1

# jede Minute ein Bild für den Wetterfilm abspeichern
* 4-22 * * * /usr/local/bin/cam4mov+.sh 1>/dev/null 2>&1

# um 23:01 Uhr die Filme erstellen
1 23 * * * /usr/local/bin/pics2movie.sh 1>/dev/null 2>&1

Um 23:01 Uhr wird nun unser Script jeden Tag gestartet und je nach Größe der Ausgangsbilder und der Rechenleistung des Wetter-Servers liegen dann nach einigen Minuten die betreffenden Wetterfilme im Zielverzeichnis.

 # ll /mnt/nas/weather/movies/archive/*_20140222.avi -h
-rw-r--r-- 1 nobody nobody 128M Feb 22 23:28 /mnt/nas/weather/movies/archive/ost_20140222.avi
-rw-r--r-- 1 nobody nobody 107M Feb 22 23:14 /mnt/nas/weather/movies/archive/west_20140222.avi

Film bei YouTube hochladen

Um nun nicht jeden Film einzeln bei YouTube hochladen zu müssen, wollen wir auch das automatisieren. wir greifen dazu auf das Programm youtube-upload von Arnau Sanchez zurück. Von der Downloadseite laden wir das Paket auf unseren Rechner. Zuvor wechseln wir noch inj unser Zielverzeichnis.

 # cd /usr/local/src/

Dann holen wir uns das Programmpaket.

 # wget https://code.google.com/p/youtube-upload/downloads/detail?name=youtube-upload-0.7.3.tgz

Anschließend entpacken wir das Paket.

 # tar zxvf youtube-upload-0.7.3.tgz

Dann verschieben wir das Programmpaket ins Archiv.

 # mv /usr/local/src/youtube-upload-0.7.3.tgz /usr/local/src/packages

Zum Schluss setzen wir noch einen symlink auf das Python-Script.

 # ln -s /usr/local/src/youtube-upload-0.7.3/youtube_upload/youtube_upload.py /usr/local/bin/youtube_upload

Nun brauchen wir nur noch ein kleines Shell-Script, in dem wir die einzelnen Daten, wie Titel, Beschreibung, Kathegorie u.s.w. für YouTube definieren.

 $ vim /home/weather/bin/movie2youtube
/home/weather/bin/movie2youtube
#!/bin/sh 
# Script zum Hochladen der erstellten WetterWebCam-Zeitrafferfilme in Richtung youtube
# Das script wird wird um 23:05 Uhr via user-crontab aufgerufen!
#
# usercrontab
#
# und um 23:42Uhr die Filme bei youtube hochladen
#42 23 * * * /home/weather/bin/movie2youtube
#
# Django : 2013-04-02
#          2014-02-01
 
export LANG=en_US.UTF-8
 
MOVIE_DAY=`date +%d`
MOVIE_MONTH=`date  +%m`
MOVIE_YEAR=`date +%Y`
 
PROG=/usr/local/bin/youtube-upload
EMAIL="anmeldeadresse@youtube.hell"
PASSWD="Dj4n901$4G33k!"
TITEL1="WWC-Film vom "$MOVIE_DAY"."$MOVIE_MONTH"."$MOVIE_YEAR" der Wetterstation Pliening Richtung Westen"
TITEL2="WWC-Film vom "$MOVIE_DAY"."$MOVIE_MONTH"."$MOVIE_YEAR" der Wetterstation Pliening Richtung Osten"
INFO1="WetterWebCam-Film (Zeitrafferaufnahme) der WetterWebCam mit Blickrichtung nach Westen vom "$MOVIE_DAY"."$MOVIE_MONTH"."$MOVIE_YEAR" für die Zeit von 04:00 - 23:00 Uhr der Wetterstation Pliening. Der Kurzfilm ist mit Hintergrundmusik - Titel Astralia aus dem Album VoRTeX von Joakim YAMA unterlegt. 
cc-by-nc-sa (https://www.jamendo.com/de/track/84070/astralia)
 
Standort der Wetterstation: https://www.openstreetmap.org/?mlat=48.1987&mlon=11.7980&zoom=12
aktuelle Wetterwerte und live Webcambilder gibt es hier: https://wetterstation-pliening.info"
 
INFO2="WetterWebCam-Film (Zeitrafferaufnahme) der WetterWebCam mit Blickrichtung nach Osten vom "$MOVIE_DAY"."$MOVIE_MONTH"."$MOVIE_YEAR" für die Zeit von 04:00 - 23:00 Uhr der Wetterstation Pliening. Der Kurzfilm ist mit Hintergrundmusik - Titel Astralia aus dem Album VoRTeX von Joakim YAMA unterlegt.
cc-by-nc-sa (https://www.jamendo.com/de/track/84070/astralia)
 
Standort der Wetterstation: https://www.openstreetmap.org/?mlat=48.1987&mlon=11.7980&zoom=12
aktuelle Wetterwerte und live Webcambilder gibt es hier: https://wetterstation-pliening.info"
KEYWORDS="Wetter, Wetterbeobachtung, Wetterstation, Webcam, Pliening"
KEYWORDS_1=$KEYWORDS
MOVIE1="/mnt/nas/weather/movies/archive/west"_"$MOVIE_YEAR$MOVIE_MONTH$MOVIE_DAY".avi
MOVIE2="/mnt/nas/weather/movies/archive/ost"_"$MOVIE_YEAR$MOVIE_MONTH$MOVIE_DAY".avi
 
# Upload als privates Movie mit der option --unlisted
$PROG --email="$EMAIL" --password="$PASSWD" --title="$TITEL1" --description="$INFO1" --category=Nonprofit --keywords="$KEYWORDS" "$MOVIE1" | grep www.youtube.com
 
$PROG --email="$EMAIL" --password="$PASSWD" --title="$TITEL2" --description="$INFO2" --category=Nonprofit --keywords="$KEYWORDS" "$MOVIE2" | grep www.youtube.com

Wie im Script schon vermerkt benötigen wir nun nur noch einen cronjob, der uns täglich die Filme bei YouTube hochlädt. Diesen cronjob erstellen wir mit den Rechten des Wetterusers.

 # su - weather

Die crontab des Useres weather bearbeiten wir nun mit dem folgendem Befehl:

 $ crontab -e
SHELL=/bin/bash
MAILTO="django@nausch.org"
#Wetterdatenupdate der Webcam
*  *  *  *  *   /usr/local/bin/cam-update.sh 1>/dev/null 2>&1

# jede Minute ein Bild für den Wetterfilm abspeichern
* 4-22 * * * /usr/local/bin/cam4mov+.sh 1>/dev/null 2>&1

# um 23:01 Uhr die Filme erstellen
1 23 * * * /usr/local/bin/pics2movie.sh 1>/dev/null 2>&1

# und um 23:42 Uhr die Filme bei youtube hochladen
42 23 * * * /home/weather/bin/movie2youtube

Um 23:42 Uhr wird nun unser Script jeden Tag gestartet und die Filme bei YouTube eingestellt.

Links