Hardware transcoding in Jellyfin on Proxmox with Intel Integrated Graphics
Published on
In this blog I will share how I set-up Jellyfin on Proxmox LXC with the ability to transcode video using the integrated GPU on my Intel NUC.
The CPU in my NUC is a 13th generation i5-1340P with Intel Iris Xe graphics. Intel has published a document in which you can lookup the supported media capabilities of the Intel graphics you own.
Keep in mind that there are always multiple ways to accomplish the same goal. Jellyfin also has some information on transcoding when using Jellyfin in Proxmox.
Install Intel iGPU drivers
First we have to install drivers for the Intel iGPU on the Proxmox host. Besides drivers we also install some additional tools to see if transcoding is actually working. Login on the Proxmox host using SSH and install the following three packages:
apt install intel-media-va-driver intel-gpu-tools vainfo
Run vainfo
and intel_gpu_top
to see if everything is working. The first command shows the capabilities of the iGPU, and the latter shows what processes are running on the iGPU (should be nothing at the moment).
Install Jellyfin
At the time of writing this blog I am running Proxmox 8, making the process a bit more straight forward compared to older versions. If you are running an older version, please have a look at the official Jellyfin documentation.
Create a new LXC container
- General
- Name the container, e.g. "jellyfin"
- Keep "unprivileged container" and "nesting" checked
- Enter a password so you can login to the LXC container
- Template
- I use a Debian 12 template, but you could also pick e.g. Ubuntu
- The other settings can be adjusted to whatever you see fit
Set-up iGPU passthrough
- Start the LXC container and login via the Proxmox Console (user
root
, password you created in previous step) - We need the group ID for the
render
group. Execute the following commandgetent group render
. On my Debian LXC container the group ID is104
- In Proxmox click on
Resources
->Add
->Device Passthrough
- Device Path:
/dev/dri/renderD128
- GID in CT:
104
(change this to the group ID you retrieved above)
- Device Path:
- Restart the LXC container
- Next we install the drivers for the Intel iGPU within the LXC container:
apt install intel-media-va-driver
Install Jellyfin
- Login via the Proxmox Console on the LXC container
- The easiest way to install Jellyfin it by following the official manual:
apt install curl
curl https://repo.jellyfin.org/install-debuntu.sh | bash
- Next visit the Jellyfin interface (url is shown after installation is complete)
- To set-up transcoding navigate to
Administration
->Dashboard
->Playback
->Transcoding
- On my system setting hardware acceleration to
Intel QuickSync (QSV)
works best. Make sure to set the path to/dev/dri/renderD128
- You can play around with the video formats for which acceleration should be enabled. For now keep these settings alone until we know everything is working correctly
- To be sure I would recommend to restart the LXC container once more
Test if hardware transcoding is working
- To test if hardware transcoding is working we need something to play. A simple solution is to download a videofile to the LXC container and add this to a library (ofcourse you can also set-up a library that contains your own video files).
mkdir /Movies
wget -P /Movies https://sample-videos.com/video321/mkv/720/big_buck_bunny_720p_30mb.mkv
- Make sure to have
intel_gpu_top
running on the Proxmox host to see if the iGPU is actually being used for transcoding - Next go the the Jellyfin web interface and play the video file. Ofcourse it should play, and secondly you should see
ffmpeg
inintel_gpu_top
Done!
That's it! You have Jellyfin running in Proxmox with hardware transcoding working.