如何从命令行检查可用的网络摄像头?

mar*_*oum 78 command-line webcam

是否有一个终端命令列出连接到我的计算机的所有网络摄像头,包括本机摄像头?也许使用ffmpeg包?

Cir*_*郝海东 126

v4l2-ctl --list-devices

sudo apt-get install v4l-utils
v4l2-ctl --list-devices
Run Code Online (Sandbox Code Playgroud)

单个摄像头的示例输出:

Integrated Camera (usb-0000:00:1a.0-1.6):
        /dev/video0
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 16.04 上测试。

video1 元数据设备

然而,在 Ubuntu 19.10 Lenovo Thinkpad P51 上,它列出了两个这样的设备,video0并且video1,但我只有一个摄像头,并且只能看到video0带有ffplay. 这已被问到:

发生的情况是只/dev/video1包含某种视频元数据,而不包含从以下位置可以看到的图像:

sudo v4l2-ctl --device=/dev/video0 --all
sudo v4l2-ctl --device=/dev/video1 --all
Run Code Online (Sandbox Code Playgroud)

其中分别显示:

        Device Caps      : 0x04200001
                Video Capture 

        Device Caps      : 0x04a00000
                Metadata Capture
Run Code Online (Sandbox Code Playgroud)

如何实时查看摄像机图像

我最喜欢的:

sudo apt install ffmpeg
ffplay /dev/video0
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

从命令行拍摄一张照片

从终端拍照

ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -frames 1 out.jpg
Run Code Online (Sandbox Code Playgroud)

从命令行录制视频

根据下面的“如何获取分辨率等相机参数”选择的参数:

ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -input_format mjpeg -i /dev/video0 -c copy out.mkv
Run Code Online (Sandbox Code Playgroud)

然后:

ffprobe out.mkv
Run Code Online (Sandbox Code Playgroud)

按预期包含:

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

如果您选择错误的参数,则分辨率可能会很慢。相机已经输出了一个特定的编码格式,最简单的记录方式就是复制上面的格式:

TODO如果我更换-c copy out.mkvout.ogv尝试,并直接录制到一种开放格式(MJPEG不同),我得到了一个低分辨率视频。

带预览的交互式图像/视频捕获

图片/视频采集程序

在我学会如何ffplay在一个 shell 上运行预览并同时从另一个 shell 捕获ffmpeg(他们争夺视频设备)之前,我将不得不降低自己到这个惊人的 GUI 程序:

sudo apt install cheese
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

从 C/C++ 读取相机数据

/sf/ask/300358411/

一个具体的 C++ 示例,它使用 OpenGL 在 GPU 上处理来自相机的图像并实时显示:https : //stackoverflow.com/questions/13693946/image-processing-with-glsl-shaders/40641014#40641014

在此处输入图片说明

如何获取分辨率等相机参数

v4l2-ctl --list-formats-ext
Run Code Online (Sandbox Code Playgroud)

产生一些好的信息:

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)
Run Code Online (Sandbox Code Playgroud)

如何获取对应的ffmpeg编码

v4l2-ctl --list-formats-ext给出事物的 Linux 内核名称,例如 . YUYV 4:2:2. 但是要使用ffmpeg,您有时需要了解 ffmpeg 名称。你可以这样做:

ffmpeg -f v4l2 -list_formats all -i /dev/video0
Run Code Online (Sandbox Code Playgroud)

示例输出:

[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
Run Code Online (Sandbox Code Playgroud)

例如,这告诉我们 ffmpeg 名称YUYV 4:2:2yuyv422.

  • 在 16.04.1 错误:`无法打开 /dev/video0:没有这样的文件或目录` (6认同)
  • 请注意,它说的是 4l2,而不是 412。(与其他评论无关。) (2认同)
  • 这是正确的实际答案。谢谢你。 (2认同)

小智 71

列出内核选择的所有视频设备

ls -ltrh /dev/video*
Run Code Online (Sandbox Code Playgroud)

列出所有连接到 USB 使用的设备lsusb;列出所有连接到 PCI 使用的设备lspci

  • “ls”命令中的“-ltrh”似乎有点矫枉过正,“ls -l /dev/video*”应该就足够了。-“t”按时间排序,“-r”反转排序顺序,“-h”为您提供“人类可读”的大小 - 这些在这里似乎都没有太大帮助。无害,但没有必要。 (2认同)

归档时间:

查看次数:

224123 次

最近记录:

5 年,3 月 前