Запись видео с веб-камеры на 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 предоставляет гибкие возможности для создания видеоконтента различного качества. Правильная настройка параметров кодирования позволяет балансировать между качеством видео, размером файлов и нагрузкой на систему, что особенно важно при работе с ограниченными ресурсами одноплатного компьютера.