#!/bin/bash
# free@apgw.de 2020 copyleft
# A script to create and merge videos
# from pics taken with timelapse.sh
#
# ... using ffmpeg on raspberry pi.
# ... intended as daily cronjob.

### working
# 55M pi@hubble:~/Video/fenstergarten-20200402-002857 $ ffmpeg -i 20200403_rasp_tmlps.mjpg -c:v libx264 -preset ultrafast -crf 0 20200403_rasp_tmlps.mp4
# 17M pi@hubble:~/Video/fenstergarten-20200402-002857 $ ffmpeg -i 20200403_rasp_tmlps.mjpg -c:v libx264 -preset ultrafast -crf 18 20200403_rasp_tmlps_visloss.mp4
# 4,6M pi@hubble:~/Video/fenstergarten-20200402-002857 $ ffmpeg -i 20200403_rasp_tmlps.mjpg -c:v libx264 -preset ultrafast -crf 30 20200403_rasp_tmlps_smaller.mp4

# Give remote folder for web-upload as Option
# as example in /etc/cron.d/makevideo like
# 0 0 * * * pi /home/pi/makevideo.sh "sshuser@webserver.de:/www/timelapse/"
if [[ "$1" != "" ]]; then
	webfolder="$1"
else
	echo "Got no webfolder as Option 1. Exit."
	exit 1
fi

# for debugging enable set -x
#set -x

# define framerate:
# 25 is like "normal film"
# 12 maybe more appropriate, because timelapse is more animation-like
rate=12

# actual date for naming files
dat="$(date +%Y%m%d-%H%M%S)"

vidpath="/home/pi/Video/"

# should exist already
# because it's where the timelapse-fotos are
picpath="/home/pi/Bilder/"

# in picpath there should only be
# folders with timelapse-pictures
lastfolder="$(ls -1tr "$picpath" | tail -n 1)"
picfoldername="${picpath}${lastfolder}"

# create video-folder for last take
# does not hurt if it exists
vidfoldername="${vidpath}${lastfolder}"
mkdir -p "$vidfoldername"
log="${vidfoldername}/${dat}.log"
date > $log

# get first and last dates
#/home/pi/Bilder/fenstergarten-20200402-002857/fenstergarten-20200405-002701.jpg
firstday="$(ls -1 ${picfoldername}/*.jpg | head -n 1 | rev | cut -d/ -f1 | cut -d- -f2 | rev)"
lastday="$(ls -1 ${picfoldername}/*.jpg | tail -n 1 | rev | cut -d/ -f1 | cut -d- -f2 | rev)"

if [[ $lastday -gt $firstday ]]; then
	for day in $(seq $firstday $lastday); do

		# create video with ffmpeg
		vidname="${vidfoldername}/${day}_rasp_tmlps.mp4"
		vidnamesave="${vidfoldername}/${saveday}_rasp_tmlps.mp4"
        vidnamelast="${vidfoldername}/${lastday}_rasp_tmlps.mp4"
        picsaveday="$saveday"
		if [[ ! -f "$vidname" ]]; then
			ffmpeg -r $rate -pattern_type glob -i "${picfoldername}/*-${day}-*.jpg" -c:v libx264 -preset ultrafast -crf 30 "$vidname" && echo "created $vidname" >> $log
		else
			saveday=$day
		fi
	done
	# try to catch and redo the halve-ready Videos of day before
	ffmpeg -y -r $rate -pattern_type glob -i "${picfoldername}/*-${picsaveday}-*.jpg" -c:v libx264 -preset ultrafast -crf 30 "$vidnamesave" && echo "recreated $vidnamesave" >> $log
	# actualday is lastday - update over the day.
	ffmpeg -y -r $rate -pattern_type glob -i "${picfoldername}/*-${lastday}-*.jpg" -c:v libx264 -preset ultrafast -crf 30 "$vidnamelast" && echo "recreated $vidnamelast" >> $log
fi

# push
rsync -av ${vidfoldername}/*_rasp_tmlps.mp4 "$webfolder"
