Автоматическая фотофиксация на Linux с ffmpeg

Год назад я эксперименторовал с созданием фотографий своим ноутбуком. Вместо постоянного стрима ноут делал фото и сохранял его в папке веб-сервера. Об этом я писал в посте Как я сделал автоматическую съемку фото на веб камере ноутбука из консоли Linux. Я использовал утилиту fswebcam. Все отлично работало, но только фото были не очень хорошего качества.

Недавно настраивал видео-стрим с линукса и вспомнил про утилиту ffmpeg. Конечно, сравнивать fswebcam и ffmpeg примерно то же самое, что сравнивать Paint и Photoshop, но когда есть задача сделать качественно, нужно использовать соответствующие инструменты.

В отличие от fswebcam, ffmpeg не умеет себя вызывать повторно. Потому решение для съемки каждую минуту было реализовано через бэкграунд сервис (systemd) и shell скрипт. Ниже пошаговая инструкция, что и как сделать.

1. Создаем shell скрипт. Сохраним его в директории /usr/local/bin/

sudo nano /usr/local/bin/capture_webcam.sh

и вставь в редактор следующий код

#!/bin/bash

while true; do
    ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 \
		-i /dev/video0 -t 1 -frames:v 1 -q:v 2 \
		-vf "transpose=2,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text='%{localtime\:%Y-%m-%d 				%H\\\\\\:%M\\\\\\:%S}':x=10:y=10:fontsize=32:fontcolor=white:box=1:boxcolor=black@0.5" \
		-y /var/www/html/webcam.jpg
		
    sleep 60
done

Сохрани файл. После чего сделай его исполняемым, для чего нужно установить права для запуска.

Блок с drawtext будет добавлять текущее время. Я его подсмотрел в примерах на других сайтах. Файл изображения сохраняется в рабочую директорию сайта на nginx.

sudo chmod +x /usr/local/bin/capture_webcam.sh

2. Создай сервис. Файлы с инструкциями хранятся в /etc/systemd/system/

sudo nano /etc/systemd/system/webcam-capture.service

Код для сервиса

[Unit]
Description=Webcam photo capture every minute
After=network.target

[Service]
ExecStart=/usr/local/bin/capture_webcam.sh
Restart=always
RestartSec=5
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target

3. Добавь права для 'www-data'

sudo usermod -aG video www-data
sudo chgrp -R www-data /var/www/html
sudo chmod -R 775 /var/www/html
sudo chown -R www-data:www-data /var/www/html/webcam.jpg

4. Инициализация нового сервиса и его запуск

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable webcam-capture.service
sudo systemctl start webcam-capture.service

Этот сценарий несколько сложней, чем описанный в Как я сделал автоматическую съемку фото на веб камере ноутбука из консоли Linux. Но результат вас не разочарует однозначно.


Комментариев нет »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment





Срок проверки reCAPTCHA истек. Перезагрузите страницу.



MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика