109 lines
2.9 KiB
Bash
Executable File
109 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Bachir Soussi Chiadmi 06/2016
|
|
# https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images
|
|
# needs ffmep and exiftool
|
|
|
|
function convert {
|
|
|
|
|
|
now=$(date +"%Y-%m-%d--%T")
|
|
echo "Timelaps conversion | $now"
|
|
|
|
pf=12
|
|
vf=24
|
|
|
|
mkdir tmp_videos
|
|
mkdir tmp_metadata
|
|
mkdir tmp_pictures
|
|
|
|
rm -f tmp_pictures/*
|
|
rm -f tmp_videos/*
|
|
rm -f tmp_metadata/*
|
|
|
|
x=1
|
|
for i in public_html/pictures/*.jpg; do
|
|
counter=$(printf %06d $x)
|
|
ln "$i" tmp_pictures/img"$counter".jpg
|
|
x=$(($x+1))
|
|
done
|
|
|
|
|
|
echo "pictframerate:$pf, videoframerate=$vf"
|
|
|
|
echo 'Video conversion'
|
|
echo "creating raw timelaps"
|
|
ffmpeg -y \
|
|
-framerate $pf \
|
|
-i tmp_pictures/img%06d.jpg \
|
|
-r $vf -pix_fmt yuv420p -vcodec libx264 \
|
|
tmp_videos/timelaps-raw.mp4
|
|
|
|
echo "optimizing responsive videos"
|
|
ffmpeg -y -i tmp_videos/timelaps-raw.mp4 -vf "scale=1920:-1, crop=in_w:1080" tmp_videos/timelaps-1080p.mp4
|
|
ffmpeg -y -i tmp_videos/timelaps-raw.mp4 -vf "scale=1280:-1, crop=in_w:720" tmp_videos/timelaps-720p.mp4
|
|
ffmpeg -y -i tmp_videos/timelaps-raw.mp4 -vf "scale=720:-1, crop=in_w:480" tmp_videos/timelaps-480p.mp4
|
|
ffmpeg -y -i tmp_videos/timelaps-raw.mp4 -vf "scale=640:-1, crop=in_w:340" tmp_videos/timelaps-360p.mp4
|
|
ffmpeg -y -i tmp_videos/timelaps-raw.mp4 -vf "scale=360:-1, crop=in_w:240" tmp_videos/timelaps-240p.mp4
|
|
|
|
echo "updating production videos"
|
|
mv -f tmp_videos/* public_html/videos/
|
|
|
|
echo "metadata export"
|
|
l=0
|
|
for pict in public_html/pictures/*.jpg; do
|
|
l=$((l+1))
|
|
done
|
|
f=0
|
|
echo -e '{' > tmp_metadata/frames.json
|
|
echo -e '\t"frames":[' >> tmp_metadata/frames.json
|
|
|
|
for pict in public_html/pictures/*.jpg; do
|
|
# SRC
|
|
src="${pict/public_html\/pictures\//}"
|
|
# TIME
|
|
datetime="${pict/public_html\/pictures\/hehe-/}"
|
|
datetime="${datetime/.jpg/}"
|
|
Y="${datetime:0:4}"
|
|
m="${datetime:4:2}"
|
|
d="${datetime:6:2}"
|
|
h="${datetime:9:2}"
|
|
min="${datetime:11:2}"
|
|
sec="${datetime:13:2}"
|
|
datetime="$Y-$m-$d $h:$min:$sec"
|
|
datetime="${datetime/ /T}"
|
|
# echo "datetime : $datetime"
|
|
# datetime= $($datetime | awk /([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})([0-9]{2})/ {print $1-$2-$3T$4:$5:$6})
|
|
# datetime=`exiftool 2>/dev/null -S --DateTimeOriginal -p '$DateTimeOriginal' -d %Y-%m-%dT%T "$pict"`
|
|
# GPS
|
|
gps=`exiftool 2>/dev/null -n -p '$GPSLatitude,$GPSLongitude' $pict`
|
|
|
|
# FRAME
|
|
currenttime=$(((1/$pf)*$f))
|
|
|
|
frame="\t\t{\"src\":\"$src\", \"datetime\":\"$datetime\", \"gps\":\"$gps\", \"currenttime\":\"$currenttime\", \"id\":\"$f\"}"
|
|
if [[ $f != $(($l-1)) ]]; then
|
|
frame="$frame,"
|
|
fi
|
|
|
|
echo -e "$frame" >> tmp_metadata/frames.json
|
|
|
|
f=$(($f+1))
|
|
done
|
|
|
|
echo -e '\t]' >> tmp_metadata/frames.json
|
|
echo -e '}' >> tmp_metadata/frames.json
|
|
|
|
mv -f tmp_metadata/* public_html/metadata/
|
|
|
|
|
|
}
|
|
|
|
|
|
while true; do
|
|
day=$(date +"%Y-%m-%d")
|
|
logfile="logs/convert-$day.log"
|
|
touch $logfile
|
|
convert | tee -a $logfile
|
|
sleep 10m
|
|
done
|