ffmpeg 在奶酪以 20 fps 的速度记录的设备上每秒记录 5 帧
ffmpeg records 5 frames per second on a device that cheese records at 20 fps
运行 以下 ffmpeg
在我的内置网络摄像头上捕获:
ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 -i /dev/video0 output.mkv
我只有 5 fps 并看到这条消息:
The driver changed the time per frame from 1/30 to 1/5
当我使用 cheese 录制时,我在该设备上获得了 20 fps 的帧率。 v4l2
似乎声称它可以达到 30 fps。
v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1920x1080
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
当我运行 ffmpeg:
Output #0, mjpeg, to 'output.mjpg':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: mjpeg, yuvj422p(pc), 1920x1080, q=2-31, 200 kb/s, 5 fps, 5 tbn, 5 tbc
Metadata:
encoder : Lavc56.60.100 mjpeg
我猜它是从设备以原始格式录制并在 ffmpeg 中进行编码。如果这是正确的,我如何让 ffmpeg 使用 mjpeg 本机格式?
我需要以我的网络摄像头支持的原生压缩运动 jpeg 格式进行录制。一旦我配置好(见下文),它就会以 30 fps 的全分辨率记录。
ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 -c:v mjpeg -i /dev/video0 -c:v copy output.mov
请注意 -i
(输入)之前的 -c:v
(视频编解码器)表示设备应使用的录制编解码器(我的网络摄像头本身支持 mjpeg),-c:v
(视频编解码器)在 -i
(输入)之后表示 ffmpeg 应该转换成什么录制编解码器。 copy
不会更改编解码器,它只是复制设备提供的字节。
运行 以下 ffmpeg
在我的内置网络摄像头上捕获:
ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 -i /dev/video0 output.mkv
我只有 5 fps 并看到这条消息:
The driver changed the time per frame from 1/30 to 1/5
当我使用 cheese 录制时,我在该设备上获得了 20 fps 的帧率。 v4l2
似乎声称它可以达到 30 fps。
v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1920x1080
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
当我运行 ffmpeg:
Output #0, mjpeg, to 'output.mjpg':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: mjpeg, yuvj422p(pc), 1920x1080, q=2-31, 200 kb/s, 5 fps, 5 tbn, 5 tbc
Metadata:
encoder : Lavc56.60.100 mjpeg
我猜它是从设备以原始格式录制并在 ffmpeg 中进行编码。如果这是正确的,我如何让 ffmpeg 使用 mjpeg 本机格式?
我需要以我的网络摄像头支持的原生压缩运动 jpeg 格式进行录制。一旦我配置好(见下文),它就会以 30 fps 的全分辨率记录。
ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 -c:v mjpeg -i /dev/video0 -c:v copy output.mov
请注意 -i
(输入)之前的 -c:v
(视频编解码器)表示设备应使用的录制编解码器(我的网络摄像头本身支持 mjpeg),-c:v
(视频编解码器)在 -i
(输入)之后表示 ffmpeg 应该转换成什么录制编解码器。 copy
不会更改编解码器,它只是复制设备提供的字节。