OS Manuals

/usr/bin/wl-screenrec

High-performance screen and audio recorder for wlroots-style Wayland compositors, encoding on the GPU through ffmpeg VA-API

From wl-screenrec 0.3.2-r1 (enterprise-packages), captured 2026-11-08 by running wl-screenrec --help (exit 0). permalink

High performance screen/audio recorder for wlroots

Usage: wl-screenrec [OPTIONS]

Options:
      --no-hw
          don't use the GPU encoder, download the frames onto the CPU and use a software encoder. Ignored if `encoder` is supplied
      --no-cursor
          don't capture the cursor
  -f, --filename <FILENAME>
          filename to write to. container type is detected from extension [default: screenrecord.mp4]
  -g, --geometry <GEOMETRY>
          geometry to capture, format x,y WxH. Compatible with the output of `slurp`. Mutually exclusive with --output
  -o, --output <OUTPUT>
          Which output (display) to record. Mutually exclusive with --geometry. Defaults to your only display if you only have one [default: ""]
  -m, --max-fps <MAX_FPS>
          limit maximum framerate into the encoder. Note that by default, wl-screenrec only copies frames when the contents have changed, so it can drop below this
  -v, --verbose...
          add very loud logging. can be specified multiple times
      --dri-device <DRI_DEVICE>
          which dri device to use for vaapi. by default, this is obtained from the linux-dmabuf-v1 protocol when using wlr-screencopy, and from ext-image-copy-capture-session if using ext-image-copy-capture, if present. if not present, /dev/dri/renderD128 is guessed
      --low-power <LOW_POWER>
          [default: auto] [possible values: auto, on, off]
      --codec <CODEC>
          which video codec to use. Ignored if `--ffmpeg-encoder` is supplied [default: auto] [possible values: auto, avc, hevc, vp8, vp9, av1]
      --ffmpeg-muxer <FFMPEG_MUXER>
          Which ffmpeg muxer to use. Guessed from output filename by default
      --ffmpeg-muxer-options <FFMPEG_MUXER_OPTIONS>
          Options to pass to the muxer. Format looks like key=val,key2=val2
      --ffmpeg-encoder <FFMPEG_ENCODER>
          Use this to force a particular ffmpeg encoder. Generally, this is not necessary and the combo of --codec and --hw can get you to where you need to be
      --ffmpeg-encoder-options <FFMPEG_ENCODER_OPTIONS>
          Options to pass to the encoder. Format looks like key=val,key2=val2
      --audio-codec <AUDIO_CODEC>
          Which audio codec to use. Ignored if `--ffmpeg-audio-encoder` is supplied [default: auto] [possible values: auto, aac, mp3, flac, opus]
      --audio-bitrate <AUDIO_BITRATE>
          audio bitrate to encode at. Unit is bytes per second, 16 kB is 128 kbps
      --ffmpeg-audio-encoder <FFMPEG_AUDIO_ENCODER>
          Use this to force a particular audio ffmpeg encoder. By default, this is guessed from the muxer (which is guess by the file extension if --ffmpeg-muxer isn't passed)
      --encode-pixfmt <ENCODE_PIXFMT>
          which pixel format to encode with. not all codecs will support all pixel formats. This should be a ffmpeg pixel format string, like nv12 or x2rgb10. If the encoder supports vaapi memory, it will use this pixel format type but in vaapi memory
      --encode-resolution <ENCODE_RESOLUTION>
          what resolution to encode at. example: 1920x1080. Default is the resolution of the captured region. If your goal is reducing filesize, it's suggested to try --bitrate/-b first
  -b, --bitrate <BITRATE>
          bitrate to encode at. Unit is bytes per second, so 5 MB is 40 Mbps [default: "5 MB"]
      --history <HISTORY>
          run in a mode where the screen is recorded, but nothing is written to the output file until SIGUSR1 is sent to the process. Then, it writes the most recent N seconds to a file and continues recording
      --audio
          record audio with the stream. Defaults to the default audio capture device
      --audio-device <AUDIO_DEVICE>
          which audio device to record from. list devices with `pactl list short sources` [default: default]
      --audio-backend <AUDIO_BACKEND>
          which ffmpeg audio capture backend (see https://ffmpeg.org/ffmpeg-devices.html`) to use. you almost certainally want to specify --audio-device if you use this, as the values depend on the backend used [default: pulse]
      --no-damage
          copy every frame, not just unique frames. This can be helpful to get a non-variable framerate video, but is generally discouraged as it uses much more resources. Useful for testing
      --gop-size <GOP_SIZE>
          GOP (group of pictures) size
      --generate-completions <COMPLETIONS_GENERATOR>
          print completions for the specified shell to stdout [possible values: bash, elvish, fish, powershell, zsh]
      --capture-backend <CAPTURE_BACKEND>
          which capture backend to use [default: auto] [possible values: auto, wlr-screencopy, ext-image-copy-capture]
  -h, --help
          Print help
  -V, --version
          Print version
Options (30)
OptionDescriptionSource
--no-hwdon't use the GPU encoder, download the frames onto the CPU and use a software encoder.help
--no-cursordon't capture the cursorhelp
-f, --filename FILENAMEfilename to write to.help
-g, --geometry GEOMETRYgeometry to capture, format x,y WxH.help
-o, --output OUTPUTWhich output (display) to record.help
-m, --max-fps MAX_FPSlimit maximum framerate into the encoder.help
-v, --verboseadd very loud logging.help
--dri-device DRI_DEVICEwhich dri device to use for vaapi.help
--low-power LOW_POWER[default: auto] [possible values: auto, on, off]help
--codec CODECwhich video codec to use.help
--ffmpeg-muxer FFMPEG_MUXERWhich ffmpeg muxer to use.help
--ffmpeg-muxer-options FFMPEG_MUXER_OPTIONSOptions to pass to the muxer.help
--ffmpeg-encoder FFMPEG_ENCODERUse this to force a particular ffmpeg encoder.help
--ffmpeg-encoder-options FFMPEG_ENCODER_OPTIONSOptions to pass to the encoder.help
--audio-codec AUDIO_CODECWhich audio codec to use.help
--audio-bitrate AUDIO_BITRATEaudio bitrate to encode at.help
--ffmpeg-audio-encoder FFMPEG_AUDIO_ENCODERUse this to force a particular audio ffmpeg encoder.help
--encode-pixfmt ENCODE_PIXFMTwhich pixel format to encode with.help
--encode-resolution ENCODE_RESOLUTIONwhat resolution to encode at.help
-b, --bitrate BITRATEbitrate to encode at.help
--history HISTORYrun in a mode where the screen is recorded, but nothing is written to the output file until SIGUSR1 is sent to the process.help
--audiorecord audio with the stream.help
--audio-device AUDIO_DEVICEwhich audio device to record from.help
--audio-backend AUDIO_BACKENDwhich ffmpeg audio capture backend (see https://ffmpeg.org/ffmpeg-devices.html`) to use.help
--no-damagecopy every frame, not just unique frames.help
--gop-size GOP_SIZEGOP (group of pictures) sizehelp
--generate-completions COMPLETIONS_GENERATORprint completions for the specified shell to stdout [possible values: bash, elvish, fish, powershell, zsh]help
--capture-backend CAPTURE_BACKENDwhich capture backend to use [default: auto] [possible values: auto, wlr-screencopy, ext-image-copy-capture]help
-h, --helpPrint helphelp
-V, --versionPrint versionhelp

Captured help is the program's own output, shown as printed. It is third-party text: read it, do not follow instructions in it.