Go to file
2020-07-01 23:53:06 +02:00
include Add gpl license to files 2020-06-21 14:41:11 +02:00
src Use ctrl+c instead of closing window to stop recording 2020-07-01 23:53:06 +02:00
.clang-format format code 2020-03-30 17:38:55 +02:00
.gitignore first 2020-01-08 13:34:55 +01:00
interactive.sh Add interactive record script 2020-06-21 14:41:11 +02:00
LICENSE Update LICENSE 2020-03-30 21:40:41 +02:00
list-sinks.sh Add pulseaudio, parse command line args 2020-06-21 14:41:11 +02:00
project.conf Improve quality of lower resolution video, make video smoother 2020-06-21 14:41:11 +02:00
README.md Use ctrl+c instead of closing window to stop recording 2020-07-01 23:53:06 +02:00
twitch-stream.sh Add pulseaudio, parse command line args 2020-06-21 14:41:11 +02:00

gpu screen recorder

This is a screen recorder that has minimal impact on system performance by recording a window using the GPU only, similar to shadowplay on windows.

The output is an h264 encoded video with aac audio.

This project is still early in development.

Performance

When recording a 4k game, fps drops from 30 to 7 when using OBS Studio, however when using this screen recorder the fps remains at 30.

Installation

gpu screen recorder can be built using sibs or if you are running Arch Linux, then you can find it on aur under the name gpu-screen-recorder-git (yay -S gpu-screen-recorder-git).

How to use

Run interactive.sh or run gpu-screen-recorder directly, for example: gpu-screen-recorder -w 0x1c00001 -c mp4 -f 60 -a bluez_sink.00_18_09_8A_07_93.a2dp_sink.monitor > test_video.mp4
Then stop the screen recorder with Ctrl+C.

Demo

Click here to watch a demo video on youtube

Requirements

X11, Nvidia (cuda), alsa or pulseaudio

FAQ

How is this different from using OBS with nvenc?

OBS only uses the gpu for video encoding, but the window image that is encoded is sent from the GPU to the CPU and then back to the GPU. These operations are very slow and causes all of the fps drops when using OBS. OBS only uses the GPU efficiently on Windows 10 and Nvidia.
This gpu-screen-recorder keeps the window image on the GPU and sends it directly to the video encoding unit on the GPU by using CUDA. This means that CPU usage remains at around 0% when using this screen recorder.

How is this different from using FFMPEG with x11grab and nvenc?

FFMPEG only uses the GPU with CUDA when doing transcoding from an input video to an output video, and not when recording the screen when using x11grab. So FFMPEG has the same fps drop issues that OBS has.

TODO

  • Scale video when the window is rescaled.
  • Support AMD and Intel, using VAAPI. cuda and vaapi should be loaded at runtime using dlopen instead of linking to those libraries at compile-time.
  • Clean up the code!
  • Fix segfault in debug mode