设置 v4l2 设备的输出帧率

设置 v4l2 设备的输出帧率

我正在使用v4l2loopbackv0.12.5 并wf-recorder在 wayland 上录制我的屏幕。我希望降低浏览器读取的视频流的帧速率。目前我无法获得除 60fps 之外的任何内容。

我使用过版本 wf-recorder0.2.1这把叉子因为它添加了设置帧速率的选项。但是,我得到相同的输出。

如果我wf-recorder从这个命令开始:

wf-recorder \
        -x yuv420p \
        -g "$x,$y ${width}x$height" \
        --muxer=v4l2 \
        --codec=rawvideo \
        --file="$device"

/sys/devices/virtual/video4linux/video0/format看起来像这样:

YU12:2560x1440@30

然而,命令输出报告帧率为 60 而不是 @30:

selected region 0 0 2560 1440
Framerate: 60
Choosing pixel format yuv420p
Output #0, video4linux2,v4l2, to '/dev/video0':
    Stream #0:0: Unknown: none (rawvideo)

如果我打开设备,ffplay我会看到它报告 30fps:

Input #0, video4linux2,v4l2, from '/dev/video0':B sq=    0B f=0/0
  Duration: N/A, start: 1102.869115, bitrate: 1327104 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 2560x1440, 1327104 kb/s, 30 fps

使用webcamtests.com我收到~60fps 的报告。

如果我启动 wf-recorder 并将-r标志设置为6

wf-recorder \
        -x yuv420p \
        -r 6 \
        -g "$x,$y ${width}x$height" \
        --muxer=v4l2 \
        --codec=rawvideo \
        --file="$device"

wf-recorderFramerate: 6然而报道/sys/devices/virtual/video4linux/video0/format仍然显示YU12:2560x1440@30

这让我相信问题不在于wf-recorder,或者更确切地说,我无法使用该工具设置帧速率。

相反,我希望更改设备上的设置。跑步:

echo "@6"| sudo tee /sys/devices/virtual/video4linux/video0/format

我看到格式更改为YU12:2560x1440@6.然而,我认为感知的帧速率没有变化。

如果我运行:

sudo v4l2-ctl -d /dev/video0 -p 6

我看到格式更改为:YU12:2560x1440@6000/1000但我再次看到感知帧速率没有变化(在我的浏览器中仍然是 60fps)。

内核模块上似乎没有为此设置任何选项v4l2loopback

我已经没有主意了 - 还有什么可以尝试的,或者我那台可怜的计算机注定只能永远处理 100Mbit 视频流吗? :D

答案1

最后我能够使用另一个 v4l 设备和这个 gstreamer 命令来做到这一点:

gst-launch-1.0 -v v4l2src device=/dev/video0 ! videorate drop-only=true ! video/x-raw,framerate=6/1 ! v4l2sink device=/dev/video1

答案2

在启动之前,我可以通过在 v4l2loopback 设备上设置它来将每秒帧数限制为 10 wf-recorder

v4l2-ctl -d /dev/video6 --set-parm 10

执行此操作后播放流ffplay /dev/video6确认了设置:

Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 2560x1410, 433152 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc

关于此设置的帮助输出v4l2-ctl如下:

$ v4l2-ctl --help-all
...
  -P, --get-parm     display video parameters [VIDIOC_G_PARM]
  -p, --set-parm <fps>
                     set video framerate in <fps> [VIDIOC_S_PARM]
...

相关内容