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.mkv与out.ogv尝试,并直接录制到一种开放格式(MJPEG不同),我得到了一个低分辨率视频。
带预览的交互式图像/视频捕获
在我学会如何ffplay在一个 shell 上运行预览并同时从另一个 shell 捕获ffmpeg(他们争夺视频设备)之前,我将不得不降低自己到这个惊人的 GUI 程序:
sudo apt install cheese
Run Code Online (Sandbox Code Playgroud)
从 C/C++ 读取相机数据
一个具体的 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:2是yuyv422.
小智 71
列出内核选择的所有视频设备
ls -ltrh /dev/video*
Run Code Online (Sandbox Code Playgroud)
列出所有连接到 USB 使用的设备lsusb;列出所有连接到 PCI 使用的设备lspci
| 归档时间: |
|
| 查看次数: |
224123 次 |
| 最近记录: |