В Linux это необходимо. Полагаю, через ffmpeg или аналогичное решение, чтобы принять видеовход, объединить его с графическим изображением и вывести видео на конкретный монитор?

Вопрос или проблема

В Linux нужно. Я думаю, что с помощью ffmpeg или аналогичного решения можно принимать видео вход, объединять с графическим изображением и выводить видео на конкретный монитор? Это позволит отображать информационный баннер поверх live-видеопотока. Графика, конечно, будет в основном с прозрачным фоном.

Смотря на примеры ffmpeg, это можно сделать с существующими видеофайлами, но ffmpeg должен принимать live-видео как входные данные, так и генерируемый результат как выходное видео, не так ли?

Моя система Linux определенно видит подключенную камеру…

# v4l2-ctl --list-devices
USB Video: USB Video (usb-0000:01:00.0-1.1):
        /dev/video0
        /dev/video1
        /dev/media0

Но я, похоже, не могу получить правильную конфигурацию, чтобы прочитать видеоданные?

~# ffmpeg -f v4l2 -list_formats all -i /dev/video1
ffmpeg version 7.0.2-3ubuntu1 Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 14 (Ubuntu 14.2.0-2ubuntu1)
  configuration: --prefix=/usr --extra-version=3ubuntu1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping -                                                                                       -disable-libmfx --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-l                                                                                       ibfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus                                                                                        --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-l                                                                                       ibwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --disable-libvpl --enable-libdc1394 --enable-libdrm --enable-                                                                                       libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-libjack --enable-libpulse --enable-librabbitmq --en                                                                                       able-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx                                                                                        --enable-librsvg --enable-libjxl --enable-shared
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
[video4linux2,v4l2 @ 0xaaaac16cea80] ioctl(VIDIOC_G_INPUT): Неподходящий ioctl для устройства
[in#0 @ 0xaaaac169ea60] Ошибка открытия входного устройства: Неподходящий ioctl для устройства
Ошибка открытия файла входа /dev/video1.
Ошибка открытия входных файлов: Неподходящий ioctl для устройства

Чтобы протестировать оборудование, я установил OBS (Open Broadcast System) Studio. OBS может нормально видеть вход с камеры, он определяет, что вход с камеры установлен на 1080p60.

Ответ или решение

Чтобы решить задачу наложения графического изображения на живое видео с использованием FFmpeg на Linux, необходимо учесть несколько аспектов, таких как корректная настройка захвата видеопотока с вашего устройства, наложение изображения и вывод на определенный монитор. Давайте рассмотрим это подробно.

1. Проверка наличия устройства видеоввода

Вы уже подтвердили, что ваша система видит веб-камеру с помощью команды v4l2-ctl --list-devices. Убедитесь, что вы используете правильное устройство при захвате видео. Из вашего вывода видно, что устройства /dev/video0 и /dev/video1 доступны. Попробуйте оба устройства, чтобы выяснить, какое из них является вашим источником видео.

2. Параметры захвата видео

Используя FFmpeg, можно проверить доступные форматы видео с помощью команды:

ffmpeg -f v4l2 -list_formats all -i /dev/video0

Если вы получите ошибку Inappropriate ioctl for device, попробуйте другое устройство, например, /dev/video1.

3. Наложение графического изображения

Чтобы наложить изображение с прозрачным фоном на видео, нужно использовать фильтры FFmpeg. Например:

ffmpeg -f v4l2 -i /dev/video0 -i overlay.png -filter_complex "overlay=x=10:y=10" -f x11grab :0.0

В этом примере:

  • -i /dev/video0 указывает источник живого видео.
  • -i overlay.png задает изображение с прозрачным фоном.
  • overlay=x=10:y=10 помещает изображение на координаты (10, 10) относительно видео.
  • -f x11grab :0.0 указывает вывод на конкретный монитор (в данном случае – это X-сервер).

4. Установка нужных зависимостей

Если у вас возникли проблемы с использованием FFmpeg, убедитесь, что у вас установлена последняя версия и все необходимые библиотеки:

sudo apt update
sudo apt install ffmpeg

5. Вывод на конкретный монитор

Для указания конкретного монитора можно использовать xrandr для определения доступных мониторов. После этого, в командной строке, укажите нужный вывод, например:

ffmpeg -f v4l2 -i /dev/video0 -i overlay.png -filter_complex "overlay=x=10:y=10" -f x11grab -s 1920x1080 -r 30 -i :0.0 

6. Проверка ошибок

Если возникают ошибки при запуске команды, проверьте следующее:

  • Существуют ли права доступа к устройству видеозахвата (/dev/video*).
  • Подходит ли кодек для вашего видео. При необходимости попробуйте изменить кодек на libx264 или h264 в выходном файле.
  • Используйте флаг -loglevel debug для подробного журнала ошибок.

Заключение

Используя вышеуказанные шаги, вы сможете наложить графическое изображение на живое видео и вывести его на определенный монитор в Linux с помощью FFmpeg. Это обеспечит вам возможность отображения информационных баннеров поверх видеопотока. Если у вас по-прежнему остаются проблемы, рассмотрите возможность использования других инструментов, таких как OBS, которые могут упростить процесс наложения изображений на видео.

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

Капча загружается...