分享一个树莓派延时摄影和视频制作代码
心血来潮,想着做一个阳台花草生长的延时视频。阳台上正好有个树莓派,只需要一个摄像头即可。说做就做,500万像素的树莓派摄像头,包邮只需要30元。基本够够用了。接好线,固定好摄像头位置。
效果如下图:
树莓派安装和配置摄CSI接口的摄像头不复杂,首先安装一个raspi-config软件,执行该命令,启用摄像头模块,此时就可以使用raspistill抓取照片了。如果需要使用motion等软件做实时监控,那么还需要在modules load配置文件中增加bcm2835-v4l2此配置。一切都很顺利,捕捉到第一张照片。
编写代码定时拍摄图片。因为考虑要捕捉清晨和黄昏时的光线变化,代码做了一些特殊的逻辑。在清晨和黄昏捕捉图片的频率加高,在凌晨0~5点之间,由于阳台光线不佳,摄像头采集到的照片是全黑的,因此不需要拍摄。拍摄完照片每天保存一次到HOME-NAS上面。最终定时捕捉照片的代码如下:
#!/bin/bash mkdir /root/pics >/dev/null 2>&1 mkdir /var/piccap >/dev/null 2>&1 touch /var/piccap/lastbtime sleeptime=60 busyinterval=3 normalinterval=30 sleepcount=0 capPic () { timestr=$(date +%Y%m%d%H%M%S) raspistill -t 5000 -o /root/pics/image_${timestr}.jpg -q 100 -n -rot 180 } checkAndUpload () { lastbtime=$(cat /var/piccap/lastbtime) nowtime=$(date +%Y%m%d) if [ -z "${lastbtime}" -o "${lastbtime}" != "${nowtime}" ] then umount /mnt/homenas mount -t cifs -o username=User,password=Password //22.22.22.3/share /mnt/homenas/ if [ $? -eq 0 ] then for i in $(ls /root/pics/image_*.jpg) do mv $i /mnt/homenas/piccap done umount /mnt/homenas echo ${nowtime} > /var/piccap/lastbtime fi fi } while : do checkAndUpload hour=$(date +%H) min=$(date +%M) if [ ${hour} -eq 5 -a ${min} -gt 30 ] || [ ${hour} -ge 17 -a ${hour} -le 19 -o ${hour} -ge 6 -a ${hour} -le 8 ] then # 上午5点半~9点,晚上5点至8点,每隔3分钟拍摄一张。 [ ${sleepcount} -eq 0 ] && capPic [ ${sleepcount} -ge ${busyinterval} ] && capPic && sleepcount=0 elif [ ${hour} -ge 0 -a ${hour} -le 4 ] then # 凌晨0点到4点不抓取照片。 sleepcount=0 else # 其他时间段每隔30分钟抓取一张。 [ ${sleepcount} -eq 0 ] && capPic [ ${sleepcount} -ge ${normalinterval} ] && capPic && sleepcount=0 fi sleepcount=$(expr ${sleepcount} + 1) sleep ${sleeptime} done
处理照片并生成视频的命令行为: