Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Is Hardware Transcoding Worth the Effort?

Featured Replies

I have an unraid 7.0 server, i5-2600k, 32gb 1600mhz ram, 15 drives on an ASUS P8Z77 VLK mobo. I have the Limetech Plex Docker in place. I have an Intel P2000 GPU.  I'm trying to keep the costs down and keep this decades old system running as long as possible.  I have 5000 movies and 22000 TV shows on my system plus music. The i5 struggles to keep up with transcoding when remote users access movies. So a few questions...

 

1. I know that plex prefers direct play but also supports hardware transcoding. Will the P2000 work with this config and accomplish what I thought it would?  

2. Are there any guides/instructions on how to install the P2000 with Unraid & Plex?

 

Should I (*sigh*) just spring for more Mobo, CPU and Memory?  What would be a cost effective upgrade?

Solved by MowMdown

7 minutes ago, jeffreywhunter said:

I have an unraid 7.0 server, i5-2600k, 32gb 1600mhz ram, 15 drives on an ASUS P8Z77 VLK mobo. I have the Limetech Plex Docker in place. I have an Intel P2000 GPU.  I'm trying to keep the costs down and keep this decades old system running as long as possible.  I have 5000 movies and 22000 TV shows on my system plus music. The i5 struggles to keep up with transcoding when remote users access movies. So a few questions...

 

1. I know that plex prefers direct play but also supports hardware transcoding. Will the P2000 work with this config and accomplish what I thought it would?  

2. Are there any guides/instructions on how to install the P2000 with Unraid & Plex?

 

Should I (*sigh*) just spring for more Mobo, CPU and Memory?  What would be a cost effective upgrade?

 

1 and 2 are a yes, but it would be a lot more efficient (power especially) to upgrade the CPU and mobo. Quicksync on the gen 8 and up Intel CPUs is really hard to beat. I have an i7-8700 in mine and never even notice when any of my family are watching movies

  • Author

I've since tried to install the Quadro P2000.  Unraid recognizes it in devices, I was able to choose it for hardware transcoding in Plex, setup the container with all the various bits 

 

Here's what I've done:

 

0. In BIOS I enabled IOMMU/VT-d (allows GPU passthrough)

 

1. Installed NVIDIA Driver Plugin from community applications.  Verified P2000 in System Devices.

 

2. Added the following to Plex Container

 

Extra Parameters: ---runtime=nvidia

 

Host Path 2: /tmp (container 

 

Added Devices

  /dev/nvidia0: /dev/nvidia0

  /dev/nvidiactl: /dev/nvidiactl
  /dev/nvidia-uvm: /dev/nvidia-uvm
  /dev/nvidia-uvm-tools: /dev/nvidia-uvm-tools
 

Added Variables:

  NVIDIA_VISIBLE_DEVICES:  all

  NVIDIA_DRIVER_CAPABILITIES: video,compute,utility

 

3. In Plex>Settings>Transcoder

  Enabled Use Hardware acceleration when available

  Enabled user hardware-accelerated video encoding

  Hardware transcoding device set to Auto (only choice)

 

Ran watch -n 1 nvidia-smi displays the following (no change, even when playing a video that requires transcoding - i.e. on Firefox Plex Play).

 

Every 1.0s: nvidia-smi                                                   HunterNAS: Thu May  8 16:42:23 2025

Thu May  8 16:42:23 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.77                 Driver Version: 565.77         CUDA Version: 12.7     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  Quadro P2000                   Off |   00000000:02:00.0 Off |                  N/A |
| 64%   37C    P0             16W /   75W |       0MiB /   5120MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

 

So unraid sees the GPU, but does not appear that plex is using it. When I run a video that requires transcoding, CPU gets maxed and video is choppy (i.e. GPU not being used).  Obviously I'm missing something...  Ideas?

 

Edited by jeffreywhunter

Well do you have a plex-pass license/subscription? without paying for it hardware encoding/decoding is not possible.

 

when trascoding something you should check the plex playback dashboard and see if "Transcode (hw)" shows up like this example:

If the "(hw)" does not appear next to the word transcode, you're not using the gpu.

 

56A73CC2-A6E9-45EE-9506-D380935EF164.png.1a5147b8c824761d3c4c72a4a227aef6.png

Edited by MowMdown

  • Author
1 hour ago, MowMdown said:

Well do you have a plex-pass license/subscription? without paying for it hardware encoding/decoding is not possible.

 

when trascoding something you should check the plex playback dashboard and see if "Transcode (hw)" shows up like this example:

If the "(hw)" does not appear next to the word transcode, you're not using the gpu.

 

56A73CC2-A6E9-45EE-9506-D380935EF164.png.1a5147b8c824761d3c4c72a4a227aef6.png

Yes I have a plex-pass.  I am seeing transcoding, but not the same.  I see: 

image.png.ece3a2f8af1471c36d4c04277318c698.png

 

Transcode, not Transcode (hw).  I am using the PlexInc Plex docker.  When I try Running nvidia-smi inside the container fails with:

bash: nvidia-smi: command not found

So it appears that the official PlexInc image lacks NVIDIA libraries and tooling.  Correct?

 

I guess my option would be to go with the Limetech Plex?  I'd RATHER NOT do that as I'd have to rebuild everything... Thoughts?  Could I just copy the plex database files from the PlexInc docker to the Limetech Plex docker?

 

Edited by jeffreywhunter

It shouldn't matter which plex docker you use, they should all support nvidia hardware transcoding. That's not something that is typically custom to certain versions of plex I don't think. It should just be standard across the board.

 

I stopped using nvidia a while ago so I can't remember if you could ever run nvidia-smi inside plex container.

 

Can you post the docker run command it's using to launch plex.

 

Quote

Hardware transcoding device set to Auto (only choice)

 

Here's a clue plex can't see the card, it would show up in the dropdown. something is not passed through properly. Probably a typo somewhere

 

B3494236-A081-419A-8AA4-D7034C68593F.png.0f4990d8c530d292abbb9f80dd795ede.png

 

Quote

NVIDIA_DRIVER_CAPABILITIES: video,compute,utility

I would also set this to "all" same as the other one

Edited by MowMdown

  • Author

Here's the docker run:

 

Command execution
docker run
  -d
  --name='PlexMediaServer'
  --net='host'
  --pids-limit 2048
  -e TZ="America/Chicago"
  -e HOST_OS="Unraid"
  -e HOST_HOSTNAME="HunterNAS"
  -e HOST_CONTAINERNAME="PlexMediaServer"
  -e 'PLEX_CLAIM'='claim-QUMb4Y5xTiewyoDE_5zx'
  -e 'PLEX_UID'='0'
  -e 'PLEX_GID'='0'
  -e 'VERSION'='latest'
  -l net.unraid.docker.managed=dockerman
  -l net.unraid.docker.webui='http://[IP]:[PORT:32400]/web'
  -l net.unraid.docker.icon='https://raw.githubusercontent.com/plexinc/pms-docker/master/img/plex-server.png'
  -v '/mnt/cache/appdata/PlexTransCode/':'/transcode':'rw'
  -v '/mnt/user/appdata/PlexMediaServer/':'/data':'rw'
  -v '/mnt/user/movies/':'/movies':'rw'
  -v '/mnt/user/tv/':'/tv':'rw'
  -v '/mnt/user/music':'/music':'rw'
  -v '/mnt/user/homemovies/':'/homemovies':'rw'
  -v '/mnt/user/pictures':'/pictures':'rw'
  -v '/mnt/user/appdata/PlexMediaServer':'/config':'rw'
  --device='/dev/nvidia0'
  --device='/dev/nvidiactl'
  --device='/dev/nvidia-uvm'
  --device='/dev/nvidia-uvm-tools'
  --runtime=nvidia 'plexinc/pms-docker'
74ca07ac98f52c59e5453e3114b926eecf5094d23db512ecd201f1d806c8b29e

The command finished successfully!

 

 

  • Author
1 hour ago, MowMdown said:

Here's a clue plex can't see the card, it would show up in the dropdown. something is not passed through properly. Probably a typo somewhere

 

B3494236-A081-419A-8AA4-D7034C68593F.png.0f4990d8c530d292abbb9f80dd795ede.png

 

I've been told that the plexinc/pms-docker image does not bundle GPU support libraries by default.  Perhaps that is why?  Do you know for sure if its included?  Is there a way to see if its there?

3 hours ago, jeffreywhunter said:

Here's the docker run:

 

Command execution
docker run
  -d
  --name='PlexMediaServer'
  --net='host'
  --pids-limit 2048
  -e TZ="America/Chicago"
  -e HOST_OS="Unraid"
  -e HOST_HOSTNAME="HunterNAS"
  -e HOST_CONTAINERNAME="PlexMediaServer"
  -e 'PLEX_CLAIM'='claim-QUMb4Y5xTiewyoDE_5zx'
  -e 'PLEX_UID'='0'
  -e 'PLEX_GID'='0'
  -e 'VERSION'='latest'
  -l net.unraid.docker.managed=dockerman
  -l net.unraid.docker.webui='http://[IP]:[PORT:32400]/web'
  -l net.unraid.docker.icon='https://raw.githubusercontent.com/plexinc/pms-docker/master/img/plex-server.png'
  -v '/mnt/cache/appdata/PlexTransCode/':'/transcode':'rw'
  -v '/mnt/user/appdata/PlexMediaServer/':'/data':'rw'
  -v '/mnt/user/movies/':'/movies':'rw'
  -v '/mnt/user/tv/':'/tv':'rw'
  -v '/mnt/user/music':'/music':'rw'
  -v '/mnt/user/homemovies/':'/homemovies':'rw'
  -v '/mnt/user/pictures':'/pictures':'rw'
  -v '/mnt/user/appdata/PlexMediaServer':'/config':'rw'
  --device='/dev/nvidia0'
  --device='/dev/nvidiactl'
  --device='/dev/nvidia-uvm'
  --device='/dev/nvidia-uvm-tools'
  --runtime=nvidia 'plexinc/pms-docker'
74ca07ac98f52c59e5453e3114b926eecf5094d23db512ecd201f1d806c8b29e

The command finished successfully!

 

 

I don't see a variable for NVIDIA_VISIBLE_DEVICES = all nor NVIDIA_DRIVER_CAPABILITIES = all, I know you said you added them but they're not showing up here.

Edited by MowMdown

  • Author
9 hours ago, MowMdown said:

I don't see a variable for NVIDIA_VISIBLE_DEVICES = all nor NVIDIA_DRIVER_CAPABILITIES = all, I know you said you added them but they're not showing up here.

Both are there.  Here's the complete Docker config (and screenshot attached).

 

These are all the volume mappings, environment variables, and GPU passthrough settings.

1. PlexMediaServer Docker Configuration (Unraid - plexinc/pms-docker)
Setting					Value				Notes
Container Name				PlexMediaServer	
Repository				plexinc/pms-docker		Official Plex image
Network Type				Host	
Privileged Mode				Off	
Console Shell Command		Shell	
Tailscale					Off	

2. Volume Mappings
Host Path				Container Path		Purpose
/mnt/user/appdata/PlexMediaServer/	/data				Plex config directory
/mnt/cache/appdata/PlexTransCode/	/transcode			Transcoder temp directory (SSD)
/mnt/user/movies/			/movies				Movie library
/mnt/user/tv/				/tv					TV library
/mnt/user/music				/music				Music library
/mnt/user/homemovies/			/homemovies			Home videos
/mnt/user/pictures			/pictures			Photo library

3. Environment Variables
Variable					Value							Notes
PLEX_CLAIM					claim-QUMb4Y5xTiewyoDE_5zx				Claim token for initial setup
PLEX_UID					0							Runs Plex as root (not ideal)
PLEX_GID					0							Same as above
VERSION						latest							Plex version
NVIDIA_VISIBLE_DEVICES				all									Expose all GPUs
NVIDIA_DRIVER_CAPABILITIES			all									Note: typically compute,video,utility recommended

4. GPU Passthrough Devices
Host 					Device					Container Device	Description
/dev/nvidia0			/dev/nvidia0			Quadro P2000 GPU
/dev/nvidiactl			/dev/nvidiactl			NVIDIA Control Interface
/dev/nvidia-uvm			/dev/nvidia-uvm			Unified Video Memory
/dev/nvidia-uvm-tools	/dev/nvidia-uvm-tools	Additional UVM interface

Despite all settings appearing correct, GPU hardware transcoding did not function with this configuration, and Plex only showed "Auto" in the Hardware Transcoding Device dropdown. The container lacked NVIDIA runtime libraries internally (nvidia-smi not found).

 

 

Plex chrome_2025-05-09_08-32-57.png

Edited by jeffreywhunter

  • Solution

You named the variables correctly but I don't think you actually created the variables, click edit and post the screenshot of the edit page for the two

See how the orange text is blank next to "Container Variable"

image.png.c5cc6defeb36a61c893744cc22c2afef.png

 

Should look like this (repeat this for the driver capabilities variable as well):

 

image.png.a0ad5aecd3cfc74ebcb83a39fd8cc915.png

image.png.5490b238bfe78d5c887e480d11a8fb60.png

 

I think you missed the "key" portion the name portion is irrelevant (the name is just so you can identify it in the template)

 

It would have shown up in this list:

 

image.png.bba8cc1111788d3b341ef618e24d164d.png

 

Like so

 

docker run
  -d
  --name='plex'
  --net='media-net'
  --pids-limit 2048
  -e TZ="America/New_York"
  -e HOST_OS="Unraid"
  -e HOST_HOSTNAME="Tower"
  -e HOST_CONTAINERNAME="plex"
  -e 'VERSION'='LATEST'
  -e 'NVIDIA_VISIBLE_DEVICES'='all' (this is missing from yours)
  -e 'NVIDIA_DRIVER_CAPABILTIES'='all' (this is also missing)
  -e 'PUID'='99'
  -e 'PGID'='100'
  -e '100'='100'

 

Edited by MowMdown

  • Author
22 hours ago, MowMdown said:

You named the variables correctly but I don't think you actually created the variables, click edit and post the screenshot of the edit page for the two

See how the orange text is blank next to "Container Variable"

 

Thanks MowMdown! Not sure how I missed that, but not setting up the KEY in addition to the VALUE was a big part of the problem. Additionally, (and this was a real challenge to figure out) there were a lot of permission issues at play.  I ran Newperms on /mnt/cache/appdata/PlexMediaServer, /mnt/user/movies, /mnt/user/tv.  The final bit, and this was important was making sure that I used the cache drive

watch -n 1 "top -b -n1 | head -n 15; echo; nvidia-smi"

 

With MowMdown's suggestions/observations, I finally got Plex Media Server running (mostly) perfectly on Unraid with hardware-accelerated transcoding using my NVIDIA Quadro P2000. Playback is buttery smooth, even with multiple concurrent 4K streams — here's exactly what I did to make it work, in checklist style for anyone else going down this road.

 

🧰 Hardware

  • GPU: NVIDIA Quadro P2000 (Pascal, well-supported)
  • Unraid Version: 7.0.0
  • Container: PlexInc/pms-docker

Step-by-Step Setup

 

🖥️ 1. BIOS Configuration

  • Enabled VT-d (IOMMU) in BIOS
  • Disabled CSM (Compatibility Support Module) if present (not always needed)
  • Enabled Resizable BAR if available (optional for newer GPUs)

🎮 2. Install NVIDIA Driver Plugin

  • Go to Apps tab
  • Install "NVIDIA Driver" plugin
  • Reboot Unraid
  • Confirm GPU is detected with: bash nvidia-smi or look in settings>system devices to find the GPU (important validation hardware is right)

🐳 3. Docker Container Setup (Plexinc)

These are the critical Docker Container settings:

Docker Container Setup Checklist – Plex with NVIDIA GPU (P2000)
📦 Container Basics
Repository: plexinc/pms-docker
Registry URL: https://hub.docker.com/r/plexinc/pms-docker
Icon URL: https://raw.githubusercontent.com/plexinc/pms-docker/master/img/plex-server.png
Network Type: Host
Privileged: Off
Use Tailscale: Off
Console Shell: Shell
CPU Pinning: (Optional — as needed)

🧠 GPU Hardware Transcoding
Extra Parameters:--runtime=nvidia
Devices: (Make sure both name and value are filled in)
	/dev/nvidia0
	/dev/nvidiactl
	/dev/nvidia-uvm
	/dev/nvidia-uvm-tools
Environment Variables: (Make sure name, key, value and default value are filled in)
NVIDIA_VISIBLE_DEVICES: key:NVIDIA_VISIBLE_DEVICES, value=all, default value=all
NVIDIA_DRIVER_CAPABILITIES= key:NVIDIA_DRIVER_CAPABILITIES, value=all, default value=all

📂 Volume Mappings
Container Path		Host Path							Purpose
/transcode		/mnt/cache/appdata/PlexTransCode/		Fast SSD-based transcode folder
/config			/mnt/cache/appdata/PlexMediaServer/		Plex configuration & metadata storage
/movies			/mnt/user/movies/				Movie library
/tv			/mnt/user/tv/					TV Shows library
/music			/mnt/user/music/				Music library
/homemovies		/mnt/user/homemovies/				Personal/home movies
/pictures		/mnt/user/pictures/				Photo library

🔑 Environment Variables
Key			Value					Description
PLEX_CLAIM	claim-XXXXY5xTiXXXXDE_XXX (example)		Optional claim token for linking server
PLEX_UID		0					Run as root (Unraid default)
PLEX_GID		0					Group ID (Unraid default)
VERSION			latest					Container image tag

 

🔥 NOTE: Using /mnt/cache/... instead of /mnt/user/... fixed several weird bugs with hardware transcoding. Plex can behave unpredictably with FUSE paths.

 

🔒 4. Permissions – Set Correct Ownership

On appdata and media shares: newperms /mnt/cache/appdata/PlexMediaServer newperms /mnt/user/Movies newperms /mnt/user/TV

Ensures proper nobody:users ownership and 775/664 permissions.

 

🎛️ 5. Plex Settings (Inside Plex Web UI)

Settings → Transcoder

Hardware Acceleration = Enabled

Transcoder Directory = /transcode (if set above)

⚠️ Optional: Disable “Use HDR tone mapping” unless needed

 

🧪 6. Confirming GPU Usage

In terminal: watch -n 1 nvidia-smi

Look for: Plex Transcoder using 500–700MiB GPU Memory GPU-Util: >30%

In Plex>Activity>dashboard: Playback shows: Transcode (Video: H264 (Hardware)) - (See MowMdown's first post above)

 

💡 Bonus Observations

Firefox sessions triggered hardware transcode reliably on 4k videos - useful since you can't control from the Plex Player anymore.

Chrome sometimes fell back to CPU transcode due to codec or subtitle rendering - THIS IS STILL AN ISSUE - in Chrome, Plex does CPU transcoding...*sigh* I have to work on that next.

Plex ran thumbnails and streams simultaneously without skipping or pegging CPU.

HELPFUL: Using watch -n 1 "top -b -n1 | head -n 15; echo; nvidia-smi" let me watch real-time both GPU and Processes at the same time.

HELPFUL: I used ChatGPT for a lot of the debugging.  You can't believe everything, but it was fantastic at providing options and specific commands to use (like Watch). I'm not a Linux GURU so this aspect of AI was VERY helpful.
 

🧵 TL;DR Summary

BIOS VT-d on

NVIDIA Driver plugin installed

Docker has NVIDIA_VISIBLE_DEVICES & NVIDIA_DRIVER_CAPABILITIES - Key and Value set!

Mapped to /mnt/cache, not /mnt/user

newperms run on all relevant shares

Confirmed hardware transcode with nvidia-smi + Plex dashboard

 

  • Author

@MowMdown

Thanks again for your posts, got me on the right track.  I have one last issue with Transcoding.  Plex on Firefox uses the transcoder and it works fantastic.  Plex on Chrome seems to prefer to use the CPU - in spite of turning "Use hardware acceleration when available" on in Chrome>Settings (chrome://settings/system).  I can't force Video Quality in the Plex Player anymore (unless someone knows how to do that!), so my question is: do you know a way in plex to force chrome to use GPU transcoding vs CPU transcoding?

Browser-based Plex client has had issues for many years when it comes to transcoding.  Many times it defaults to CPU.  Even when it initially starts with GPU transcoding, it will switch to CPU (or come back with an error message) if you change video parameters (or even just when jumping to another time in the file).

 

For troubleshooting, it is best to use a dedicated Plex client app, such as AppleTV, Roku, etc.

2 hours ago, jeffreywhunter said:

@MowMdown

Thanks again for your posts, got me on the right track.  I have one last issue with Transcoding.  Plex on Firefox uses the transcoder and it works fantastic.  Plex on Chrome seems to prefer to use the CPU - in spite of turning "Use hardware acceleration when available" on in Chrome>Settings (chrome://settings/system).  I can't force Video Quality in the Plex Player anymore (unless someone knows how to do that!), so my question is: do you know a way in plex to force chrome to use GPU transcoding vs CPU transcoding?

 

That's going to depend on many factors, it's probably trying to transcode to something your GPU doesn't support and it's falling back to software transcoding because chrome is requesting something your GPU cant do where firefox is requesting something compatible.

 

You're better off using a plex client app to watch plex.

  • Author
On 5/10/2025 at 10:09 AM, MowMdown said:

 

That's going to depend on many factors, it's probably trying to transcode to something your GPU doesn't support and it's falling back to software transcoding because chrome is requesting something your GPU cant do where firefox is requesting something compatible.

 

You're better off using a plex client app to watch plex.

I have had success triggering transcoding using Firefox as the browser (it does not support H.264 files I assume). And its working well.  I've not found a way to trigger transcoding otherwise.

  • Author

Just wanted to share a successful Plex server setup for anyone running older hardware and considering GPU offload.

System Specs:

CPU: Intel i5-2600K

GPU: NVIDIA Quadro P2000

Motherboard: ASUS P8Z77-V LK

RAM: 32GB DDR3

OS: Unraid 6.12.x

Docker: Plex Media Server (official image)

NVIDIA Driver Plugin: v565.77 (New Feature Branch)

 

Goal: Enable GPU-based hardware transcoding for multiple concurrent Plex streams—including 4K → 1080p—without maxing out the CPU.

Key Steps:

Installed the NVIDIA driver plugin via the Unraid CA.

Passed the P2000 to the Plex container using:

bash

 

--runtime=nvidia --device=/dev/nvidia0 --device=/dev/nvidiactl --device=/dev/nvidia-uvm

Enabled hardware acceleration in Plex (Settings → Transcoder → Use hardware acceleration when available).

Rebuilt container with proper mappings (/config, /transcode, media libraries).

 

Results:

Up to 6 simultaneous streams, including 4K content.

Hardware transcoding confirmed via nvidia-smi (GPU memory & Plex Transcoder process active).

CPU usage stays between 8–32%, even under load.

No playback issues. Both local and remote streaming perform great.

 

Takeaway:
The Quadro P2000 is still a beast for Plex! Even paired with an older i5-2500K, you can comfortably transcode 4K video and serve multiple users with ease. Great way to breathe new life into older hardware.

 

Happy streaming!
 

Edited by jeffreywhunter

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.