
Estou usando v4l2loopback
a v0.12.5 e wf-recorder
para gravar minha tela no wayland. Estou tentando reduzir a taxa de quadros do stream de vídeo lido pelo meu navegador. Atualmente não consigo obter nada além de 60fps.
Eu usei a versão wf-recorder 0.2.1
eeste garfopois adiciona a opção de definir a taxa de quadros. No entanto, recebo a mesma saída.
Se eu começar wf-recorder
com este comando:
wf-recorder \
-x yuv420p \
-g "$x,$y ${width}x$height" \
--muxer=v4l2 \
--codec=rawvideo \
--file="$device"
/sys/devices/virtual/video4linux/video0/format
se parece com isso:
YU12:2560x1440@30
No entanto, a saída do comando informa que a taxa de quadros é 60 e não @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)
Se eu abrir o dispositivo, ffplay
vejo que ele reporta 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
Usandowebcamtests. comRecebo ~60fps relatados.
Se eu iniciar o wf-recorder com o -r
sinalizador definido como 6
:
wf-recorder \
-x yuv420p \
-r 6 \
-g "$x,$y ${width}x$height" \
--muxer=v4l2 \
--codec=rawvideo \
--file="$device"
wf-recorder
relatórios Framerate: 6
, no entanto, /sys/devices/virtual/video4linux/video0/format
ainda mostram YU12:2560x1440@30
.
Isso me leva a acreditar que o problema não é wf-recorder
, ou melhor, que não consigo definir a taxa de quadros com essa ferramenta.
Em vez disso, procurei alterar as configurações do dispositivo. Correndo:
echo "@6"| sudo tee /sys/devices/virtual/video4linux/video0/format
Vejo o formato mudar para YU12:2560x1440@6
. No entanto, não vejo nenhuma mudança na taxa de quadros percebida.
Se eu correr:
sudo v4l2-ctl -d /dev/video0 -p 6
Vejo o formato mudar para: YU12:2560x1440@6000/1000
mas novamente não vejo nenhuma mudança na taxa de quadros percebida (ainda 60fps no meu navegador).
Não parece haver nenhuma opção para definir isso no v4l2loopback
módulo do kernel.
Estou ficando sem ideias - mais alguma coisa para tentar ou meu pobre computador está condenado a processar fluxos de vídeo de 100 Mbit para sempre? :D
Responder1
No final consegui fazer isso com outro dispositivo v4l e este comando gstreamer:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! videorate drop-only=true ! video/x-raw,framerate=6/1 ! v4l2sink device=/dev/video1
Responder2
Consegui limitar os quadros por segundo a 10 configurando-o no dispositivo v4l2loopback assim antes de iniciar o wf-recorder
.
v4l2-ctl -d /dev/video6 --set-parm 10
Reproduzir o stream ffplay /dev/video6
depois de fazer isso confirmou a configuração:
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 2560x1410, 433152 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
A saída de ajuda de v4l2-ctl
tem o seguinte sobre esta configuração:
$ 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]
...