使用ffmpeg录制V4L2摄像头流报错Inappropriate ioctl for device求助
问题原因
导致录制失败的核心原因如下:
- 设备号不匹配:你通过v4l2查询参数的摄像头设备是/dev/video1,但实际录制命令中使用的是/dev/video0,需先确认你要使用的摄像头对应的正确设备节点
- 未指定输入像素格式:你的摄像头输出为RG12格式的原始拜耳数据,ffmpeg默认自动识别为YUY2格式,格式不匹配导致无法正常读取帧数据
- 缺少解拜耳处理:RG12是未经过ISP处理的原始拜耳数据,无法直接编码为常规视频格式,需要先经过解拜耳处理转换为YUV/RGB格式
- 帧率识别异常:日志中显示ffmpeg识别到了1000k的错误帧率,导致x264编码参数超限,无法正常写入帧
解决方法
使用如下命令进行录制,注意将/dev/video1替换为你实际的摄像头设备节点:
ffmpeg -f v4l2 -input_format rg12 -framerate 30 -video_size 1920x1080 -i /dev/video1 -filter:v bayer=rggb:12 -c:v libx264 -crf 23 -r 30 output.mkv
参数说明
-input_format rg12:明确指定v4l2输入的像素格式为RG12,避免ffmpeg自动识别错误-filter:v bayer=rggb:12:调用解拜耳滤镜,将你的摄像头输出的RGGB排布12位拜耳数据转换为可编码的常规像素格式-r 30:强制输出帧率为30,规避帧率识别错误导致的编码异常
额外排查建议
如果执行命令后仍无法正常录制,可先执行如下命令确认设备参数是否匹配:v4l2-ctl -d /dev/videoX --list-formats-ext
将/dev/videoX替换为你要使用的设备节点,确认输出中存在RG12格式的1920x1080@30fps配置。
内容的提问来源于stack exchange,提问作者Otter_warrior
相关产品推荐
相关产品推荐

