Меню Рубрики

Программы для записи видео с веб камеры linux

Программы чтобы снимать видео и фотографии с веб камеры в Linux

Нет принципиальных различий между веб камерой и камерой, подключённой к компьютеру — любая из них может использоваться для видео звонков и видео конференций. Также камеры и веб камеры могут использоваться для снятия видео, фотографирования и ведения онлайн стримов.

В данной инструкции будет рассказано о программах, которыми вы можете снимать видео и делать фотографии в Linux используя встроенную в ноутбук камеру или подключённую камеру к компьютеру.

GTK UCV Video Viewer

Программа GTK UCV Video Viewer умеет снимать фотографии и записывать видео со звуком с камеры ноутбука и компьютера. У программы много настроек фотографий, видео и звука. Также имеются простые для видео и голоса.

Установка GTK UCV Video Viewer в Debian, Linux Mint, Kali Linux, Ubuntu и производные дистрибутивы:

Установка GTK UCV Video Viewer в Arch Linux, BlackArch и производные дистрибутивы:

Для запуска программы наберите:

Настройки камеры для фотографий:

Настройки видео камеры:

Пример фотографии — глядя на эту фотографию довольно просто понять разницу между «веб камерой» и «камерой» — качество картинки первой примерно на уровне «узнать собеседника», хотя бывают ноутбуки и с веб камерами хорошего качества:

cheese

Программа cheese делает фотографии и записывает видео с вашей веб камеры добавляя забавные графические эффекты.

Установка cheese в Debian, Linux Mint, Kali Linux, Ubuntu и производные дистрибутивы:

Установка cheese в Arch Linux, BlackArch и производные дистрибутивы:

Для запуска выполните:

Эффекты можно использовать как при фотографировании, так и при записи видео.

Пример фотографии с эффектом:

К сожалению, я не нашёл, как в cheese поменять разрешение (качество) фотографий.

В моей системе после закрытия окна cheese не всегда останавливался процесс этой программы. Если у вас эта же проблема, то завершить все процессы cheese вы можете командой:

Чтобы проверить, запущен ли процесс cheese:

OBS Studio

У программы OBS Studio много функций для записи видео с экрана или с веб камеры и для ведения стримов. Я не знаю, как фотографировать с помощью OBS Studio, но зато покажу, как записывать видео с веб камеры со звуком или без звука (на ваше усмотрение). Кстати, вас также может заинтересовать статья «Как одновременно захватывать экран и видео с веб камеры в Linux и Windows».

Как установить OBS Studio

Установка OBS Studio в Windows

Зайдите на официальный сайт и скачайте OBS Studio: https://obsproject.com/ru/download

Установите скаченный файл, как любое другое приложение.

Установка OBS Studio в Debian, Linux Mint, Kali Linux, Ubuntu и производные дистрибутивы:

Установка OBS Studio в Arch Linux, BlackArch и производные дистрибутивы:

Нас интересует раздел «Источники», когда мы добавим необходимые источники видео и аудио, то нужно нажать кнопку «Начать запись».

Нажмите кнопку + (плюс) и выберите «Устройство захвата видео (V4L2)»:

Вы можете отредактировать настройки веб камеры:

Теперь изображение с камеры выделено красным прямоугольником, вы можете изменить размер и расположение области показа изображения с веб камеры.

Красный прямоугольник, который показывает область на видео, куда будет выводиться изображение с веб-камеры, по умолчанию довольно маленький — увеличьте его до нужного размера. Размер кадры камеры и записываемого видео могут различаться — в этом случае вы можете растянуть прямоугольник веб камеры до полного заполнения экрана с обрезкой части видео с камеры или оставить полосы по краям или сверху в записываемом видео.

Если вы хотите записывать не только видео с веб камеры, но и звук в OBS Studio, то добавьте «Захват входного потока аудио (PulseAudio)»

В «Микшере аудио» нажмите шестерёнку «Захват входного потока аудио (PulseAudio)»:

Выберите «Фильтры»:

Нажмите знак + (плюс) и выберите фильтр «Шумоподавление»,

отредактируйте его настройки:

Если вы знаете другие программы для фотографирования и записи видео с веб камеры в Linux, то пишите их в комментариях!

Источник

Захват видео с USB камер на устройствах под управлением Linux

Предыстория

  1. Видео в разрешении FullHD (1920Х1080) или HD (1280х720) и нормальная частота кадров (чтобы можно было играть).
  2. Игрушку я планировал отдать детям, поэтому нужен был автостарт и поддержка подключения/отключения камеры.

В общем хотелось что-то вроде этого:

Ограничения

Я не собирался искать решение, которое работает всегда и везде. Следующие ограничения меня вполне устраивали:

  1. Хороший WiFi сигнал.
  2. Ограниченное число подключений, приоритет отдавался случаю, когда есть всего один клиент.
  3. Камера поддерживает режим MJPG.

HW и SW

Предварительный анализ

Код UVC драйвера оказался готов к добавлению различного рода “специальных” решений, и я легко нашел место, где надо скорректировать размер буфера (функция uvc_fixup_video_ctrl()). Более того, драйвер поддерживает набор quirks, которые позволяют поддерживать камеры с разного рода отклонениями от стандарта UVC. В общем, разработчики драйвера сделали лучшее, что возможно для поддержки зоопарка камер.

Добавив коррекцию размера буфера, я получил стабильную работу в режиме 1280х720 и даже в режиме 1920х1080. Ура! Половина задачи решена!

В поисках новых приключений

Немного порадовавшись первой удаче, я вспомнил, что mjpg-streamer далек от совершенства. Наверняка можно сделать что-то простое, не такое универсальное как mjpg-streamer, но более подходящее для моих условий. Так я решил сделать uvc2http.

В mjpg-streamer мне не понравилось использование нескольких потоков и копирование буферов. Это определило архитектуру решения: 1 поток и никакого копирования. Используя non-blocking IO, это делается достаточно просто: захватываем кадр и без копирования отсылаем его клиенту. Есть небольшая проблема: пока мы отсылаем данные из буфера, мы не можем вернуть буфер обратно в очередь. А пока буфер не в очереди, драйвер не может положить в него новый кадр. Но если размер очереди > 1, то это становится возможным. Число буферов определяет максимальное количество подключений, которое можно гарантированно обслуживать. Т.е., если я хочу гарантированно поддерживать 1 клиента, то 3-х буферов достаточно (в один буфер пишет драйвер, из второго отсылаем данные, третий в запасе, чтобы избежать конкуренции с драйвером за буфер при попытке получить новый кадр).

Uvc2http

Uvc2http состоит из двух компонентов: UvcGrabber и HttpStreamer. Первый отвечает за получение буферов (кадров) из очереди и возврат их обратно в очередь. Второй отвечает за обслуживание клиентов по HTTP. Есть еще немного кода, который связывает эти компоненты. Подробности можно посмотреть в исходниках.

Неожиданная проблема

Все было замечательно: приложение работало и в разрешении 1280х720 выдавало 20+ кадров/сек. Я делал косметические изменения в коде. После очередной порции изменений я замерил частоту кадров. Результат был удручающий — меньше 15 кадров. Я бросился искать, что же привело к деградации. Я потратил, наверное, 2 часа в течение которых частота уменьшалась с каждым замером до значения 7 кадров/сек. В голову лезли разные мысли о деградации из-за долгой работы роутера, из-за его перегрева. Это было что-то непонятное. В какой-то момент я отключил стримминг и увидел, что просто один захват (без стримминга) давал те же 7 кадров. Я даже начал подозревать проблемы с камерой. В общем какая-то чушь. Дело было вечером и камера, повернутая в окно, показывала что-то серое. Дабы сменить мрачное изображение я повернул камеру внутрь комнаты. И, о чудо! Частота кадров увеличилась до 15 и я все понял. Камера автоматически подстраивала время экспозиции и в какой-то момент это время стало больше длительности кадра при заданной частоте. За эти два часа случилось следующее: сначала плавно темнело (это был вечер), а потом я повернул камеру внутрь освещенной комнаты. Направив камеру на люстру я получил 20+ кадров/сек. Ура.

Другие проблемы и нюансы использования

Результаты

Ниже табличка с результатами сравнения mjpg-streamer и uvc2http. Если коротко — есть значительный выигрыш в потреблении памяти и небольшой выигрыш в частоте кадров и загрузке CPU.

1280×720 1920×1080
VSZ, KB, 1 client VSZ, KB, 2 clients CPU, %, 1 client CPU, %, 2 clients FPS, f/s, 1 client FPS, f/s, 2 clients VSZ, KB, 1 client VSZ, KB, 2 clients CPU, %, 1 client CPU, %, 2 clients FPS, f/s, 1 client FPS, f/s, 2 clients
Mjpg-streamer 16860 19040 26 43 17.6 15 25456 25812 28 50 13.8 10
uvc2http 3960 3960 26 43 22 19.6 7576 7576 28 43 15.5 12.2

Ну и конечно же видео, которое я сделал вместе с детьми:

Фото получившегося танка (получилось что-то вроде цыганской телеги):

Использование

Исходники находятся здесь. Для использования на PC Linux надо всего лишь собрать (при условии что вы не хотите патчить драйвер UVC). Утилита собирается с помощью CMake стандартным способом. Если же надо использовать в OpenWRT, то надо сделать дополнительные шаги:

  1. Скопировать содержимое директории OpenWrt-15.05 в корень репозитория OpenWRT. Эти файлы только для OpenWRT 15.05. Они описывают новый пакет для OpenWRT и патч для драйвера UVC.
  2. Если ваша камера также возвращает завышенный размер необходимого буфера, то надо добавить использование quirk UVC_QUIRK_COMPRESSION_RATE для вашей камеры в файле uvc_driver.c. Для этого надо сделать собственный патч для драйвера UVC. Как это сделать, описано здесь wiki.openwrt.org/doc/devel/patches. Вам необходимо добавить описание вашей камеры в массив uvc_ids. В качестве примера можно посмотреть на описание моей камеры:

  • Настроить сборку OpenWRT стандартный методом (http://wiki.openwrt.org/doc/howto/build). При настройке необходимо выбрать пакет uvc2http в меню Multimedia.
  • Собрать пакет uvc2http или полный образ (обязательно если вам необходим патч драйвера) для вашей целевой платформы. Если установить утилиту как пакет, то она будет запускаться при старте.
  • Установить пакет на устройство/обновить систему
  • Что дальше

    Решение состоит из двух частей: патч драйвера и другой алгоритм стримминга. Патч драйвера можно было бы включить в новую версию ядра линукса, но это спорное решение, так как оно основано на предположении о минимальном коэффициенте сжатия. Утилита же, на мой взгляд, хорошо подходит для использования на слабых системах (игрушках, домашних системах видеонаблюдения), и ее можно немного улучшить, добавив возможность задавать настройки камеры через параметры.

    Алгоритм стримминга можно улучшить так как есть запас по загрузке CPU и по ширине канала (я легко получал с роутера 50+ MBit подключая десяток клиентов). Также можно добавить поддержку звука.

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Программы для видеомонтажа для linux
  • Программы для взлома wifi для linux
  • Программы для верстки сайтов linux
  • Программы для веб дизайна linux
  • Программы для manjaro linux