
Я использую v4l2loopback
v0.12.5 и wf-recorder
записываю свой экран на wayland. Я хочу уменьшить частоту кадров видеопотока, считываемого моим браузером. В настоящее время я не могу получить ничего, кроме 60 кадров в секунду.
Я использовал версию wf-recorder 0.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
увижу, что оно сообщает о 30 кадрах в секунду:
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Я получаю сообщение о ~60 кадрах в секунду.
Если вместо этого я запущу wf-recorder с флагом, -r
установленным на 6
:
wf-recorder \
-x yuv420p \
-r 6 \
-g "$x,$y ${width}x$height" \
--muxer=v4l2 \
--codec=rawvideo \
--file="$device"
wf-recorder
Framerate: 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
но снова не вижу никаких изменений в воспринимаемой частоте кадров (в моем браузере по-прежнему 60 кадров в секунду).
Похоже, что в модуле ядра нет никаких опций для настройки этого параметра v4l2loopback
.
У меня заканчиваются идеи — что еще попробовать или мой бедный компьютер обречен вечно обрабатывать 100-мегабитные видеопотоки? :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
Мне удалось ограничить количество кадров в секунду до 10, установив его на устройстве v4l2loopback перед запуском 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]
...