Skip to content

Hardware Transcoding with Nvidia NVENC

Transcoding video by using NVIDIA Nvenc

Flussonic Media Server supports hardware video transcoding using the GPU on NVIDIA graphics cards. The list of supported cards can be found at NVIDIA website.

This feature requires the installed Nvidia driver of version 400 or higher.


The Flussonic transcoder can process 10-bit H.265 (HEVC) streams if you use Nvidia NVENC.

Installing the driver

Install the driver from the package:

Ubuntu 18.04:

apt-get install nvidia-410

Make sure the non-free component is enabled in sources.list.

Official Nvidia driver downloads can be found on the Nvidia website. For help installing the drivers on Ubuntu, you may refer to the Ubuntu Knowledge Base.

To work with a lot of transcoder processes (more than 40), you'll need to increase the operating system's limit on open files. To do this, run the ulimit command:

ulimit -n 4096

And add the following lines to the /etc/security/limits.conf file:

* hard nofile 4096
* hard nofile 4096

Enabling the transcoder

There are two ways to set up transcoding:

  • In a stream's configuration entry, using the transcoder directive with various options.
  • In the Web UI, under Media > choose a stream > Transcoder.

In both cases, you should add the hw=nvenc option to enable NVENC transcoding:

transcoder vb=2048k hw=nvenc ab=128k

Selecting a codec

The default codec is H.264. When using NVIDIA NVENC, you can also use H.265 (HEVC):

transcoder vb=2048k hw=nvenc vcodec=hevc ab=128k

The support for 10-bit color streams

If you use NVIDIA NVENC, the Flussonic transcoder can process 10-bit HEVC streams. Use the pix_fmt option and specify the required pixel format.

The following conversions (input -> output) are possible:

  • 10-bit HEVC -> 8-bit HEVC
vb=3000k vcodec=hevc pix_fmt=yuv420p ab=128k
  • 10-bit HEVC -> 8-bit H.264
vb=3000k pix_fmt=yuv420p ab=128k
  • 10-bit HEVC -> 10-bit HEVC
vb=3000k vcodec=hevc ab=128k
  • 8-bit HEVC или H.264 -> 10-bit HEVC
vb=3000k vcodec=hevc pix_fmt=yuv420p10 ab=128k

Make sure that you have an up-to-date version of the NVIDIA drivers — 400 or higher. An Ubuntu version of at least 18.04 is also required.

Selecting the graphics card

If the system has multiple graphics cards, you can choose which one to use with the deviceid=N option:

transcoder vb=2048k hw=nvenc deviceid=2 ab=128k

The number of the card can be retrieved with the Linux console command nvidia-smi.

By default, the first graphics card is used: deviceid=0.

Cropping video

The option crop=left:right:width:height allows you to crop video:

transcoder vb=2048k hw=nvenc crop=0:0:100:100 ab=128

Decoding on the CPU

Decoding and encoding is performed on the GPU by default. To use the CPU for decoding, specify hw=nvenc2 instead of hw=nvenc:

transcoder vb=2048k hw=nvenc2 ab=128k


Deinterlacing is enabled by default when using nvenc. Additionally, you can specify a certain method with the deinterlace option. For example, add deinterlace=yadif to apply the CUDA yadif method when transcoding a stream:

stream test {
   url file://vod/test.ts;
   transcoder vb=4000k ab=128k deinterlace=yadif hw=nvenc;

All methods that you can use on NVIDIA Nvenc can be found in the UI in transcoder settings for a stream, in Deinterlace mode.

When using nvenc2 (using the CPU to decode), deinterlacing has to be turned on explicitly with the deinterlace=yes option.

To disable resource-consuming deinterlacing, specify deinterlace=0 in the transcoding settings.

Other parameters, such as size, preset, bframes, level are used in the same manner as the CPU transcoder options.

The preset parameter can have one of these values: veryfast, medium, slow.

Statistics on Nvidia performance

You can collect statistics on the operation of Nvidia GPU if you enable saving statistics in the Pulse database. To start saving data, add the following directive to the Flussonic configuration file:

nvidia_monitor true;

To stop saving statistics on Nvidia, update the configuration file:

nvidia_monitor false;

To view the data in a graph, create a query to the Pulse database and run it in the administrator interface in Pulse. (In the Custom query field.)

The following metrics may be used (temperature metrics might not be supported by the graphics card):

  • gpu_pwr — Power usage (in Watts)
  • gpu_temp — GPU temperature (in degrees Celsius)
  • gpu_sm — SM (streaming multiprocessor) utilization in %
  • gpu_mem — Memory utilization in %
  • gpu_enc — Encoder utilization in %
  • gpu_dec — Decoder utilization in %
  • gpu_usedmem — Used video memory, in bytes or kilobytes.

Query example:


Other metrics:

  • gpu_mclk, gpu_pclk — Memory and processor clocks (in MHz)
  • gpu_pviol, gpu_tviol — Power overdraw (in %) and thermal overdraw (as a boolean value)
  • gpu_fb, gpu_bar1 — Frame buffer and Bar1 memory usage (in MB)
  • gpu_sbecc, gpu_dbecc — ECC (number of aggregated single bit, double bit ECC errors) and PCIe replay errors
  • gpu_pci, gpu_rxpci, gpu_txpci — PCIe Rx and Tx throughput in MB/s (Maxwell and above).