v4l2 장치의 출력 프레임 속도 설정

v4l2 장치의 출력 프레임 속도 설정

저는 v4l2loopbackv0.12.5를 사용하고 있으며 wf-recorderwayland에서 화면을 녹화하고 있습니다. 브라우저에서 읽는 비디오 스트림의 프레임 속도를 줄이고 싶습니다. 현재는 60fps 외에는 아무것도 얻을 수 없습니다.

나는 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

그러나 명령 출력에서는 @30 대신 60의 프레임 속도를 보고합니다.

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)

장치를 켜면 ffplay30fps가 보고되는 것을 볼 수 있습니다.

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 비디오 스트림만 처리할 운명인가요? :디

답변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]
...

관련 정보