Support us on Patreon to keep GamingOnLinux alive. This ensures all of our main content remains free for everyone. Just good, fresh content! Alternatively, you can donate through PayPal. You can also buy games using our partner links for GOG and Humble Store.
We do often include affiliate links to earn us some pennies. See more here.
I had been meaning to try out Nvidia's NVENC for a while, but I never really bothered as I didn't think it would make such a drastic difference in recording gaming videos, but wow does it ever!

I was trying to record a game recently and all other methods I tried made the game performance utterly dive, making it impossible to record it. So I asked for advice and eventually came to this way.

What is NVENC?
It essentially takes away video encoding from the CPU and does it on the GPU instead, and it's supported on Nvidia Kepler (600) and above.

Pairing up the awesome open source OBS Studio [Official Site] and compiling FFMPEG with support for Nvidia's NVENC is actually pretty amazing.

Note: While I have fully tested it myself, I am not responsible if you manage to break anything doing it.

After following this guide (copied below in case it vanishes, thanks Dan).

I've done a minor edit to the start, as the filename wget downloads is different to what the guide said.
Spoiler, click me
# Download and unzip the NVIDIA Video Codec SDK from https://developer.nvidia.com/nvidia-video-codec-sdk
wget https://developer.nvidia.com/video-sdk-601
unzip unzip video-sdk-601

# Copy the headers files from the SDK so FFmpeg can find them
sudo cp nvidia_video_sdk_6.0.1/Samples/common/inc/*.h /usr/local/include/

image
# Make sure "Source code" is enabled in System Settings... -> Software & Updates
# Download the build dependencies for FFmpeg
sudo apt-get build-dep ffmpeg

# Install libfdk_aac
sudo apt-get install libfdk-aac-dev

# Download the source for the exact version of FFmpeg you already have installed (not as root)
apt-get source ffmpeg

# Go into the ffmpeg source you just downloaded
cd ffmpeg-2.8.6

# Find out the exact command the ffmpeg was originally built with
ffmpeg -buildconf

# Copy the single line "configuration:" and pass it to ".configure" but add "--enable-nonfree --enable-nvenc --enable-libfdk-aac" on the end
# Mine looks like this:
./configure --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-nonfree --enable-nvenc --enable-libfdk-aac

# Now build it
make

# And finally install it over the original
sudo make install
It will take a few minutes to compile, but once that's done, you're pretty much set.

I was able to quite easily get FFMPEG sorted with NVENC and hook it into OBS Studio. I'm sure there's probably better guides (share them in the comments!), but I have yet to find one that makes it so damn simple to do. You don't even need to do much with OBS Studio, other than change the "Encoder" dropdown once this is sorted:
image

Note: You shouldn't need to re-compile OBS Studio, as the guide above uses the same version of FFMPEG as you have already.

What I love about OBS Studio, is it also has custom hotkeys you can set yourself like so:
image
I have it set so pressing "=" will start or stop recording, which is damn handy as practically no games use that button, if they do, i can simply go back and quickly change the key again.

OBS Studio also has profile support, so you can have one profile for recording and one for livestreaming, which is really useful. They ideally need to roll more of the settings into profiles, as currently the amount that's stored per-profile is limited.

I hope this will help some of you when recording or livestreaming games on Linux. Article taken from GamingOnLinux.com.
Tags: Editorial, HOWTO
3 Likes
About the author -
author picture
I am the owner of GamingOnLinux. After discovering Linux back in the days of Mandrake in 2003, I constantly came back to check on the progress of Linux until Ubuntu appeared on the scene and it helped me to really love it. You can reach me easily by emailing GamingOnLinux directly.
See more from me
The comments on this article are closed.
44 comments
Page: 1/5»
  Go to:

Ehvis Oct 27, 2016
View PC info
  • Supporter Plus
The funny thing is that the bigger streamers are actually turning off GPU encoding because software encoders give better quality. Of course, those streamers can afford multi-cpu Xeon systems to make that happen. So this is a good way to do it until you become a professional streamer. :D
Liam Dawe Oct 27, 2016
Quoting: EhvisThe funny thing is that the bigger streamers are actually turning off GPU encoding because software encoders give better quality. Of course, those streamers can afford multi-cpu Xeon systems to make that happen. So this is a good way to do it until you become a professional streamer. :D
Well, a lot of streamers use an additional PC to offload it, or dedicated capture devices. Both of which are a bit iffy under Linux with hardware support. This is a way to make it possible to get better performance will recording and playing the game on the same machine on Linux, without spending a penny.
kellerkindt Oct 27, 2016
View PC info
  • Supporter Plus
Fully automated script: https://github.com/lutris/ffmpeg-nvenc
QuoteFFmpeg + nvenc build script

This script will compile FFmpeg with Nvidia NVENC support enabled. It can also build OBS Studio or Simple Screen Recorder using that FFmpeg build thus providing NVENC for OBS and SSR.
Liam Dawe Oct 27, 2016
Quoting: kellerkindtFully automated script: https://github.com/lutris/ffmpeg-nvenc
QuoteFFmpeg + nvenc build script

This script will compile FFmpeg with Nvidia NVENC support enabled. It can also build OBS Studio or Simple Screen Recorder using that FFmpeg build thus providing NVENC for OBS and SSR.
You don't need to re-compile OBS, I sure didn't. I guess it depends on how you installed OBS originally, mine was from the official PPA, so it's possible they bake support in their official builds already.

Edit: Actually, I compiled OBS Studio myself when their PPA went out of date using their official instructions, so I really don't think you need to re-compile if you do it using the method I linked to. The reason being, this method uses the same version of FFMPEG your system has right now.


Last edited by Liam Dawe on 27 October 2016 at 7:17 pm UTC
kellerkindt Oct 27, 2016
View PC info
  • Supporter Plus
Quoting: liamdawe
Quoting: kellerkindtFully automated script: https://github.com/lutris/ffmpeg-nvenc
QuoteFFmpeg + nvenc build script

This script will compile FFmpeg with Nvidia NVENC support enabled. It can also build OBS Studio or Simple Screen Recorder using that FFmpeg build thus providing NVENC for OBS and SSR.
You don't need to re-compile OBS, I sure didn't.

Well, at least it compiles ffmpeg with NVENC with a single command :)
Liam Dawe Oct 27, 2016
Quoting: kellerkindt
Quoting: liamdawe
Quoting: kellerkindtFully automated script: https://github.com/lutris/ffmpeg-nvenc
QuoteFFmpeg + nvenc build script

This script will compile FFmpeg with Nvidia NVENC support enabled. It can also build OBS Studio or Simple Screen Recorder using that FFmpeg build thus providing NVENC for OBS and SSR.
You don't need to re-compile OBS, I sure didn't.

Well, at least it compiles ffmpeg with NVENC with a single command :)
The reason they are likely re-compiling OBS, is their way probably grabs a different version of FFMPEG to what your system is already using, where as the method I linked to and copied over, uses your same version.
[email protected] Oct 27, 2016
Troublesome. I'll try this over the weekend.
Kithop Oct 27, 2016
Yeah, just an FYI - if you're on a Debian-derivative (e.g. Ubuntu) and want proper ffmpeg packages?

apt-get source ffmpeg
tells you you should instead run:
git clone https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git

Then you just add '--enable-nonfree' and '--enable-nvenc' to the debian/rules file, and run:
debuild -us -uc -b
optionally, you can also add -j4 or -j8 for a multithreaded build

That will give you nice .deb packages in the parent directory you can just dpkg -i :) None of this clobbering system packages with manual ./configure && make && sudo make install ... that way lies pain. Lots and lots of pain.

Similarly, while their repo is out-of-date, after you've added OBS Studio's PPA, it's just:
apt-get source obs-studio
cd into folder
debuild -us -uc -b

And voila, obs-studio.deb - their other install instructions however have a bit different method, but in the end they do actually properly build and register a package in apt, so whatever, it's all good.

(and don't forget to apt-mark hold obs-studio!)
dubigrasu Oct 27, 2016
Quoting: liamdawe....Both of which are a bit iffy under Linux with hardware support.
I guess it depends on what card you're thinking about. My only experience with such cards is with a Blackmagic card that can be used both internally or externally without any performance penalties, and its software/hardware support is excellent.
Liam Dawe Oct 27, 2016
Quoting: dubigrasu
Quoting: liamdawe....Both of which are a bit iffy under Linux with hardware support.
I guess it depends on what card you're thinking about. My only experience with such cards is with a Blackmagic card that can be used both internally or externally without any performance penalties, and its software/hardware support is excellent.
Heh, I've heard the opposite, seen a fair amount of complaints about not just the experience with them on Linux, but the build quality of their cards is apparently bad.
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
The comments on this article are closed.