Пост

Интервальная съемка и создание таймлапс видео на Raspberry Pi

Таймлапс (интервальная) съемка представляет собой технику создания видео путем захвата отдельных кадров через равные промежутки времени и их последующего воспроизведения с увеличенной частотой кадров. Например, съемка одного кадра в минуту в течение 10 часов дает 600 изображений, которые при воспроизведении со скоростью 30 кадров в секунду создают 20-секундное видео. Raspberry Pi в сочетании с USB-веб-камерой предоставляет идеальную платформу для создания таких проектов.

Интервальная съемка и создание таймлапс видео на Raspberry Pi

Введение

Таймлапс (интервальная) съемка представляет собой технику создания видео путем захвата отдельных кадров через равные промежутки времени и их последующего воспроизведения с увеличенной частотой кадров. Например, съемка одного кадра в минуту в течение 10 часов дает 600 изображений, которые при воспроизведении со скоростью 30 кадров в секунду создают 20-секундное видео. Raspberry Pi в сочетании с USB-веб-камерой предоставляет идеальную платформу для создания таких проектов.

Создание скрипта для захвата изображений

Для автоматизации процесса захвата изображений создадим bash-скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
# timelapse.sh
# Скрипт для захвата изображений с временной меткой

# Создание директории для изображений, если не существует
IMAGE_DIR="$HOME/timelapse_images"
mkdir -p "$IMAGE_DIR"

# Генерация временной метки для имени файла
TIMESTAMP=$(date +"%Y-%m-%d_%H%M%S")

# Захват изображения с веб-камеры
fswebcam -r 1280x960 --no-banner "${IMAGE_DIR}/Image_${TIMESTAMP}.jpg"

# Логирование успешного захвата
echo "$(date): Захвачено изображение Image_${TIMESTAMP}.jpg" >> "${IMAGE_DIR}/timelapse.log"

Настройка прав доступа и тестирование скрипта

Перед использованием скрипт необходимо сделать исполняемым:

1
2
3
4
5
6
7
8
# Предоставление прав на выполнение
chmod +x timelapse.sh

# Тестовый запуск
./timelapse.sh

# Проверка создания файла
ls -la ~/timelapse_images/

Настройка планировщика Cron

Cron — это планировщик задач в Unix-подобных системах. Для настройки автоматического выполнения скрипта:

1
2
# Открытие crontab для редактирования
crontab -e

Синтаксис Cron

Формат записи в crontab:

1
минута час день_месяца месяц день_недели команда

Примеры настройки интервалов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Каждую минуту
* * * * * /home/pi/timelapse.sh

# Каждые 5 минут
*/5 * * * * /home/pi/timelapse.sh

# Каждый час (в начале часа)
0 * * * * /home/pi/timelapse.sh

# Каждые 2 часа
0 */2 * * * /home/pi/timelapse.sh

# Ежедневно в 8:00 утра
0 8 * * * /home/pi/timelapse.sh

Мониторинг выполнения задач

Для проверки работы cron и просмотра логов:

1
2
3
4
5
6
7
8
# Просмотр текущих задач cron
crontab -l

# Просмотр логов cron
grep CRON /var/log/syslog

# Проверка логов скрипта
tail -f ~/timelapse_images/timelapse.log

Создание таймлапс видео из изображений

После сбора достаточного количества изображений можно создать видео. На Raspberry Pi для этого можно использовать MEncoder:

1
2
3
# Установка MEncoder
sudo apt update
sudo apt install mencoder -y

Подготовка файлов для создания видео

1
2
3
4
5
6
7
8
# Переход в директорию с изображениями
cd ~/timelapse_images

# Создание списка файлов для обработки
ls Image_*.jpg > timelapse.txt

# Проверка количества файлов
wc -l timelapse.txt

Создание видео с помощью MEncoder

1
2
3
4
5
6
7
# Создание таймлапс видео
mencoder -nosound \
  -ovc lavc \
  -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 \
  -vf scale=1280:960 \
  -o timelapse.avi \
  -mf type=jpeg:fps=30 mf://@timelapse.txt

Параметры команды:

  • -nosound - видео без звука
  • -ovc lavc - использование кодека libavcodec
  • vcodec=mpeg4 - кодек MPEG-4
  • aspect=16/9 - соотношение сторон 16:9
  • vbitrate=8000000 - битрейт 8 Мбит/с
  • scale=1280:960 - масштабирование до 1280x960
  • fps=30 - частота кадров 30 FPS

Альтернативный способ с использованием ffmpeg

FFmpeg предоставляет более современный подход:

1
2
3
4
5
6
7
# Установка ffmpeg
sudo apt install ffmpeg -y

# Создание видео из изображений
ffmpeg -framerate 30 -pattern_type glob -i 'Image_*.jpg' \
  -c:v libx264 -preset slow -crf 20 \
  -pix_fmt yuv420p timelapse.mp4

Воспроизведение созданного видео

1
2
3
4
5
6
# Использование mplayer для воспроизведения
sudo apt install mplayer -y
mplayer timelapse.avi

# Или используя omxplayer (оптимизирован для Raspberry Pi)
omxplayer timelapse.mp4

Оптимизация для Raspberry Pi

Для увеличения производительности на Raspberry Pi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Создание скрипта с оптимизациями
#!/bin/bash
# timelapse_optimized.sh

# Уменьшение разрешения для экономии места
RESOLUTION="640x480"
# Использование более низкого качества
QUALITY=70
# Задержка для стабилизации
DELAY=1

TIMESTAMP=$(date +"%Y-%m-%d_%H%M%S")
fswebcam -r $RESOLUTION -q $QUALITY -D $DELAY --no-banner \
  "$HOME/timelapse_images/Image_${TIMESTAMP}.jpg"

Очистка старых файлов

Автоматическая очистка старых изображений для экономии места:

1
2
# Добавление в crontab для удаления файлов старше 7 дней
0 3 * * * find /home/pi/timelapse_images -name "*.jpg" -mtime +7 -delete

Типичные проблемы и решения

Проблема: Скрипт не выполняется через cron Решение: Проверить абсолютные пути, права доступа и использовать перенаправление вывода: >> /home/pi/cron.log 2>&1

Проблема: Нехватка места на диске Решение: Использовать меньшее разрешение, более низкое качество JPEG, настроить автоматическую очистку

Проблема: Изображения получаются размытыми Решение: Увеличить задержку перед захватом (-D параметр) и добавить пропуск кадров (-S)

Проблема: Низкая производительность при создании видео Решение: Создавать видео на более мощном компьютере или использовать более простые кодеки

Проблема: Пропущенные кадры в таймлапсе Решение: Увеличить приоритет задачи cron или уменьшить нагрузку на систему

Создание таймлапс видео на Raspberry Pi представляет собой мощный инструмент для визуализации медленных процессов. Правильная настройка cron и оптимизация параметров захвата позволяют создавать качественные таймлапс проекты даже на ограниченных ресурсах одноплатного компьютера.

Авторский пост защищен лицензией CC BY 4.0 .

© evdokimoff. Некоторые права защищены.

Использует тему Chirpy для Jekyll