Created
August 27, 2015 13:32
-
-
Save predictiple/b0564741187c5188821e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
interval=$(printf "%s" "$1"|tr -dc '[:digit:]') | |
half_interval=$(expr $interval \/ 2) | |
interval=$(expr $half_interval \* 2) | |
interval_text=$(date -u -d "@${interval}" "+%T") | |
date_text=$(pwd |rev |cut -d"/" -f1 |rev |cut -d" " -f1) | |
full_date_text=$(pwd |rev |cut -d"/" -f1 |rev) | |
mkdir ${date_text}_events | |
event_count=$(find ./${date_text}_motion/ -type f -iname "*.jpg" -print | wc -l) | |
find ./${date_text}_motion/ -type f -iname "*.jpg" -print |cut -d"/" -f3 |cut -d"." -f1 |sort | while read event | |
do | |
event_time_text=$(echo ${event} | tr "-" :) | |
event_time_num=$(date +%s -d $event_time_text) | |
half_interval_before_num=$(expr $event_time_num - $half_interval) | |
half_interval_before_text=$(date -d "@${half_interval_before_num}" "+%T") | |
half_interval_after_num=$(expr $event_time_num + $half_interval) | |
half_interval_after_text=$(date -d "@${half_interval_after_num}" "+%T") | |
echo -e "\e[102m\e[30m\e[1m$event_count events still to be processed\e[0m" | |
echo " " | |
echo -e "\e[1m\e[92mNow processing event ${event}\e[0m" | |
echo " " | |
echo -e "\e[40m\e[1mdate_text is \e[93m$date_text\e[0m" | |
echo Event date is $full_date_text | |
echo -e "\e[40m\e[1mEvent time_text is \e[93m$event_time_text\e[0m" | |
echo Event time is $event_time_num | |
echo Event interval is $interval seconds | |
echo Half-interval is $half_interval | |
echo $half_interval seconds before is $half_interval_before_num | |
echo $half_interval seconds before text is $half_interval_before_text | |
echo $half_interval seconds after is $half_interval_after_num | |
echo $half_interval seconds after text is $half_interval_after_text | |
## Make a folder for each clip | |
event_dir="./${date_text}_events/${date_text}_${event}" | |
echo -e "\e[101mCreating events folder $date_text_${event}\e[0m" | |
mkdir "${event_dir}" | |
echo " " | |
## Copy motion clip | |
echo -e "\e[101mCopying motion event image: motion_$event.jpg\e[0m" | |
cp ./${date_text}_motion/$event.jpg $event_dir/motion_$event.jpg | |
echo " " | |
## Extract clip from X seconds each side of the target time | |
echo -e "\e[101mExtracting ${interval} seconds clip from $half_interval_before_text to $half_interval_after_text\e[0m" | |
echo -e "\e[100m ffmpeg -y -i ${date_text}.mp4 -ss $half_interval_before_text -t $interval_text -vcodec copy -an $event_dir/${date_text}_${event}.mp4\e[0m" | |
time ffmpeg -v 16 -nostdin -y -i ${date_text}.mp4 -ss $half_interval_before_text -t $interval_text -vcodec copy -an $event_dir/${date_text}_${event}.mp4 | |
echo " " | |
## Extract all frames from the clip | |
echo -e "\e[101mExtracting frames from clip ${date_text}_${event}.mp4\e[0m" | |
mkdir "${event_dir}/frames" | |
ffmpeg -v 16 -nostdin -y -i $event_dir/${date_text}_${event}.mp4 -qscale:v 2 $event_dir/frames/frame-%02d.jpg | |
echo " " | |
## Create montage image | |
echo -e "\e[101mCreating filmstrip image: filmstrip_$date_text_${event}.jpg\e[0m" | |
frame_count=$(find $event_dir/frames/ -type f -iname "*.jpg" -print | wc -l) | |
strip_rows=$(expr $frame_count \/ 3) | |
strip_rows_extra=$(expr $strip_rows + 1) | |
montage $event_dir/frames/frame-*.jpg -title "$full_date_text: $half_interval_before_text - $half_interval_after_text" -set label "%f" -background "#e0e0e0" -tile 3x$strip_rows_extra -geometry 400x225+10+10 -shadow $event_dir/filmstrip_$date_text_${event}.jpg | |
echo " " | |
## Create the composite MIN image | |
convert -evaluate-sequence min $event_dir/frames/frame-*.jpg $event_dir/composite_min_${date_text}_${event}.jpg | |
## Create the composite MAX image | |
convert -evaluate-sequence max $event_dir/frames/frame-*.jpg $event_dir/composite_max_${date_text}_${event}.jpg | |
echo -e "\e[101mCreating composite colour image: composite_colour_${date_text}_${event}.jpg\e[0m" | |
convert -evaluate-sequence mean $event_dir/frames/frame-*.jpg -normalize $event_dir/mean.jpg | |
convert -evaluate-sequence subtract $event_dir/mean.jpg $event_dir/composite_max_${date_text}_${event}.jpg $event_dir/sub_mean_max.jpg | |
convert -evaluate-sequence add $event_dir/sub_mean_max.jpg $event_dir/composite_min_${date_text}_${event}.jpg $event_dir/add_mean_min.jpg | |
convert $event_dir/add_mean_min.jpg $event_dir/mean.jpg -compose changemask -fuzz 5% -composite $event_dir/add_mean_min_bg_removed.png | |
convert $event_dir/mean.jpg $event_dir/add_mean_min_bg_removed.png -layers flatten $event_dir/flatten_colour.jpg | |
## Add caption to the composite colour image | |
convert -background "#000000ff" -fill white -pointsize 40 label:"$full_date_text: $half_interval_before_text - $half_interval_after_text" miff:- | composite -gravity south -geometry +0+50 - $event_dir/flatten_colour.jpg $event_dir/composite_colour_${date_text}_${event}.jpg | |
echo " " | |
echo -e "\e[101mCreating composite grey background image: composite_grey_${date_text}_${event}.jpg\e[0m" | |
#convert $event_dir/mean.jpg -colorspace gray +dither -remap ./pallete.png $event_dir/mean_grey.jpg | |
#convert $event_dir/mean.jpg +dither -colors 2 $event_dir/mean_grey.jpg | |
convert $event_dir/mean.jpg -colorspace gray -normalize $event_dir/mean_grey.jpg | |
convert $event_dir/mean_grey.jpg $event_dir/add_mean_min_bg_removed.png -layers flatten $event_dir/flatten_grey.jpg | |
#convert ./background.jpg $event_dir/add_mean_min_bg_removed.png -layers flatten $event_dir/flatten.jpg | |
## Add caption to the composite grey background image | |
convert -background "#000000ff" -fill white -pointsize 40 label:"$full_date_text: $half_interval_before_text - $half_interval_after_text" miff:- | composite -gravity south -geometry +0+50 - $event_dir/flatten_grey.jpg $event_dir/composite_grey_${date_text}_${event}.jpg | |
rm $event_dir/flatten_grey.jpg | |
rm $event_dir/flatten_colour.jpg | |
rm $event_dir/mean_grey.jpg | |
rm $event_dir/mean.jpg | |
rm $event_dir/add_mean_min_bg_removed.png | |
rm $event_dir/add_mean_min.jpg | |
rm $event_dir/sub_mean_max.jpg | |
rm $event_dir/composite_min_${date_text}_${event}.jpg | |
rm $event_dir/composite_max_${date_text}_${event}.jpg | |
echo " " | |
event_count=$(expr $event_count - 1) | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment