代码之家  ›  专栏  ›  技术社区  ›  David Parks

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

  •  4
  • David Parks  · 技术社区  · 7 年前

    ffmpeg 在我的内置网络摄像头上拍摄:

    ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 -i /dev/video0 output.mkv
    

    我只获得5帧/秒,并看到以下消息:

    The driver changed the time per frame from 1/30 to 1/5
    

    当我用奶酪录制时,我在那个设备上得到了20帧/秒的效果。和 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)
    

    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本机格式?

    1 回复  |  直到 7 年前
        1
  •  3
  •   David Parks    7 年前

    我需要用我的网络摄像头支持的本地压缩运动jpeg格式录制。一旦我得到了配置(见下文),它记录在30 fps的全分辨率。

    ffmpeg -f v4l2 -framerate 30 -video_size 1920x1080 -c:v mjpeg -i /dev/video0 -c:v copy output.mov
    

    注意 -c:v -i -c: 五、 (输入)指示录制编解码器ffmpeg应转换为什么。 copy