# Hardware Accelerated Decode (Nvidia) for Linux

**URL:** <https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510>\
**Category:** Feature Suggestions\
**Created:** [April 23, 2018, 10:09am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510 "2018-04-23T10:09:09Z")\
**Posts on this page:** 20\
**Page:** 4

<div class="post-metadata">

**Author:** ![xorinzor](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/xorinzor/32/171921_2.png) [@xorinzor](https://forums.plex.tv/u/xorinzor)\
**Post date:** [November 13, 2018, 2:03pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/61 "2018-11-13T14:03:11Z")

</div>

Interesting, didn’t realize that was something that could be hardware accelerated too (personally I never really saw any noteworthy CPU usage after doing what I did, so I assumed everything was HW accelerated)

---

<div class="post-metadata">

**Author:** ![aptalca](https://avatars.discourse-cdn.com/v4/letter/a/a9a28c/32.png) [@aptalca](https://forums.plex.tv/u/aptalca)\
**Post date:** [November 13, 2018, 8:14pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/63 "2018-11-13T20:14:56Z")

</div>

For h264, it’s not a big deal but h265 is pretty hard on the cpu

---

<div class="post-metadata">

**Author:** ![D34DC3N73R](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/d34dc3n73r/32/108198_2.png) [@D34DC3N73R](https://forums.plex.tv/u/D34DC3N73R)\
**Post date:** [November 13, 2018, 10:28pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/64 "2018-11-13T22:28:44Z")

</div>

It’s an issue because the plex transcoder is an outdated version of ffmpeg. They need to update it to v4+ before enabling NVDEC support. Emby uses a newer version ffmpeg which is why it doesn’t have the issue.

---

<div class="post-metadata">

**Author:** ![aptalca](https://avatars.discourse-cdn.com/v4/letter/a/a9a28c/32.png) [@aptalca](https://forums.plex.tv/u/aptalca)\
**Post date:** [November 14, 2018, 3:06am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/65 "2018-11-14T03:06:43Z")

</div>

Nvdec is new but cuvid is not. It’s been supported in ffmpeg for a long time, well over a year at least and the version plex uses supports it just fine.

If you look at the history of this page, the cuvid mention /discussion goes back over two years: [https://trac.ffmpeg.org/wiki/HWAccelIntro](https://trac.ffmpeg.org/wiki/HWAccelIntro)

---

<div class="post-metadata">

**Author:** ![D34DC3N73R](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/d34dc3n73r/32/108198_2.png) [@D34DC3N73R](https://forums.plex.tv/u/D34DC3N73R)\
**Post date:** [November 14, 2018, 5:59am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/66 "2018-11-14T05:59:51Z")

</div>

Fair point.

---

<div class="post-metadata">

**Author:** ![Mi\_Key](https://avatars.discourse-cdn.com/v4/letter/m/977dab/32.png) [@Mi\_Key](https://forums.plex.tv/u/Mi_Key)\
**Post date:** [November 16, 2018, 8:57am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/67 "2018-11-16T08:57:25Z")

</div>

this is useful to see how much GPU is being consumed.

watch -n 0.5 nvidia-smi pmon -c 1

---

<div class="post-metadata">

**Author:** ![Mi\_Key](https://avatars.discourse-cdn.com/v4/letter/m/977dab/32.png) [@Mi\_Key](https://forums.plex.tv/u/Mi_Key)\
**Post date:** [November 16, 2018, 9:55am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/68 "2018-11-16T09:55:11Z")

</div>

mostly 1080p x264 DTS transcoding down to 720p AAC 5.1/stereo  
P2000 and i7 8700

 ![image](https://global.discourse-cdn.com/plex/original/3X/d/f/df20f5eda6bf3817e4e23a5d3ec7a6b9221b6f38.png)  
 ![image](https://global.discourse-cdn.com/plex/original/3X/d/c/dce283dfbfdcfde573ea9f8def881b95bf3399f2.png)

 ![image](https://global.discourse-cdn.com/plex/original/3X/6/b/6b47a33763530964f93bfcee5fb9c2c1794ffb16.png)

---

<div class="post-metadata">

**Author:** ![carnivorouz](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/carnivorouz/32/82664_2.png) [@carnivorouz](https://forums.plex.tv/u/carnivorouz)\
**Post date:** [November 16, 2018, 1:21pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/69 "2018-11-16T13:21:46Z")

</div>

nvtop is useful as well if you haven’t already played with that.

---

<div class="post-metadata">

**Author:** ![rflagler](https://avatars.discourse-cdn.com/v4/letter/r/f475e1/32.png) [@rflagler](https://forums.plex.tv/u/rflagler)\
**Post date:** [November 16, 2018, 10:07pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/70 "2018-11-16T22:07:23Z")

</div>

Someone wrote a netdata plugin to graph GPU usage as well. For anyone interested.

> **[coraxx/netdata\_nv\_plugin](https://github.com/coraxx/netdata_nv_plugin)**
>
> NetData plugin for Nvidia GPU stats. Contribute to coraxx/netdata\_nv\_plugin development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![NiclasU](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/niclasu/32/92396_2.png) [@NiclasU](https://forums.plex.tv/u/NiclasU)\
**Post date:** [November 20, 2018, 9:20am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/71 "2018-11-20T09:20:09Z")

</div>

Did you get it working?

---

<div class="post-metadata">

**Author:** ![Ryan\_Cassidi](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/ryan_cassidi/32/101618_2.png) [@Ryan\_Cassidi](https://forums.plex.tv/u/Ryan_Cassidi)\
**Post date:** [November 24, 2018, 12:00am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/72 "2018-11-24T00:00:45Z")

</div>

I’ve been unsuccessful at compiling the repo above, after digging through a dependency hell I cant get past this on a Ubuntu 18.04 LTS Server.

```auto
LD	ffmpeg_g
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:108: recipe for target 'ffmpeg_g' failed
make: *** [ffmpeg_g] Error 1

```

anyone got the binary statically compiled yet? we could just share amongst our self until Plex devs get off their rumps and fix this low hanging fruit.

---

<div class="post-metadata">

**Author:** ![bass\_rock](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/bass_rock/32/92123_2.png) [@bass\_rock](https://forums.plex.tv/u/bass_rock)\
**Post date:** [November 24, 2018, 4:13am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/73 "2018-11-24T04:13:50Z")

</div>

@Ryan_Cassidi Can you share a docker image or what you have to get to that far in building ffmpeg? One of us may be able to help get it further.

---

<div class="post-metadata">

**Author:** ![Ryan\_Cassidi](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/ryan_cassidi/32/101618_2.png) [@Ryan\_Cassidi](https://forums.plex.tv/u/Ryan_Cassidi)\
**Post date:** [November 24, 2018, 5:27am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/74 "2018-11-24T05:27:24Z")

</div>

digging through bash history this is wha I got:

```auto
apt-get install libx264-dev libx265-dev libswscale-dev nvidia-cuda-dev yasm libnuma-dev libmp3lame-dev git libopus-dev pkg-config
mkdir ~/dev
cd ~/dev
git clone https://github.com/FFmpeg/nv-codec-headers.git
cd nv-codec-headers/
git checkout sdk/8.1
sudo make install PREFIX=/usr
cd ~/dev
git clone https://github.com/galli-leo/FFmpeg.git
cd FFmpeg/
git checkout plex-changes
./configure --disable-bzlib --disable-ffplay --disable-ffprobe --disable-avdevice --disable-schannel --disable-linux-perf --disable-mediacodec --disable-debug --disable-doc --enable-muxers --enable-gpl --enable-version3 --enable-eae --disable-encoders --disable-decoders --disable-hwaccels --enable-libass --disable-devices --disable-lzma --disable-iconv --disable-protocol=concat --enable-libvorbis --enable-libopus --external-decoder=h264 --disable-bsfs --enable-bsf='aac_adtstoasc,extract_extradata,dca_core,h264_mp4toannexb,hevc_mp4toannexb,vp9_superframe,vp9_superframe_split,framedrop' --enable-decoder=png --enable-decoder=apng --enable-decoder=bmp --enable-decoder=mjpeg --enable-decoder=thp --enable-decoder=gif --enable-decoder=dirac --enable-decoder=ffv1 --enable-decoder=ffvhuff --enable-decoder=huffyuv --enable-decoder=rawvideo --enable-decoder=zero12v --enable-decoder=ayuv --enable-decoder=r210 --enable-decoder=v210 --enable-decoder=v210x --enable-decoder=v308 --enable-decoder=v408 --enable-decoder=v410 --enable-decoder=y41p --enable-decoder=yuv4 --enable-decoder=ansi --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis --enable-decoder=opus --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-decoder=ass --enable-decoder=dvbsub --enable-decoder=dvdsub --enable-decoder=ccaption --enable-decoder=pgssub --enable-decoder=jacosub --enable-decoder=microdvd --enable-decoder=movtext --enable-decoder=mpl2 --enable-decoder=pjs --enable-decoder=realtext --enable-decoder=sami --enable-decoder=ssa --enable-decoder=stl --enable-decoder=subrip --enable-decoder=subviewer --enable-decoder=text --enable-decoder=vplayer --enable-decoder=webvtt --enable-decoder=xsub --enable-decoder=eac3_eae --enable-decoder=truehd_eae --enable-decoder=mlp_eae --enable-encoder=flac --enable-encoder=alac --enable-encoder=libvorbis --enable-encoder=libopus --enable-encoder=mjpeg --enable-encoder=wrapped_avframe --enable-encoder=ass --enable-encoder=dvbsub --enable-encoder=dvdsub --enable-encoder=movtext --enable-encoder=ssa --enable-encoder=subrip --enable-encoder=text --enable-encoder=webvtt --enable-encoder=xsub --enable-encoder=pcm_f32be --enable-encoder=pcm_f32le --enable-encoder=pcm_f64be --enable-encoder=pcm_f64le --enable-encoder=pcm_s8 --enable-encoder=pcm_s8_planar --enable-encoder=pcm_s16be --enable-encoder=pcm_s16be_planar --enable-encoder=pcm_s16le --enable-encoder=pcm_s16le_planar --enable-encoder=pcm_s24be --enable-encoder=pcm_s24le --enable-encoder=pcm_s24le_planar --enable-encoder=pcm_s32be --enable-encoder=pcm_s32le --enable-encoder=pcm_s32le_planar --enable-encoder=pcm_u8 --enable-encoder=pcm_u16be --enable-encoder=pcm_u16le --enable-encoder=pcm_u24be --enable-encoder=pcm_u24le --enable-encoder=pcm_u32be --enable-encoder=pcm_u32le --enable-encoder=h264_vaapi --enable-encoder=hevc_vaapi --enable-encoder=h264_nvenc --enable-encoder=eac3_eae --arch=x86_64 --enable-nvenc --enable-nvdec
ulimit -s 65536
make -j <cpu cores>

```

---

<div class="post-metadata">

**Author:** ![abecx](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/abecx/32/88489_2.png) [@abecx](https://forums.plex.tv/u/abecx)\
**Post date:** [November 24, 2018, 8:03am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/75 "2018-11-24T08:03:04Z")

</div>

If it helps, this is the specific command that is failing during the make process.

```auto
gcc -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,--gc-sections -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample -o ffmpeg_g 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

```

---

<div class="post-metadata">

**Author:** ![bass\_rock](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/bass_rock/32/92123_2.png) [@bass\_rock](https://forums.plex.tv/u/bass_rock)\
**Post date:** [November 24, 2018, 10:25pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/76 "2018-11-24T22:25:40Z")

</div>

I started a repo here with A docker-compose setup that has the necessary dependencies. When I trya nd use the build.py in the repo I end up getting a segmentation fault. [https://github.com/bassrock/FFmpeg/tree/plex-changes-docker](https://github.com/bassrock/FFmpeg/tree/plex-changes-docker) Feel free to PR and help get it working!

---

<div class="post-metadata">

**Author:** ![Vchat20](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/vchat20/32/102083_2.png) [@Vchat20](https://forums.plex.tv/u/Vchat20)\
**Post date:** [November 25, 2018, 2:27am UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/77 "2018-11-25T02:27:38Z")

</div>

So regard to two comments posted here:

1. The thought of having Intel QSV doing decode and Nvidia doing encode or vice-a-versa I believe one of the Plex devs mentioned either in this very thread or elsewhere that it was due to not being a direct pipeline staying on the same GPU memory and maintaining high bandwidth. Having to move across the PCIe bus, through the CPU and memory controller therein for the iGPU is going to have vastly reduced bandwidth during this entire transcode process. Now how much of that is going to be a significant issue for basic video transcoding I have no idea and don’t have numbers to go by.

2. Why using Intel for both is an issue is that you need to have I think either a Skylake or better processor to do 10 bit, HEVC, 4k, or a combination thereof. So if you have even a Haswell family chip, working with 4k HEVC decode is out of the question. Upgrading means pretty much scrapping the entire system when you need a new motherboard, CPU, ram, etc… MUCH cheaper to throw in even a cheap Geforce 950 (which I have and can do 4k HEVC) or 1050.

---

<div class="post-metadata">

**Author:** ![abecx](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/abecx/32/88489_2.png) [@abecx](https://forums.plex.tv/u/abecx)\
**Post date:** [November 25, 2018, 7:53pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/78 "2018-11-25T19:53:54Z")

</div>

Instead of using the source code from GitHub that was provided in this post, I looked at the license file and used the download link for my current version of Plex.

licenseFile: /usr/lib/plexmediaserver/Resources/LICENSE  
transcoderSource: [http://downloads.plex.tv/ffmpeg-source/ffmpeg-2018-03-22.tar.gz](http://downloads.plex.tv/ffmpeg-source/ffmpeg-2018-03-22.tar.gz)

I was able to compile in --enable-decoder=h264\_cuvid into that version with ease.

I have not tested it as a replacement yet, but will do so later tonight.

---

<div class="post-metadata">

**Author:** ![NiclasU](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/niclasu/32/92396_2.png) [@NiclasU](https://forums.plex.tv/u/NiclasU)\
**Post date:** [November 25, 2018, 11:03pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/79 "2018-11-25T23:03:40Z")

</div>

Please update! 🤩 🙌🏼

---

<div class="post-metadata">

**Author:** ![tomyun](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/tomyun/32/82042_2.png) [@tomyun](https://forums.plex.tv/u/tomyun)\
**Post date:** [November 26, 2018, 7:02pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/81 "2018-11-26T19:02:17Z")

</div>

FYI, more recent source can be found here:

> [@Latest source code for Plex Transcoder](https://forums.plex.tv/t/latest-source-code-for-plex-transcoder/324039/5):
>
> Download link is: [https://files.plexapp.com/elan/ffmpeg/plex-ffmpeg-2018-10-31.tar.xz](https://files.plexapp.com/elan/ffmpeg/plex-ffmpeg-2018-10-31.tar.xz)

---

<div class="post-metadata">

**Author:** ![abecx](https://sea1.discourse-cdn.com/plex/user_avatar/forums.plex.tv/abecx/32/88489_2.png) [@abecx](https://forums.plex.tv/u/abecx)\
**Post date:** [November 26, 2018, 7:54pm UTC](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510/82 "2018-11-26T19:54:51Z")

</div>

How do I get plex to call the Plex Transcoder with the appropriate options? Even with cuvid compiled in, it wont use it since Plex Transcoder is being asked to use software h264 decoder specifically.

Would I need to write a wrapper to adjust the settings, or is there something I am missing?

[Previous page](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510.md?page=3)

[Next page](https://forums.plex.tv/t/hardware-accelerated-decode-nvidia-for-linux/233510.md?page=5)
