Raspberry Pi камера: стриминг видео и таймлапс своими руками

Пошаговое руководство по настройке видеопотока и созданию таймлапсов на Raspberry Pi. MJPG-Streamer, RTSP, ffmpeg. Интеграция с умным домом.
Приветствую всех любителей DIY и домашней автоматизации! Сегодня мы займёмся одним из самых творческих и наглядных применений нашего малинового одноплатника — работой с камерой. Многие из нас покупают камерный модуль для Raspberry Pi, пару раз поиграются с raspistill и raspivid, а потом он пылится на полке. А зря! Из этой недорогой железяки можно сделать полноценную систему видеонаблюдения с трансляцией в реальном времени или создать потрясающие таймлапс-ролики строительства, роста растений или изменения погоды за окном.
В этой статье я на собственном опыте расскажу, как настроить стабильный видеопоток с вашей камеры в локальную сеть и в интернет, а также как автоматизировать процесс создания таймлапсов. Всё это — без покупки дорогого оборудования, используя лишь возможности Raspberry Pi и пару проверенных программ с открытым исходным кодом.
Что нам понадобится?
- Raspberry Pi любой модели (от 3B и новее рекомендуется для стриминга). У меня в примерах будет Raspberry Pi 4 с 2 ГБ ОЗУ.
- Камера Raspberry Pi (официальная или совместимая, подключённая через CSI-разъём). Для некоторых задач подойдёт и USB-веб-камера, но сегодня фокус на родном модуле.
- Карта microSD с актуальной Raspberry Pi OS (ранее Raspbian). О выборе ОС для подобных проектов я подробно писал в статье Raspberry Pi OS vs Ubuntu vs DietPi: Выбор ОС для домашнего сервера.
- Блок питания достаточной мощности.
- Сетевое подключение (LAN или Wi-Fi).
Первым делом убедимся, что камера подключена и включена в настройках. Подключаемся к нашему Raspberry Pi по SSH (мой любимый способ) или работаем прямо с монитора.
# Включаем интерфейс камеры, если это не сделано ранее
sudo raspi-config
В меню выбираем: Interface Options -> Legacy Camera (или Camera на старых версиях) -> Yes -> Finish -> соглашаемся на перезагрузку.
После перезагрузки проверяем, что камера определяется:
# Делаем пробный снимок на 5 секунд
libcamera-still -o test_shot.jpg --timeout 5000
# Или, если используете старую версию ОС без libcamera:
# raspistill -o test_shot.jpg
Если в текущей директории появился файл test_shot.jpg — отлично, камера работает! Если нет — проверяйте физическое подключение шлейфа (контакты должны быть обращены к разъёму HDMI) и настройки в raspi-config.
Часть 1: Стриминг видео с камеры в реальном времени
Наша цель — сделать так, чтобы видео с камеры было доступно по IP-адресу вашего Raspberry Pi в локальной сети, а при желании — и извне.
Вариант 1: Простой и быстрый стрим с VLC (для просмотра на ПК)
Этот способ идеален для быстрой проверки или временного стрима. Мы будем использовать raspivid (или libcamera-vid) для захвата видео и трансляции его через стандартный RTP/RTSP поток.
# Устанавливаем VLC (если его нет) и утилиты для работы с сетью
sudo apt update
sudo apt install vlc -y
# Запускаем трансляцию с камеры в сеть
libcamera-vid -t 0 --width 1280 --height 720 --framerate 25 --codec h264 --inline -o - | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream}' :demux=h264
Разберём команду:
* libcamera-vid -t 0 – захват видео на неограниченное время.
* --width 1280 --height 720 – разрешение потока (720p). Можно уменьшить до 640x480 для экономии ресурсов.
* --framerate 25 – частота кадров.
* --codec h264 --inline -o - – кодирование в H.264 и вывод в стандартный поток (stdout).
* cvlc ... – конвейер (pipe |) передаёт видеопоток в VLC.
* --sout '#rtp{sdp=rtsp://:8554/stream}' – VLC перенаправляет (transcodes) поток в RTSP-сервер на порту 8554.
Проверка результата:
На любом компьютере в вашей локальной сети откройте VLC Player. Нажмите Media -> Open Network Stream и введите адрес:
rtsp://IP_ВАШЕГО_RASPBERRY_PI:8554/stream
Например, rtsp://192.168.1.100:8554/stream. Должно появиться живое видео с задержкой 1-2 секунды.
Типичная ошибка: "VLC can't open the stream". Чаще всего это означает, что брандмауэр на Raspberry Pi блокирует порт 8554. Откройте его:
sudo ufw allow 8554/tcp
# Или, если ufw не установлен, используйте iptables (менее безопасно)
# sudo iptables -A INPUT -p tcp --dport 8554 -j ACCEPT
Вариант 2: Мощный и гибкий стрим с MJPG-Streamer для браузера
Если вы хотите смотреть поток в обычном браузере без установки VLC, то MJPG-Streamer — ваш выбор. Он создаёт простую веб-страницу с видео.
# Устанавливаем зависимости и сам MJPG-Streamer
sudo apt update
sudo apt install cmake libjpeg-dev build-essential git -y
cd ~
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
sudo make install
Теперь создадим простой скрипт для запуска, чтобы не запоминать длинную команду.
nano ~/start_stream.sh
Вставляем в файл следующее содержимое:
#!/bin/bash
# Скрипт запуска MJPG-Streamer
/usr/local/bin/mjpg_streamer -i "input_raspicam.so -x 1280 -y 720 -fps 15 -quality 50" -o "output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"
-x 1280 -y 720– разрешение.-fps 15– частота кадров. 15-20 FPS достаточно для наблюдения.-quality 50– качество JPEG (1-100). Меньше качество = меньше нагрузка на сеть и CPU.-p 8080– порт, на котором будет работать веб-интерфейс.
Делаем скрипт исполняемым и запускаем:
chmod +x ~/start_stream.sh
~/start_stream.sh
Проверка результата:
Откройте браузер и перейдите по адресу http://IP_ВАШЕГО_RASPBERRY_PI:8080. Вы увидите веб-страницу с видео и элементами управления. Для просмотра чистого потока (например, для интеграции в Home Assistant) используйте URL: http://IP_ВАШЕГО_RASPBERRY_PI:8080/?action=stream.
Чтобы сервис запускался автоматически после перезагрузки, создадим systemd-юнит:
sudo nano /etc/systemd/system/mjpg-streamer.service
[Unit]
Description=MJPG-Streamer Service
After=network.target
[Service]
ExecStart=/home/pi/start_stream.sh
User=pi
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Активируем и запускаем сервис:
sudo systemctl daemon-reload
sudo systemctl enable mjpg-streamer.service
sudo systemctl start mjpg-streamer.service
# Проверяем статус
sudo systemctl status mjpg-streamer.service
Часть 2: Создание таймлапс-видео
Таймлапс — это «сжатие времени». Мы будем делать снимки с заданным интервалом, а потом склеим их в видео.
Шаг 1: Автоматический захват кадров
Создадим директорию для хранения снимков и напишем простой скрипт.
mkdir -p ~/timelapse_images
cd ~
nano capture_timelapse.sh
Вставляем скрипт:
#!/bin/bash
# Скрипт для захвата кадров таймлапса
INTERVAL=10 # Интервал между снимками в секундах (например, 10)
DURATION=36000 # Общая длительность съёмки в секундах (например, 10 часов = 36000)
IMAGE_DIR="/home/pi/timelapse_images"
PREFIX="tl_"
# Рассчитываем количество кадров
COUNT=$((DURATION / INTERVAL))
echo "Начинаем съёмку таймлапса. Всего кадров: $COUNT, интервал: ${INTERVAL}с."
for ((i=1; i<=COUNT; i++))
do
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# Делаем снимок с помощью libcamera-still
libcamera-still -o "${IMAGE_DIR}/${PREFIX}${TIMESTAMP}.jpg" --width 1920 --height 1080 --quality 90
# Или с помощью raspistill для старых систем:
# raspistill -o "${IMAGE_DIR}/${PREFIX}${TIMESTAMP}.jpg" -w 1920 -h 1080 -q 90
echo "Снят кадр $i из $COUNT: ${PREFIX}${TIMESTAMP}.jpg"
sleep $INTERVAL
done
echo "Съёмка завершена!"
Делаем скрипт исполняемым: chmod +x capture_timelapse.sh.
Запуск вручную: ./capture_timelapse.sh. Скрипт будет работать в фоне, делая снимки каждые 10 секунд в течение 10 часов. Вы можете прервать его в любой момент комбинацией Ctrl+C.
Совет: Для очень длительных таймлапсов (сутки и более) лучше настроить скрипт как сервис или использовать cron. Например, чтобы делать снимок каждые 5 минут с 8 утра до 8 вечера, добавьте в crontab -e строку:
*/5 8-20 * * * libcamera-still -o "/home/pi/timelapse_images/tl_$(date +%Y%m%d_%H%M%S).jpg" --width 1920 --height 1080
Шаг 2: Склейка кадров в видеофайл
Когда у нас есть папка с сотнями или тысячами изображений, превратим их в плавное видео с помощью ffmpeg.
# Устанавливаем ffmpeg
sudo apt update
sudo apt install ffmpeg -y
# Переходим в папку с изображениями
cd ~/timelapse_images
# Команда для склейки. Все файлы, начинающиеся на 'tl_', будут использованы в алфавитном порядке (он же по времени).
ffmpeg -framerate 25 -pattern_type glob -i 'tl_*.jpg' -c:v libx264 -pix_fmt yuv420p -crf 23 -preset medium ../timelapse_output.mp4
Разберём ключевые параметры ffmpeg:
* -framerate 25 – частота кадров выходного видео. 25 кадров в секунду — стандарт.
* -pattern_type glob -i 'tl_*.jpg' – использование шаблона для выбора всех jpg-файлов.
* -c:v libx264 – кодирование в H.264.
* -pix_fmt yuv420p – формат пикселей, совместимый со всеми плеерами.
* -crf 23 – качество (Constant Rate Factor). Меньше = лучше качество, но больше размер файла. Диапазон 18-28.
* -preset medium – баланс между скоростью кодирования и степенью сжатия.
Типичная ошибка: [image2 @ 0x...] Could not find codec parameters for stream 0. Это означает, что ffmpeg не может прочитать файлы. Убедитесь, что в папке есть файлы .jpg и что команда запущена из правильной директории. Также проверьте, что имена файлов в шаблоне совпадают.
Проверка результата: После завершения кодирования (это может занять несколько минут) в вашей домашней директории (/home/pi/) появится файл timelapse_output.mp4. Скачайте его через SCP или SFTP на свой компьютер и наслаждайтесь результатом!
Часть 3: Продвинутая интеграция и идеи
Настроив базовый функционал, можно пойти дальше.
-
Интеграция с Home Assistant: Поток с MJPG-Streamer легко добавить в HA как камеру. В
configuration.yamlдобавьте: ```yaml camera:- platform: mjpeg mjpeg_url: http://IP_RASPBERRY_PI:8080/?action=stream name: Raspberry Pi Camera ``` После перезагрузки HA вы увидите картинку с камеры в интерфейсе. Это может стать основой для DIY умного звонка или системы наблюдения.
-
Доступ к стриму из интернета: Никогда не открывайте порты камеры (8080, 8554) напрямую в интернет! Это огромная дыра в безопасности. Используйте VPN, например, WireGuard на вашем одноплатнике, для безопасного доступа к домашней сети. Подключившись к VPN, вы сможете смотреть стрим так, как будто находитесь дома.
-
Таймлапс для умной теплицы: Установите Raspberry Pi с камерой в теплице, чтобы в автоматическом режиме снимать рост растений. Объедините это с данными датчиков температуры и влажности, как в проекте Умная теплица на ESP32 и Raspberry Pi, и вы получите полную картину микроклимата.
Заключение
Как видите, камера Raspberry Pi — это не просто игрушка для селфи. Это мощный инструмент для творчества и автоматизации. От простого стрима для наблюдения за домашними питомцами до создания профессиональных таймлапс-роликов — всё это доступно с минимальными вложениями.
Самое главное — начать экспериментировать. Подберите оптимальное разрешение и частоту кадров под свою задачу, поиграйтесь с углами и освещением. И не забывайте про безопаность: ваш домашний видеопоток должен оставаться только вашим.
Удачи в творчестве! Делитесь своими таймлапсами и находками в комментариях.
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Headless Raspberry Pi: Настройка без монитора через SSH — Полное руководство
Pi-hole на Raspberry Pi: Как я избавил всю домашнюю сеть от рекламы раз и навсегда
Raspberry Pi как домашний сервер: что на нём можно запустить в 2024
Raspberry Pi медиасервер Jellyfin: домашний Netflix своими руками
Raspberry Pi NAS: Собираем домашнее сетевое хранилище на OpenMediaVault
Продлеваем жизнь SD-карте в Raspberry Pi: полное руководство по выживанию