ffmpeg在cheese以每秒20帧的速度记录的设备上每秒记录5帧

ffmpeg在cheese以每秒20帧的速度记录的设备上每秒记录5帧,ffmpeg,video-capture,Ffmpeg,Video Capture,在我的内置网络摄像头上运行以下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 当我用奶酪录音时,我在那台设备上得到了20 fps的速度。而且v4l2似乎声称它可以每秒30帧 v4l2-ctl --list-formats-

在我的内置网络摄像头上运行以下
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
当我用奶酪录音时,我在那台设备上得到了20 fps的速度。而且
v4l2
似乎声称它可以每秒30帧

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),而
-i
(输入)之后的
-c:v
(视频编解码器)指示录制编解码器ffmpeg应转换为什么<代码>复制不会更改编解码器,它只会复制设备提供的字节。

如果在一台计算机上,请尝试使用值为3或4的“线程”开关PC@RobertRowntree这个数字取决于您的CPU拥有的内核数量,您不应该在没有这样解释的情况下推荐任意数字。您正在对输入进行转码。在
output.mov
之前添加
-c copy
,以避免出现这种情况。谢谢,我确实发现了困难的方法。我更新了答案。感谢您的评论。
copy使用的编解码器与输入提供的编解码器相同。
-->否。
copy
,正如它所说的,复制流数据包。如果你把
-c:v mjpeg
也放在它的位置上,那也会是同一个编解码器,但会发生转码。谢谢你指出了这些废话,这就是我的意思,但英语比bash脚本还要难懂。:)更新。