====== Відеоспостереження ======
===== Вибір та налаштування камери =====
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 ((https://trac.ffmpeg.org/wiki/Capture/PulseAudio , https://trac.ffmpeg.org/wiki/Capture/ALSA)).
Тут лише коротко назвемо передумови:
* Зазвичай користувач має бути членом групи ''audio'', щоб мати доступ до звукових пристроїв.
* Необхідно дізнатися, які пристрої запису звуку є в системі:
Для ALSA: ''arecord -l''
Для PulseAudio: ''pacmd list-sources''
Відповідно, якщо сервер PulseAudio не запущений для нашого користувача, його слід запустити: ''pulseaudio --start''
===== Запис та збереження =====
Захоплення відео з веб-камери та передавання на сервер Icecast
#!/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 частинами
#!/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