Зміст

Відеоспостереження

Вибір та налаштування камери

ls /dev/video*
v4l2-ctl --list-formats-ext -d /dev/video0
Type: Video Capture

	[0]: 'YUYV' (YUYV 4:2:2)
		Size: Discrete 640x480
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
		Size: Discrete 1280x720
			Interval: Discrete 0.100s (10.000 fps)
	[1]: 'MJPG' (Motion-JPEG, compressed)
		Size: Discrete 640x480
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.067s (15.000 fps)
		Size: Discrete 1280x720
			Interval: Discrete 0.033s (30.000 fps)
			Interval: Discrete 0.067s (15.000 fps)

Запис звуку

Запис звуку для відеоспостереження нічим не відрізняється від звичайного запису звуку до файлу за допомогою ffmpeg 1).

Тут лише коротко назвемо передумови:

Для ALSA: arecord -l

Для PulseAudio: pacmd list-sources

Відповідно, якщо сервер PulseAudio не запущений для нашого користувача, його слід запустити: pulseaudio --start

Запис та збереження

Захоплення відео з веб-камери та передавання на сервер Icecast

"outside_cam_broadcast.sh"
#!/bin/bash
 
while [ 1 ]; do
# denoise 10:10:10:10
#    if ! /usr/bin/ffmpeg -f v4l2 -video_size 1280x720 -framerate 10 -input_format yuyv422 -i /dev/video2 -an -sn -vf "hqdn3d=10:10:10:10,drawtext=fontfile=monofonto.ttf: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=white: x=10: y=10: text='%{localtime\:%d.%m.%Y %H\\\\\:%M\\\\\:%S}'" -f webm -cluster_size_limit 2M -cluster_time_limit 1100 -content_type video/webm -c:v libvpx -crf 30 -b:v 600k -g 15 -deadline realtime -cpu-used 6 -threads 4 icecast://source:846d160e6a2f5ac2e5466d4e52ba6870169511024bb16f6a89bb3e79e01544a3@icecast.streaming.server:8000/outside_cam  < /dev/null ; then
 
# denoise 10:10:10:10
# with sound
    if ! /usr/bin/ffmpeg -f pulse -i alsa_input.pci-0000_00_1b.0.analog-stereo -f v4l2 -video_size 1280x720 -framerate 10 -input_format yuyv422 -i /dev/video2 -sn -vf "hqdn3d=10:10:10:10,drawtext=fontfile=monofonto.ttf: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=white: x=10: y=10: text='%{localtime\:%d.%m.%Y %H\\\\\:%M\\\\\:%S}'" -f webm -cluster_size_limit 2M -cluster_time_limit 1100 -content_type video/webm -c:v libvpx -crf 30 -b:v 600k -c:a libvorbis -q 0 -g 15 -deadline realtime -cpu-used 6 -threads 4 icecast://source:846d160e6a2f5ac2e5466d4e52ba6870169511024bb16f6a89bb3e79e01544a3@icecast.streaming.server:8000/outside_cam  < /dev/null ; then
    sleep 5;
  fi
done

Збереження відеотрансляції з сервера Icecast частинами

"store_icecast_stream.sh"
#!/bin/bash
 
while [ 1 ]; do
    if ! ffmpeg -r 10 -i http://icecast.streaming.server:8000/outside_cam -c copy -map 0 -f segment -segment_time 1800 -strftime 1 -segment_format webm "outside_cam-%Y-%m-%d_%H%M%S.webm" < /dev/null ; then
    sleep 5;
  fi
done

Виявлення руху

https://dvr-scan.readthedocs.io/en/latest/guide/quickstart/

https://softwarerecs.stackexchange.com/q/12097/83264

Посилання

http://billauer.co.il/blog/2022/08/ffmpeg-webcam-capture/

https://github.com/ddiepo/surveillance

https://motion-project.github.io/index.html