Как проверить доступные веб-камеры из командной строки?

Есть ли команда терминала, в которой перечислены все веб-камеры, подключенные к моему компьютеру, включая собственную? Может быть, используя ffmpeg посылка?

v4l2-ctl --list-devices

sudo apt-get install v4l-utilsv4l2-ctl --list-devices

Пример вывода с помощью одной камеры:

Integrated Camera (usb-0000:00:1a.0-1.6):        /dev/video0

Протестировано на Ubuntu 16.04.

video1 устройство метаданных

Однако в Ubuntu 19.10 Lenovo Thinkpad P51 перечислены два таких устройства, video0 и video1, но у меня только одна камера, и я могу видеть изображения только с video0 с ffplay. Этот вопрос был задан на:

Что происходит, так это то, что /dev/video1 содержит только какие-то метаданные видео, а не изображения, как видно из:

sudo v4l2-ctl --device=/dev/video0 --allsudo v4l2-ctl --device=/dev/video1 --all

который показывает соответственно:

        Device Caps      : 0x04200001                Video Capture         Device Caps      : 0x04a00000                Metadata Capture

Как увидеть изображение с камеры в реальном времени

Мой любимый:

sudo apt install ffmpegffplay /dev/video0

enter image description here

Сделайте один снимок из командной строки

Сделайте снимок с терминала

ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -frames 1 out.jpg

Запись видео из командной строки

Параметры, выбранные на основе "Как получить параметры камеры, такие как разрешение" ниже:

ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -input_format mjpeg -i /dev/video0 -c copy out.mkv

Затем:

ffprobe out.mkv

содержит, как и ожидалось:

Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)

Если вы выберете неправильные параметры, разрешение может быть медленным. Камера уже выводит определенный кодированный формат, и самый простой способ записи - просто скопировать этот формат, как указано выше:

ЗАДАЧА, если я заменю -c copy out.mkv с out.ogv чтобы попытаться записать непосредственно в открытый формат (в отличие от MJPEG), я получил видео с низким разрешением.

Интерактивный захват изображений / видео с предварительным просмотром

Программы захвата изображений/видео

Пока я не научусь бегать ffplay предварительный просмотр в одной оболочке и одновременный захват из другой оболочки с помощью ffmpeg (они дерутся из-за видеоустройства), мне придется опуститься до этой удивительной программы с графическим интерфейсом:

sudo apt install cheese

enter image description here

Считывание данных с камеры с C/C++

https://stackoverflow.com/questions/4290834/how-to-get-a-list-of-video-capture-devices-web-cameras-on-linux-ubuntu-c

Конкретный пример C++, который обрабатывает изображения с камеры на графическом процессоре с помощью OpenGL и показывает их в реальном времени: https://stackoverflow.com/questions/13693946/image-processing-with-glsl-shaders/40641014#40641014

enter image description here

Как получить параметры камеры, такие как разрешение

v4l2-ctl --list-formats-ext

дает некоторую полезную информацию:

ioctl: VIDIOC_ENUM_FMT    Type: Video Capture    [0]: 'YUYV' (YUYV 4:2:2)        Size: Discrete 640x480            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 320x180            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 320x240            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 352x288            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 424x240            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 640x360            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 848x480            Interval: Discrete 0.050s (20.000 fps)        Size: Discrete 960x540            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 1280x720            Interval: Discrete 0.100s (10.000 fps)    [1]: 'MJPG' (Motion-JPEG, compressed)        Size: Discrete 640x480            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 320x180            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 320x240            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 352x288            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 424x240            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 640x360            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 848x480            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 960x540            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)        Size: Discrete 1280x720            Interval: Discrete 0.033s (30.000 fps)            Interval: Discrete 0.067s (15.000 fps)

Как получить соответствующие кодировки ffmpeg

v4l2-ctl --list-formats-ext дает ядру Linux название вещей, например. YUYV 4:2:2. Но делать что-то с ffmpeg, иногда вам нужно знать ffmpeg nama. Вы можете сделать это так:

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

пример вывода:

[video4linux2,v4l2 @ 0x555ba7267240] Raw       :     yuyv422 :           YUYV 4:2:2 : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720[video4linux2,v4l2 @ 0x555ba7267240] Compressed:       mjpeg :          Motion-JPEG : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720

Это, например, сказало нам, что имя ffmpeg для YUYV 4:2:2 является yuyv422.

Чтобы перечислить все видеоустройства, обнаруженные ядром

ls -ltrh /dev/video*

Чтобы перечислить все устройства, подключенные к USB, используйте lsusb ; чтобы перечислить все устройства, подключенные к PCI, используйте lspci

Для Windows вы можете использовать библиотеку pygrabber: https://github.com/bunkahle/pygrabber

Чтобы проверить удобные для пользователя имена подключенных веб-камер:

from __future__ import print_functionfrom pygrabber.dshow_graph import FilterGraphgraph = FilterGraph()print(graph.get_input_devices())

<<<<< lsusb >>>>