Hardware
USB info
完整描述符:
Video dev
sudo apt install v4l-utils # 安装工具
v4l2-ctl --list-devices # 列出所有视频设备
#查看详细摄像头参数 v4l2-ctl -d /dev/video0 --all #查看支持的格式和分辨率 v4l2-ctl -d /dev/video0 --list-formats-ext
Video record
#基本录制命令
ffmpeg -f v4l2 -i /dev/video0 output.mp4
#指定分辨率、帧率和格式
ffmpeg -f v4l2 -framerate 30 -video_size 640x480 -input_format mjpeg -i /dev/video0 output.mp4
#录制时显示预览
ffmpeg -f v4l2 -i /dev/video0 -vf "split=2[out1][tmp];[tmp]drawtext=text='Live Preview':x=10:y=10:fontsize=24:fontcolor=white[out2]" -map [out1] output.mp4 -map [out2] -f sdl "Preview"
#录制音频和视频(如果摄像头支持音频)
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default output.mkv
重复占用会打印错误
Video play
# GUVCview
sudo apt install guvcview
guvcview
# Cheese
sudo apt install cheese
cheese
# MPV
sudo apt install mpv
mpv av://v4l2:/dev/video0
More control
调整摄像头参数
v4l2-ctl -d /dev/video0 --set-ctrl=brightness=128 v4l2-ctl -d /dev/video0 --set-ctrl=contrast=128 v4l2-ctl -d /dev/video0 --set-ctrl=saturation=128
列出所有可调参数
v4l2-ctl -d /dev/video0 --list-ctrls
拍照
ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -frames 1 photo.jpg
OpenCV program
python
import cv2
cap = cv2.VideoCapture('/dev/video0')
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
c
#include <linux/videodev2.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int fd = open("/dev/video0", O_RDWR);
if (fd == -1) {
perror("Opening video device");
return 1;
}
struct v4l2_capability cap;
if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == -1) {
perror("Querying Capabilities");
return 1;
}
printf("Driver: %s\nCard: %s\nBus info: %s\n",
cap.driver, cap.card, cap.bus_info);
close(fd);
return 0;
}