En el artículo "Cámara 4G y WiFi con Raspberry Pi" expliqué como configurar Motion para detectar movimientos, grabar vídeos e imágenes de estos y enviar alertas por correo electrónico. En este artículo voy a indicar como hacer que Motion también grabe continuamente el vídeo para tener un registro completo de las imágenes captadas por la cámara.
Con el parámetro de configuración emulate_motion se puede hacer que el software Motion actúe como si detectara movimiento y grabe continuamente. El vídeo se divide en archivos de la duración indicada en el parámetro movie_max_time. Para que no se creen muchos archivos y estos no tengan un tamaño excesivo podemos indicar una duración de 1800 segundos (30 minutos).
emulate_motion on movie_max_time 1800
Este procedimiento tiene el problema de que desactiva la detección de movimientos. Si también necesitamos detectar movimientos y realizar acciones al detectarlos, es necesario utilizar otros métodos. Por ejemplo podemos ejecutar dos procesos de Motion, uno que detecte los movimientos y otro que grabe continuamente. Para que los dos procesos puedan acceder a la vez a la cámara es necesario crear un dispositivo virtual con el módulo del kernel v4l2loopback.
# apt-get install v4l2loopback-dkms # vi /etc/modules v4l2loopback # vi /etc/modprobe.d/v4l2loopback.conf options v4l2loopback video_nr=1
Para cada proceso necesitamos un archivo de configuración diferente. Podemos utilizar el archivo original para detectar movimientos y hacer una copia para la grabación continua. En uno de los archivos hay que enviar el vídeo de la cámara al dispositivo virtual con el parámetro video_pipe. Yo lo he hecho en el archivo original. Como se va a grabar todo el vídeo con el otro proceso es posible desactivar la grabación de video en el original.
# cd /etc/motion/ # cp motion.conf motion-continuous.conf
# vi /etc/motion/motion.conf movie_output off video_pipe /dev/video1
En el archivo del proceso de grabación continua usamos el dispositivo virtual, activamos la emulación de movimiento, indicamos que grabe archivos de 30 minutos, desactivamos la grabación de imágenes, utilizamos un archivo "log" con el sufijo "continuous" y añadimos el prefijo "continuous" a los archivos de vídeo. También es conveniente desactivar el interfaz web y la transmisión de vídeo si están activados en el otro proceso.
# vi /etc/motion/motion-continuous.conf log_file /var/log/motion/motion-continuous.log video_device /dev/video1 emulate_motion on picture_output off movie_max_time 1800 movie_filename continuous-%t-%v-%Y%m%d%H%M%S webcontrol_port 0 stream_port 0
Finalmente debemos crear un servicio de Systemd para iniciar y parar el proceso de grabación continua. Podemos usar una copia del servicio original de Motion. En el parámetro ExecStart hay que indicarle al programa motion, con el parámetro -c, que utilice el archivo de configuración /etc/motion/motion-continuous.conf. Con los parámetros After y Requires hacemos que el servicio se ejecute después del servicio original. Esto es necesario porque el proceso de grabación necesita que el otro proceso se ejecute antes y envíe el vídeo de la cámara al dispositivo virtual. Se debe habilitar el nuevo servicio con el comando systemctl enable.
# cd /lib/systemd/system # cp motion.service motion-continuous.service # vi motion-continuous.service [Unit] Description=Motion continuous video capture daemon Documentation=man:motion(1) After=motion.service Requires=motion.service [Service] Type=simple User=motion ExecStart=/usr/bin/motion -c /etc/motion/motion-continuous.conf [Install] WantedBy=multi-user.target # systemctl enable motion-continuous
En el directorio /var/lib/motion podremos ver los archivos de vídeo de grabación continua y las imágenes de los movimientos detectados.
# ls -lh /var/lib/motion/ total 120M -rw-r--r-- 1 motion adm 7.6K Jul 22 15:35 20240722153542-12.jpg -rw-r--r-- 1 motion adm 7.6K Jul 22 15:38 20240722153821-04.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 15:42 20240722154227-12.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 15:55 20240722155534-12.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:02 20240722160241-05.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:07 20240722160702-13.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:19 20240722161930-03.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:20 20240722162036-05.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:30 20240722163001-03.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:31 20240722163107-03.jpg -rw-r--r-- 1 motion adm 7.9K Jul 22 16:37 20240722163735-10.jpg -rw-r--r-- 1 motion adm 37M Jul 22 16:02 continuous-0-01-20240722153224.mp4 -rw-r--r-- 1 motion adm 37M Jul 22 16:32 continuous-0-01-20240722160224.mp4 -rw-r--r-- 1 motion adm 47M Jul 23 15:33 continuous-0-01-20240723151336.mp4 -rw------- 1 motion adm 11K Jul 22 01:25 dead.letter
Esta es una de las formas de las que disponemos para realizar la grabación continua de video. Utilizando dispositivos virtuales v4l2loopback también podemos utilizar otros programas. Y lo ideal sería que el software Motion permitiera la grabación continua a la vez que la detección de movimiento, por ejemplo añadiendo la opción continuous al parámetro movie_output o con un nuevo parámetro movie_output_continuous.
movie_output_continuous on