Экран как камера linux

Экран как камера linux

Появилась задача: при видеосвязи по Skype показывать собеседнику не только свою физиономию, а и что-то иное: картинку с другой камеры, свой рабочий стол, какое-то изображение или видеоролик. Причем камеры очень хотелось бы переключать в ходе разговора. Иными словами, требовалось сделать что-то типа телестудии, где есть несколько источников видео, а оператор по ходу передачи их переключает.

Сам Skype такими возможностями не обладает. В настройках есть возможность выбора камеры (если их к компьютеру подключено несколько), но «на лету» из переключать нельзя: если я меняю камеру в настройках, то текущий сеанс все равно будет продолжаться с прежней камерой, а новую камеру Skype будет использовать только при следующем соединении.

(Скриншот настроек скайпа)

К счастью, в Linux есть так называемая виртуальная камера: в системе появляется новое устройство /dev/videoN (N — число, зависящее от количества уже имевшихся в системе камер), в него можно направлять различную видеоинформацию, а в настройках Skype указать именно эту виртуальную камеру как источник видеосигнала.

Управлять видео- (и аудио-) потоками в Linux можно с помощью пакетов avconv или gstreamer. Имеется также и GUI-приложение WebcamStudio. Я решил начать именно с него: оперативно управлять источниками видео все-таки удобнее в графическом режиме, чем из командной строки (даже если написать набор скриптов для нужных конфигураций).

Установка WebcamStudio

$ sudo add-apt-repository ppa:webcamstudio/webcamstudio-dailybuilds
$ sudo apt-get update
$ sudo apt-get install webcamstudio

К сожалению, установленный таким образом пакет оказался неработоспособным в Linux Mint 17.

Во-первых, при запуске выдается сообщение, что в системе не установлен драйвер виртуальной камеры (webcamstudio либо w4l2loopback). Действительно, без этого драйвера функциональность пакета ограничена: можно записывать видео в файл, но вывод на виртуальную камеру не работает ввиду ее отсутствия.

Установить драйвер можно командой

$ sudo apt-get install webcamstudio-dkms

После установки нужно подключить полученный модуль командой

Теперь сообщение об отсутствии драйвера пропало, но программа не запускалась — на короткое время возникал ее логотип, а окно программы не появлялось. Видимо, версия пакета в репозитории несовместима с Linux Mint 17.

Пришлось отключить драйвер виртуальной камеры командой

и удалить с помощью менеджера Synaptic пакеты webcamstudio и webcamstudio-dkms (отметив их для полного удаления).

Вторая попытка заключалась в установке пакетов с сайта проекта https://sourceforge.net/projects/webcamstudio/.

После установки стабильной версии из каталога Home/Binaries/Stable/Debian (Ubuntu) программа заработала, но не вполне: при попытке направить вывод на виртуальную камеру программа зависала.

Пришлось удалить установленные пакеты и попробовать бета-версии из каталога Home/Binaries/Beta/Debian (Ubuntu). У меня 64-битная система, для нее нужен пакет webcamstudio_0.73-445

ubuntu14.04_14.10_15.04_amd64.deb (для 32-битных систем предназначен пакет webcamstudio_0.73-445

ubuntu14.04_14.10_15.04_i386.deb). Драйвер виртуальной камеры универсальный: webcamstudio-dkms_0.73-445

ubuntu_all.deb. Этот вариант оказался успешным: программа заработала, вывод в виртуальную камеру зависаний не вызывал. Источники видео (две аппаратных камеры и рабочий стол) тоже нормально перенаправлялись на выход программы.

Данный вариант вызвал небольшое затруднение: программа обновления пакетов быстро обнаружила, что установленные версии webcamstudio и webcamstudio-dkms не совпадают с версиями в репозитории, и стала предлагать их обновить. Обновление, очевидно, приведет к неработоспособности программы, поэтому следует отключить ранее подключенный репозиторий ppa:webcamstudio/webcamstudio-dailybuilds с помощью команды

$ sudo add-apt-repository —remove ppa:webcamstudio/webcamstudio-dailybuilds

Сопряжение Skype с виртуальной камерой

После получения работоспособной версии WebcamStudio пришла пора подключать виртуальную камеру к Skype. И тут возник очередной неприятный сюрприз: Skype увидел в системе устройство /dev/video2 (виртуальную камеру), но картинку с нее не воспринимал: в окне просмотра была сплошная чернота.

Читайте также:  Linux mint какую версию установить

В терминале нужно ввести команду

В запустившемся текстовом редакторе ввести следующие строки:

#!/bin/bash
LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so /usr/bin/skype

(Данные строчки предназначены для 64-разрядной системы, в 32-разрядной библиотека v4l1compat.so расположена в другом каталоге, и полный путь к ней надо соответственно скорректировать.)

Сохраняем файл, закрываем редактор и делаем файл исполняемым с помощью команды

Перезапускаем Skype и вновь в его настройках выставляем виртуальную камеру. На этот раз картинка с виртуальной камеры успешно передается в Skype.

Итак, поставленная вначале задача более-менее успешно решена.

Проблема с cheese

При попытке просмотреть сигнал с виртуальной камеры через cheese обнаружилось, что cheese вообще не видит виртуальной камеры: в выпадающем списке есть только реальные камеры /dev/video0 и /dev/video1, но виртуальная камера /dev/video2 отсутствует. Причины пока непонятны.

Перспективы

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

Однако хотелось бы иметь возможность разбить выводимое изображение на области и в каждую область выводить что-то свое. Примерно так делается в системах видеонаблюдения, когда на большой экран выводится несколько картинок с разных камер, каждая в своей «клеточке».

Пока я не знаю, возможно ли сделать такое средствами WebcamStudio или потребуются какие-то внешние навески. Поэтому, возможно, «продолжение следует».

Источник

Работа с usb видеокамерой в Linux. Часть 1

По популярности видеокамера, сегодня, стоит в одном ряду с микрофоном и наушниками. Она используется в различных направлениях, таких как распознавание объектов, дополненная реальность, видеоконференции и множество других. Но что же скрыто под капотом этих сложнейших программ? Как мы получаем картинку с видеокамеры? Этот цикл статей позволит взглянуть на простоту работы с видеокамерой на низком уровне, обработку полученного изображения.

Для начала, немного информации о работе с устройствами в системе Linux. Устройства в nix системах представляют собой файл. С некоторыми файлами-устройств мы можем работать как с обычными файлами. Например:

эта команда выведет на экран весь диск sda.

Есть устройства с которыми нельзя работать напрямую, к ним относится видеокамера.При попытке это сделать мы получим такую реакцию системы:

*Где /dev/video0 это файл-устройство найшей видеокамеры.

Для работы с ней нам понадобится системная функция ioctl детальнее о ней можно ознакомится [1]. Попробуем это применить. Вот код позволяющий считать информации с устройства (альтернатива команде cat для видеоустройств):

В первых строках кода считываются параметры с которой запущено приложение. Если параметров нету то device_name принимает стандартоне значение «/dev/video0».

В блоке «Open Device» происходит открытие устройства системной функцией open (нужно подключить header fcntl.h). Обязательный параметр O_RDWR отвечает за открытие устройства считывания/записи. Если при подключении возникла ошибка, то функция open вернет -1.

Блок «Read Params From Device» — это сердце нашей маленькой программы. Для его использования надо подключить билиотеку возможно прийдется её установить, у каждого дистрибутива свой пакет под эту библиотеку
Системная функция ioctl имеет три параметра:
file_device — дескриптор нашего устройства
VIDIOC_QUERYCAP — функция ядра, которую применяем для нашего устройства.
device_params — область памяти куда будет сброшен результат функции «VIDIOC_QUERYCAP».

Читайте также:  Не включается ноутбук при обновлении до windows 10

device_params это структура состоящая из таких полей:

если возникла ошибка ioctl вернет -1

Блок «Close Device» закрывает дескриптор устройства.

Посмотрим программу в действии.

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

поле capabilities и device capabilities можно расшифровать благодаря константам из файла videodev2.h:

На этом вводная статья заканчивается. В следующих обзорах будут затронуты, такие темы как memory-mapping, виодеформаты изображения, настройка камеры, вывод изображения в текстуру, работа с несколькими камерами.

Источник

Лучшие программы для записи видео с экрана Linux

Запись видео с экрана – это не самая стандартная задача, но есть ряд пользователей, которым она очень помогает. Например, при создании уроков по программированию или ознакомительных роликов о дистрибутивах и приложениях. Также запись видео используют геймеры, чтобы сохранить яркие моменты и поделиться ими с друзьями и зрителями YouTube канала.

В Windows к этому подошли основательно и встроили программу прямо в операционную систему. С Linux ситуация обстоит похуже. В окружении рабочего стола GNOME можно вызвать запись комбинацией Ctrl + Alt + Shift + R, но по умолчанию получаются лишь короткие 30-секундные видео. Поэтому для этих целей лучше использовать отдельные программы.

Программы для записи экрана в Linux

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

Также немаловажным будет отметить то, что с аппаратным ускорением записи видео в Linux дела обстоят не лучшим образом. Лучше всего для этих целей использовать встроенную графику Intel, или дискретную Nvidia, некоторые программы способны получить преимущество от их аппаратных кодеков. А вот AMD даже в среде Windows далеко не всегда позволяет задействовать ускорение, что уж говорить про Linux. Поэтому для записи видео с экрана может потребоваться довольно производительный процессор, желательно с 4 ядрами и больше. Хотя для записи простых задач, вроде набора кода может подойти 2-ядерный процессор, в этом случае другой серьёзной нагрузки нет.

1. OBS Studio

Наиболее функциональным решением, позволяющим выполнить захват видео с экрана Linux является OBS Studio. Эта программа знакома многим пользователям не только Linux, но Windows с macOS. Она позволяет записывать видео с нескольких источников, в том числе с наложением картинки. Также возможна трансляция на все популярные платформы: YouTube, Twitch и другие.

Доступны кодеки Gstreamer, ffmpeg и x264. Что касается ffmpeg, то он путём нехитрых манипуляций способен задействовать аппаратное ускорение Nvidia NVENC. Запись звука ведётся сразу с нескольких источников и можно настроить громкость каждого по отдельности. К сожалению, плагины выполнены в формате DLL и не доступны на Linux.

Для установки OBS Studio можете воспользоваться командой:

sudo apt install obs-studio

2. SimpleScreenRecorder

Другим популярным решением является SimpleScreenRecorder (сокращённо SSR). Пусть вас не смущает название, в подборке есть и более простые утилиты. Интерфейс программы выполнен в виде нескольких страниц с уже выбранными настройками, но при желании вы можете их изменить, выбрать другой кодек, количество кадров в секунду и ряд других параметров.

Приятной особенностью программы является поддержка большого количества кодеков, в том числе с аппаратным ускорением Intel Quick Sync Video и Nvidia NVENC.

Но при выборе кодека надо быть внимательным, не все они способны обработать нестандартные разрешения. Всё дело в том, что изображение разбивается на блоки 4х4, 8×8 или 16×16. Следовательно, размер захватываемого изображения должен быть кратен этим значениям.

Читайте также:  Менеджер пакетов linux debian

Устанавливается SimpleScreenRecorder командой:

sudo apt install simplescreenrecorder

3. Vokoscreen

Vokoscreen уже не может похвастаться богатством настроек, как OBS, и количеством кодеков, как SSR, но при этом имеет всё необходимое для большинства пользователей. Есть возможность выбрать участок экрана, количество кадров, настроить кодек. К слову о кодеках, программа поддерживает аппаратное ускорение Quick Sync.

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

Установить Vokoscreen можно консольной командой:

sudo apt install vokoscreen

4. Kazam

Если вам не хочется заморачиваться с настройками, то Kazam подойдёт как нельзя лучше. Присутствует самый минимум настроек, но даже этого многим достаточно для записи видео с экрана. В качестве контейнера выбран mp4, видео записывается кодеком h.264, а звук в mp3.

Для установки Kazam используйте команду:

sudo apt install kazam

5. Peek

Программа Peek обладает ещё более простым интерфейсом, но это не мешает ей быть востребованной и популярной у пользователей. Да, она не записывает звук, такой возможности в ней нет совсем. Но если вам требуется записать участок экрана, да к тому же в формате gif, то Peek придётся как нельзя кстати. Кодировщик справляется отлично. Окна программ записываются крайне компактно, файлы зачастую занимают менее мегабайта на диске. И это при том, длительность таких gif составляет около 30 секунд. Также неплохие результаты получаются при захвате видеоряда. Цвета для 8-битной палитры gif передаются весьма достойно. Но если полученных результатов вам будет мало, то вы можете дополнительно установить кодек gifski, он подхватится автоматически и предложит наилучшую передачу цветов.

Запись видео с экрана Linux выполняется в формате mp4 или webm с кодеком h.264 или vp9 соответственно. Если звук не важен, то смело используйте Peek и для захвата видео с экрана.

Установить Peek можно командой:

Sudo apt install peek

Выводы

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

Например, ffmpeg используется несколькими программами, но может быть запущен через консоль. Вряд ли найдутся такие пользователи, которые предпочтут удобный графический интерфейс команде с кучей параметров. Причём все параметры должны быть корректными.

Если же вам надо записать именно консоль, то воспользуйтесь утилитой Asciinema. Она записывает все действия консоли в собственном текстовом формате и в дальнейшем есть возможность встроить проигрыватель на сайт. Что довольно удобно для ведения блогов о программировании.

Стороной также обошли VLC. Да в этом медиаплеере огромное количество настроек и возможностей, в плане захвата видео в том числе. Но это не значит, что им удобно пользоваться. Как минимум вам придётся обрезать готовый файл, чтобы удалить кадры с плеером. В специализированных программах для этого используется отсроченный старт.

Ещё одним вариантом могут стать расширения для браузеров. Например, Screencastify для Chrome способен записывать и транслировать видео. Но это расширение, а не отдельная программа, поэтому в список оно не вошло.

А пользуетесь ли вы программами для записи видео с экрана? Удалось ли вам найти подходящее для ваших задач решение? Расскажите об этом в комментариях.

Источник

Оцените статью