18 Jan 2022

Motion Activated Security Camera With Audio Backed Up To VPS

Motion Activated Security Camera With Audio Automatically Backed Up To VPS

This will be achieved using the great softwares motion and ffmpeg.

  1. Create ~/.motion/motion.conf (at least the camera resolution and USERNAME in paths should be edited and possibly the sensitivy of the motion detection)

     # Rename this distribution example file to motion.conf
     #
     # This config file was generated by motion 4.4.0
     # Documentation:  /usr/share/doc/motion/motion_guide.html
     #
     # This file contains only the basic configuration options to get a
     # system working.  There are many more options available.  Please
     # consult the documentation for the complete list of all options.
     #
    
     ############################################################
     # System control configuration parameters
     ############################################################
    
     # Start in daemon (background) mode and release terminal.
     daemon off
    
     # Start in Setup-Mode, daemon disabled.
     setup_mode off
    
     # File to store the process ID.
     ; pid_file value
    
     # File to write logs messages into.  If not defined stderr and syslog is used.
     ; log_file value
    
     # Level of log messages [1..9] (EMG, ALR, CRT, ERR, WRN, NTC, INF, DBG, ALL).
     log_level 6
    
     # Target directory for pictures, snapshots and movies
     target_dir /home/USERNAME/motion
    
     # Video device (e.g. /dev/video0) to be used for capturing.
     video_device /dev/video0
    
     # Parameters to control video device.  See motion_guide.html
     ; vid_control_params value
    
     # The full URL of the network camera stream.
     ; netcam_url value
    
     # Name of mmal camera (e.g. vc.ril.camera for pi camera).
     ; mmalcam_name value
    
     # Camera control parameters (see raspivid/raspistill tool documentation)
     ; mmalcam_control_params value
    
     ############################################################
     # Image Processing configuration parameters
     ############################################################
    
     # Image width in pixels.
     width 1920
    
     # Image height in pixels.
     height 1080
    
     # Maximum number of frames to be captured per second.
     framerate 15
    
     # Text to be overlayed in the lower left corner of images
     text_left CAMERA1
    
     # Text to be overlayed in the lower right corner of images.
     text_right %Y-%m-%d\n%T-%q
    
     ############################################################
     # Motion detection configuration parameters
     ############################################################
    
     # Always save pictures and movies even if there was no motion.
     emulate_motion off
    
     # Threshold for number of changed pixels that triggers motion.
     threshold 11000
    
     # Noise threshold for the motion detection.
    
     noise_level 32
    
     # Despeckle the image using (E/e)rode or (D/d)ilate or (l)abel.
     despeckle_filter EedDl
    
     # Number of images that must contain motion to trigger an event.
     minimum_motion_frames 1
    
     # Gap in seconds of no motion detected that triggers the end of an event.
     event_gap 1
    
     # The number of pre-captured (buffered) pictures from before motion.
     pre_capture 0
    
     # Number of frames to capture after motion is no longer detected.
     post_capture 20
    
     ############################################################
     # Script execution configuration parameters
     ############################################################
    
    
     # save microphone straight to vps: ffmpeg -nostdin -f alsa -i pulse -c:a libmp3lame -ar 44100 -b:a 128k -ac 1 -f mp3 - | ssh -C vps "cat - > /var/www/cams/output-$(date '+%s').mp3"
     on_event_start ffmpeg -nostdin -f alsa -i pulse -c:a libmp3lame -ar 44100 -b:a 128k -ac 1 -f mp3 /home/USERNAME/motion/%Y%m%d%H%M%S.mp3 &
    
     # merge video and audio : ffmpeg -i 20220105202755.mkv -i 20220105202755.mp3 -c:v copy -c:a aac output.mkv
     # on_event_end  pkill -f ffmpeg ; /usr/bin/rsync -av --delete --progress /home/USERNAME/motion/ vps:/var/www/motion/ #USE SCRIPT BELOW INSTEAD
     on_event_end /home/USERNAME/.motion/event_end.sh
    
    
     # Command to be executed when a movie file is closed.
     ; on_movie_end value
    
     ############################################################
     # Picture output configuration parameters:
     ############################################################
    
     # Output pictures when motion is detected
     picture_output off
    
     # File name(without extension) for pictures relative to target directory
     picture_filename %Y%m%d%_H%M%S-%q
    
     ############################################################
     # Movie output configuration parameters
     ############################################################
    
     # Create movies of motion events.
     movie_output on
    
     # Maximum length of movie in seconds.
     movie_max_time 60
    
     # The encoding quality of the movie. (0=use bitrate. 1=worst quality, 100=best)
     movie_quality 0
    
     # Container/Codec to used for the movie. See motion_guide.html
     movie_codec mkv
    
     # File name(without extension) for movies relative to target directory
     movie_filename %Y%m%d%_H%M%S
    
     ############################################################
     # Webcontrol configuration parameters
     ############################################################
    
     # Port number used for the webcontrol.
     webcontrol_port 8080
    
     # Restrict webcontrol connections to the localhost.
     webcontrol_localhost on
    
     # Type of configuration options to allow via the webcontrol.
     webcontrol_parms 0
    
     ############################################################
     # Live stream configuration parameters
     ############################################################
    
     # The port number for the live stream.
     stream_port 8081
    
     # Restrict stream connections to the localhost.
     stream_localhost on
    
     ##############################################################
     # Camera config files - One for each camera.
     ##############################################################
     ; camera /usr/etc/motion/camera1.conf
     ; camera /usr/etc/motion/camera2.conf
     ; camera /usr/etc/motion/camera3.conf
     ; camera /usr/etc/motion/camera4.conf
    
     ##############################################################
     # Directory to read '.conf' files for cameras.
     ##############################################################
     ; camera_dir /usr/etc/motion/conf.d
    
  2. Create ~/.motion/event_end.sh and make it executable

     #!/bin/bash
    
     echo "Killing ffmpeg... (stop audio recording)"
     pkill -2 ffmpeg
     echo "Copying files to VPS..."
     /usr/bin/rsync -av --delete --progress /home/USERNAME/motion/ vps:/var/www/motion/