oui pour les vidéos time lapse j'utilise la caméra logitech c-920. C'est la seule webcam que j'ai qui fonctionne très bien.
Les autres webcams ont de la difficulté avec le bug "USB" du RPi.
** update la nouvelle compilation du kernel, Linux raspberrypi 3.6.11+ #399 PREEMPT , règle le problème de mes autres caméras (ms vx-7000 et logitech c-260) . En mjpeg du moins.
L'OS est le défaut debian (Raspbian).
J'utilise mjpeg_streamer pour le stream vidéo. Sur crontab j'ai un script à chaque minute pour capturer une image avec "wget" et un script à minuit pour convertir les images en vidéo avec "avconv" (ce qui va remplacer ffmpeg).
crontab -e
* * * * * /usr/local/bin/Snapshot.py
0 0 * * * /usr/bin/python /usr/local/bin/DailyMovie.py
Le script streamer1080p.sh
killall mjpg_streamer
/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so -n -f 5 -r 1920x1080" -o "/usr/local/lib/output_http.so -p
10088 -w /usr/local/www" &
Le script Snapshot.py
#!/usr/bin/python
import time
import os
import sys
import re
import subprocess
import datetime
now = datetime.datetime.now()
# capture image
SnapImage = "/var/www/chart/data/image.jpg"
subprocess.call(["/usr/bin/wget","-O",SnapImage,"http://127.0.0.1:10088/?action=snapshot"])
#ajout du log de temperature
f = open('/tmp/stamp.txt')
first = f.readline()
f.close()
subprocess.call(["/usr/bin/convert","-background",'rgba(255,255,255,0.5)',"-gravity","center","-fill",'rgba(0,0,0,0.5)',"-size","1920",'label:'+first,SnapImage,"+swap","-gravity","Northwest","-composite",SnapImage])
# Nommer le fichier avec la date et l'heure
StampImage = "PondImg_" + now.strftime("%Y_%m_%d_%H_%M_%S") + (".jpg")
# transferer l'image to mycloud WD disk
subprocess.call(["/usr/local/bin/FtpImage.sh",SnapImage,StampImage,"RpiUsername","password"])
et le script pour faire le vidéo
#!/usr/bin/python
import datetime
import os
import sys
import subprocess
import glob
# ===================
# Création d'un vidéo journalier image par image
# de la caméra sur l'étang
# Chaque image est entreposée sur le disque réseau WD
# le disque réseau est monté en mode cifs
# utilisation de ffmpeg (avconv) pour convertir les images
# Creation d'un répertoire
def mkdirp(directory):
if not os.path.isdir(directory):
os.makedirs(directory)
# C'était quand hier
yesterday = datetime.datetime.now() - datetime.timedelta(1)
# since I transfer the jpg to an other computer/or drive
# let's mount the device if it is not mounted
# I'm using a cloud WD network drive so we will mount it
subprocess.call(["/bin/mount","-t","cifs","-o","user=PiUser,pass=password","//10.11.12.4/Daniel/PiData","/mnt/wd"])
#Créons le répertoire pour les liens images en premier
#les liens images vont convertir le nom des fichiers en nom numérique croissant.
movieLink= "/var/www/chart/data/MovieLink"
mkdirp(movieLink)
#Effaçons tout lien résiduel.
files = glob.glob(movieLink + "/*")
for f in files:
os.remove(f)
#Création du masque de recherche
mask= "/mnt/wd/Images/PondImg_"+ yesterday.strftime("%Y_%m_%d_") + "*.jpg"
counter=1
# python link doesn't work! crossdevice not permitted
# we will use /bin/ln -s
# Mettons en ordre les images
files = sorted(glob.glob(mask))
for file in files:
destlink = movieLink + ("/img%04d.jpg" % (counter))
print "try to link: " + file + "with " + destlink
subprocess.call(["/bin/ln","-s",file,destlink])
counter += 1
#et maintenant créons le vidéo
mkdirp("/mnt/wd/DailyMovie")
MovieFile = "/mnt/wd/DailyMovie/Pond_" + yesterday.strftime("%Y_%m_%d") + ".mp4"
# subprocess.call(["/usr/bin/ffmpeg","-f","image2","-b","12000k","-r","10","-i","/var/www/chart/data/MovieLink/img%03d.jpg","-r","10", MovieFile])
subprocess.call(["/usr/bin/avconv","-f","image2","-r","30","-i","/var/www/chart/data/MovieLink/img%04d.jpg","-b","12000k","-r","30","-c:v","mpeg4","-s","1920x1080",MovieFile])
#vidéo fait! maintenant effaçons les liens
filelink = glob.glob(movieLink + "/*")
for f in filelink:
os.remove(f)
# Effaçons les images du disque réseau
for file in files:
os.remove(file);
#Démontons le disque réseau
subprocess.call(["/bin/umount","/mnt/wd"])
J'utilise image-magick pour incruster l'information des capteurs de température. Les 4 dernières secondes du vidéo de la tempête.
Daniel