--
RodolfoLeibner - 18 Feb 2017
As a Motion software user, I prefer to get a big movie per day rather than a lot of small ones.
Although it is always possible to do a cron job that runs once a day joining all the avi files in one, I propose to do it on the fly.
To do it we write a bash script (the
daily.sh) that will be triggered every time a new avi file is saved.
1.- For a single camera
We have only the motion.conf (no thread _n.conf)
The
daily.sh script reads like this:
#!/bin/bash
# Appends <newfile.avi> to an unique daily avi file.
# use: daily.sh <newfile.avi> <Y-m-d>
set -e
DIR="/home/rodolfo/motion/movies"
DAILY=$DIR/day-$2.avi
if [ -f $DAILY ]; then
avimerge -o $DIR/temp.avi -i $DAILY $1
mv $DIR/temp.avi $DAILY
rm $1
else
mv $1 $DAILY
fi
# Optional: log the event
# (the following 2 lines can be commented)
STAMP='[ ] [ ] [ ] ['
echo "$STAMP$(date +'%b %d %H:%M:%S')] $DAILY updated." >> $DIR/motion.log
Your
/usr/local/bin dir is a good place to put it. Do not forget to give the file the executable permission.
Of course, you must replace the
DIR="/home... line with the path you actually use (according the declared values of
target_dir and
movie_filename).
Now open your
motion.conf , search the line
; on_movie_end value
and replace it with:
on_movie_end daily.sh %f %Y-%m-%d
That's all.
2.- For 2 or more cameras
Although we can have a script for each camera and invoke them from the corresponding thread, is more efficient - and more elegant - make a unique script to be called by the motion.conf.
Suppose that the movies in each camera are directed to different directories, for example
<target_dir> / Cam1,
<target_dir> / Cam2, etc.
That is, in
motion.conf we have something like:
movie_filename Cam%t/%T
....
thread /home/rodolfo/motion/thread1.conf
thread /home/rodolfo/motion/thread2.conf
thread /home/rodolfo/motion/thread3.conf
thread /home/rodolfo/motion/thread4.conf
Then the only thing we have to do is pass the thread number
%t to the
daily.conf as a parameter:
movie_filename Cam%t/%T
....
on_movie_end daily.sh %t %f %Y-%m-%d
....
thread /home/rodolfo/motion/thread1.conf
thread /home/rodolfo/motion/thread2.conf
thread /home/rodolfo/motion/thread3.conf
thread /home/rodolfo/motion/thread4.conf
And we modify the
daily.sh script so that it takes care of everything in this way:
#!/bin/bash
# Appends <newfile.avi> to an unique daily avi file.
# use: daily.sh <newfile.avi> <Y-m-d> <thread>
set -e
DIR="/home/rodolfo/motion"
DAILY=$DIR/Cam$3/day-$2.avi
if [ -f $DAILY ]; then
avimerge -o $DIR/Cam$3/$2.avi -i $DAILY $1
mv $DIR/Cam$3/$2.avi $DAILY
rm $1
else
mv $1 $DAILY
fi
# Optional: uncomment the following 2 lines to log the event:
# STAMP='[ ] [ ] [ ] ['
# echo "$STAMP$(date +'%b %d %T')] Thread $3: day-$2.avi updated." >> $DIR/motion.log
Again, do not forget to give the executable permission to the file and change the
DIR path to your own.
Perhaps the script can be optimized (sugestions are wellcome).
Only I can say is that it works for me (have 2 cams) as it is.
Enjoy it!
Rodolfo
rleibner@gmail.com