If you have a notebook that ships with a Nvidia GPU and you're recording screencasts or editing/encoding video, this post might be for you.
This blog post has an accompanying screencast:
I have a ThinkPad X1 Extreme Gen 2 notebook for work. The reason I bought this machine is that it has lots of power which I can make good use of when developing software. Being a higher end notebook, it did come with a Nvidia GeForce GTX 1650 GPU which is a pretty strong beast.
Having a strong GPU is not only helpful for playing games or crunching ML models, it can also be used instead of the CPU when recording a screencast or editing and encoding video. In my personal experience, my notebook likes to mimic the sound characteristics of a jet engine when doing any of these tasks. The reason is, of course, that modern CPUs have many cores, they get hot quickly, and the super slim body of higher end notebooks isn't that suitable for transporting hot air out. Using a GPU will help with that - and it will make encoding and transcoding tasks faster.
The relevant feature is called Nvidia NVENC. This feature performs video encoding, offloading this compute-intensive task from the CPU to the GPU. The encoder is supported in many streaming and recording programs, such as Open Broadcaster Software (OBS), Kdenlive and ffmpeg.
NVENC is a proprietary encoder, so it's not built-in to any of the base-installations in Debian. However, it's not that much work to get it going.
This assumes that you already have the proprietary Nvidia graphics driver running for your graphical session (X11 or Wayland). If you don't have that, yet, there are many tutorials online.
sudo apt update sudo apt install nvidia-cuda-toolkit libnvidia-encode1
Install nvidia codec APIs
cd ~/src git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git cd nv-codec-headers make sudo make install
deb-src entry to
/etc/apt/sources.lst for your primary packages.
ffmpeg source dependencies:
sudo apt update mkdir -p ~/src/ffmpeg cd ~/src/ffmpeg apt source ffmpeg sudo apt build-dep ffmpeg
debian/rules to include these
--enable-cuda-nvcc \ --enable-cuvid \ --enable-nvenc \ --enable-nonfree \ --enable-libnpp \ --extra-cflags=-I/usr/local/cuda/include \ --extra-ldflags=-L/usr/local/cuda/lib64
ffmpeg and dependencies
dpkg-buildpackage -rfakeroot -b -uc -us
ffmpeg and dependencies:
sudo dpkg -i ../*deb
Kdenlive settings (optimized for publishing to Youtube)
f=mp4 vcodec=nvenc_h264 acodec=aac ab=384k g=15 profile:v=high global_quality=21 -coder 1 vq=21 -r 29.97 preset=slow bf=2 movflags=faststart pix_fmt=yuv420p
If you liked this post and want to say 'thanks', please head over to our free/libre and open source software page - and if you like one of them, give it a star on Github or Gitlab.