timelapse設定
timelapseシナリオ
raspberry piにはモジュールカメラでtimelapse機能が標準搭載されているが
低スペックかつ多重処理のIOT-House_zero_w単体でtimelapseを完結するには厳しい
なので2台のraspberry pi zeroでサーバーとクライアント分散処理をします
サーバー側(https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/usr/local/bin/pepotimelapse)
- raspistillコマンドのawbとannotationオプションをつけ60秒ごとにimage000.jpg,image001.jpg … image059.jpgファイル作成(スペック制限で画像サイズは640x480)
1
2
3
4
5
6
7
8
9
10
11while true;do
NOWSEC=`date +"%S:"`
NOWMIN=`date +"%M:"`
if [ $NOWSEC = "00:" ];then
k=`printf "image%03d.jpg" $j`
raspistill -awb flash -a 1036 -ae +25+25 -w 640 -h 480 -o $IMAGE_DIR/$k
j=$(($j + 1))
if [ $j -gt 59 -o $NOWMIN = "59:" ];then
.
fi
done - 1時間ごとにこれをtimelapse.tar.gzで固め繰り返す
1
2
3
4mkdir $IMAGE_DIR_TMP
mv $IMAGE_DIR/* $IMAGE_DIR_TMP/
(cd $WORKDIR;tar cfz ${IMAGE_TIMELAPSE}.tar.gz $IMAGE_TIMELAPSE)
- raspistillコマンドのawbとannotationオプションをつけ60秒ごとにimage000.jpg,image001.jpg … image059.jpgファイル作成(スペック制限で画像サイズは640x480)
クライアント側(https://github.com/kujiranodanna/IOT-House/blob/master/raspberrypi/usr/local/bin/pepoffmpegtimelapse)
- 1時間毎にtimelapse.tar.gzをサーバー側からゲット解凍後、日付時間毎の2021-08-17_00.mp4 … 2021-08-17_59.mp4の動画ファイル作成、htmlで閲覧できるようにしておく
- 1時間毎のtimelapse(セキュリティ上大部分をトリミングしてます)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17while true;do
NOWMIN=`date +"%M:"`
if [ $NOWMIN = "05:" ];then
NOWHOUR=`date +"%H:"`
NOWDATE=`date +"%Y-%m-%d_%H"`
HOURAGO=`date -d "1 hour ago" +"%Y-%m-%d_%H"`
DAYAGO=`date -d "1 day ago" +"%Y-%m-%d"`
WEEKAGO=`date -d "1 week ago" +"%Y-%m-%d"`
msleep 60000
else
msleep 10000
continue
fi
.
curl -s --connect-timeout $RETRYTIME --retry $RETRY --user-agent ${USERAGENT} --tlsv1 -k -u ${USER}:${PASSWORD} https://$RMHOST:$PORT/$REMOTEFILE >$LOCALFILE
.
ffmpeg -f image2 -i $IMAGE_DIR_TMP/image%03d.jpg -vcodec libx264 -y $IMAGE_DIR/${HOURAGO}.mp4 >/dev/null 2>&1- 00時に時間毎ファイルから1日分2021-08-17.mp4の動画ファイル作成、外部SDカードに移動htmlで閲覧できるようにリンクしておく
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16if [ $NOWHOUR = "00:" ];then
ls -l $IMAGE_DIR/*| grep $DAYAGO| awk '{printf("file %s\n",$9)}' >$FFMPEGINPUT
.
ffmpeg -safe 0 -f concat -i $FFMPEGINPUT -c copy -y $IMAGE_DIR/${DAYAGO}.mp4
.
mv $IMAGE_DIR/${DAYAGO}.mp4 $MP_DIR/
ln -s $MP_DIR/${DAYAGO}.mp4 $IMAGE_DIR/${DAYAGO}.mp4
.
WEEKAGO_IMAGE=`ls -l $IMAGE_DIR/*| grep $WEEKAGO| awk '{printf("%s ",$9)}'`
MP_WEEKAGO_IMAGE=`ls -l $MP_DIR/*| grep $WEEKAGO| awk '{printf("%s",$9)}'`
if [ `echo $WEEKAGO_IMAGE| wc -w` -eq 0 ];then
continue
else
rm $WEEKAGO_IMAGE
.
fi - 外部SDカードに溜まった1週間前の動画ファイルを消去
timelapse設定
- サーバー側起動(/service/にサーバー・スクリプトへリンクを張りdaemotoolsで起動する)
1
2
3
4
5
6
7
8
9ssh pi@iotXXX
.
$ sudo su
# cd /service/
# mkdir timelapse
# cd timelapse
# ln -s /usr/local/bin/pepotimelapse run
# svstat /www/pepolinux/timelapse/
/www/pepolinux/timelapse/: up (pid XX) X seconds - クライアント側(USBへ動画保存用SDカードセット後クライアント・スクリプトを起動)
1
2
3
4
5
6
7
8ssh pi@iotXXX
.
$ sudo su
# cd /service/
# mkdir ffmpegtimelapse
# /usr/local/bin/pepoffmpegtimelapse run
# svstat /www/pepolinux/ffmpegtimelapse/
/www/pepolinux/ffmpegtimelapse/: up (pid XX) X seconds- 1日分のtimelapse(セキュリティ上大部分をトリミングしてます)
- 1日分のtimelapse(セキュリティ上大部分をトリミングしてます)
- サーバー側起動(/service/にサーバー・スクリプトへリンクを張りdaemotoolsで起動する)