設定 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]
...

相關內容