Пост

Запись видео с веб-камеры на Raspberry Pi

Запись видео с USB-веб-камеры на Raspberry Pi может осуществляться с помощью утилиты командной строки ffmpeg. Это мощный мультимедийный фреймворк, который предоставляет возможности для захвата, преобразования и потоковой передачи аудио и видео. В отличие от простого захвата отдельных изображений, запись видео позволяет создавать непрерывные видеопотоки, что полезно для систем видеонаблюдения, записи событий и создания видеоконтента.

Запись видео с веб-камеры на Raspberry Pi

Введение

Запись видео с USB-веб-камеры на Raspberry Pi может осуществляться с помощью утилиты командной строки ffmpeg. Это мощный мультимедийный фреймворк, который предоставляет возможности для захвата, преобразования и потоковой передачи аудио и видео. В отличие от простого захвата отдельных изображений, запись видео позволяет создавать непрерывные видеопотоки, что полезно для систем видеонаблюдения, записи событий и создания видеоконтента.

Установка ffmpeg

Для начала работы необходимо установить ffmpeg через менеджер пакетов:

1
2
3
4
5
6
# Обновление списка пакетов и установка ffmpeg
sudo apt update
sudo apt install ffmpeg -y

# Проверка установки
ffmpeg -version

Базовая запись видео

Самый простой способ записи видео с веб-камеры:

1
2
# Базовая запись видео с параметрами по умолчанию
ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 output.avi

Описание параметров:

  • -f video4linux2 - формат ввода (Video4Linux2 для веб-камер в Linux)
  • -r 25 - частота кадров (25 кадров в секунду)
  • -s 640x480 - разрешение видео
  • -i /dev/video0 - устройство ввода (веб-камера)
  • output.avi - имя выходного файла

Настройка параметров записи

Для получения качественного видео можно настроить дополнительные параметры:

1
2
3
4
5
6
7
8
9
10
# Запись с улучшенными параметрами
ffmpeg -f video4linux2 \
  -r 30 \
  -s 1280x720 \
  -i /dev/video0 \
  -vcodec libx264 \
  -preset ultrafast \
  -crf 23 \
  -pix_fmt yuv420p \
  video_output.mp4

Расширенные параметры:

  • -vcodec libx264 - использование кодека H.264 для лучшего сжатия
  • -preset ultrafast - скорость кодирования (от ultrafast до veryslow)
  • -crf 23 - качество видео (меньше = лучше качество, 18-28 рекомендуемый диапазон)
  • -pix_fmt yuv420p - формат пикселей, совместимый с большинством плееров

Запись с ограничением по времени

Для автоматической остановки записи через определенное время:

1
2
3
4
5
6
7
8
9
# Запись видео длительностью 60 секунд
ffmpeg -f video4linux2 \
  -t 60 \
  -r 25 \
  -s 640x480 \
  -i /dev/video0 \
  -vcodec mpeg4 \
  -qscale 2 \
  60_second_video.avi

Запись с настройкой битрейта

Контроль размера файла через настройку битрейта:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Запись с фиксированным битрейтом
ffmpeg -f video4linux2 \
  -r 30 \
  -s 1280x720 \
  -i /dev/video0 \
  -b:v 2M \
  -maxrate 2M \
  -bufsize 1M \
  constant_bitrate.mp4

# Запись с переменным битрейтом (VBR)
ffmpeg -f video4linux2 \
  -r 25 \
  -s 640x480 \
  -i /dev/video0 \
  -qscale:v 3 \
  variable_bitrate.avi

Запись с аудио (если камера поддерживает)

Некоторые веб-камеры имеют встроенный микрофон:

1
2
3
4
5
6
7
8
# Запись видео с аудио
ffmpeg -f video4linux2 -i /dev/video0 \
  -f alsa -i hw:0 \
  -r 25 \
  -s 640x480 \
  -acodec aac \
  -b:a 128k \
  video_with_audio.mp4

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

Создайте bash-скрипт для упрощения процесса записи:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# record_video.sh

# Параметры по умолчанию
RESOLUTION="1280x720"
FPS=30
DURATION=0  # 0 = без ограничения по времени
OUTPUT_DIR="$HOME/video_recordings"

# Создание директории для сохранения
mkdir -p "$OUTPUT_DIR"

# Генерация имени файла с временной меткой
FILENAME="${OUTPUT_DIR}/video_$(date +%Y%m%d_%H%M%S).mp4"

echo "Начало записи видео..."
echo "Разрешение: $RESOLUTION"
echo "Частота кадров: $FPS"
echo "Выходной файл: $FILENAME"
echo "Для остановки нажмите Ctrl+C"

# Команда записи
if [ "$DURATION" -gt 0 ]; then
    # Запись с ограничением по времени
    ffmpeg -f video4linux2 \
      -t "$DURATION" \
      -r "$FPS" \
      -s "$RESOLUTION" \
      -i /dev/video0 \
      -vcodec libx264 \
      -preset veryfast \
      -crf 25 \
      -pix_fmt yuv420p \
      "$FILENAME"
else
    # Запись без ограничения по времени
    ffmpeg -f video4linux2 \
      -r "$FPS" \
      -s "$RESOLUTION" \
      -i /dev/video0 \
      -vcodec libx264 \
      -preset veryfast \
      -crf 25 \
      -pix_fmt yuv420p \
      "$FILENAME"
fi

echo "Запись завершена: $FILENAME"

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

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

Использование omxplayer (рекомендуется для Raspberry Pi):

1
2
3
4
5
# Воспроизведение видео с аппаратным ускорением
omxplayer video_output.mp4

# Воспроизведение с дополнительными параметрами
omxplayer --aspect-mode letterbox --vol -200 video_output.mp4

Использование VLC (если установлен):

1
2
3
4
5
# Установка VLC
sudo apt install vlc -y

# Воспроизведение через VLC
vlc video_output.mp4

Использование ffplay (часть пакета ffmpeg):

1
2
# Воспроизведение с помощью ffplay
ffplay video_output.mp4

Пакетная обработка видео

Скрипт для автоматической конвертации и оптимизации видео:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# optimize_videos.sh

INPUT_DIR="$HOME/video_recordings"
OUTPUT_DIR="$HOME/optimized_videos"

mkdir -p "$OUTPUT_DIR"

for video in "$INPUT_DIR"/*.mp4 "$INPUT_DIR"/*.avi; do
    if [ -f "$video" ]; then
        filename=$(basename "$video")
        output_file="$OUTPUT_DIR/${filename%.*}_optimized.mp4"
        
        echo "Оптимизация: $filename"
        
        ffmpeg -i "$video" \
          -vcodec libx264 \
          -preset medium \
          -crf 28 \
          -vf "scale=640:-1" \
          -acodec aac \
          -b:a 64k \
          "$output_file"
    fi
done

Мониторинг использования ресурсов

При записи видео важно следить за использованием ресурсов:

1
2
3
4
5
6
7
8
# Проверка использования процессора во время записи
htop

# Мониторинг температуры процессора
vcgencmd measure_temp

# Проверка использования памяти
free -h

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

Проблема: Ошибка “Cannot open video device /dev/video0” Решение: Проверить подключение камеры и права доступа: ls -la /dev/video*

Проблема: Низкая частота кадров при записи Решение: Уменьшить разрешение: -s 640x480 или использовать более простой кодек

Проблема: Большой размер видеофайлов Решение: Увеличить значение CRF (-crf 28), использовать более эффективный кодек H.265

Проблема: Прерывание записи из-за перегрева Решение: Уменьшить разрешение, использовать активное охлаждение, контролировать температуру

Проблема: Не воспроизводится на других устройствах Решение: Использовать совместимые форматы: -vcodec libx264 -pix_fmt yuv420p

Запись видео с веб-камеры на Raspberry Pi с использованием ffmpeg предоставляет гибкие возможности для создания видеоконтента различного качества. Правильная настройка параметров кодирования позволяет балансировать между качеством видео, размером файлов и нагрузкой на систему, что особенно важно при работе с ограниченными ресурсами одноплатного компьютера.

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

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

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