====== Відеоспостереження ====== ===== Вибір та налаштування камери ===== 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