Hey everyone, I’m building a new server to run Jellyfin (with a few other services like Pi-hole) and I’m stuck on GPU or CPU transcoding.
My main concern is smooth 4K HDR transcoding for 1 stream. I’ve been reading mixed advice online – some people say a strong CPU with good single-core performance can handle it, while others recommend a dedicated GPU.
Should I focus my budget (~$1000AUD/$658USD) on a good CPU, or spend some of it on a dedicated GPU?
Like others said an Intel CPU with iGPU, alternatively the cheapest Intel Arc GPU (A380?) supports the latest spec of Intel QSV as well.
A310 is the cheapest.
I wonder how well it does for transcoding on older computers without ReBAR, since apparently gaming on it is straight out broken without ReBAR. As in, it would actually freeze for a second or so every now and then.
You can enable REBAR on older machines with a UEFI hack.
It’s been part of the PCI spec for ages but Nvidia and AMD only started using it recently.
same with all modern pcie 4.0 or higher gpus
rebar is now standard
https://www.nvidia.com/en-us/geforce/news/geforce-rtx-30-series-resizable-bar-support/
Intel Quicksync would do it, no need for a dedicated GPU.
You need a Intel GPU for that. It just so happens Intel CPUs come with GPUs these days.
Yes hence no need for a dedicated GPU
True, but to say CPU is not quite the correct term. It is still a GPU it just in on board graphics.
I didn’t say CPU? Quicksync is Intels dedicated hardware transcoder in the iGPU.
No but the post author did. I just want to make it clear that we aren’t talking about just any CPU
You can easily do smooth 4K HDR transcoding with any modern Intel CPU with integrated graphics.
I have an Intel N100 and it can probably handle 2-3 4K HDR transcodes at once. Definitely more if they’re being transcoded down to lower resolutions. Encoding is the most intensive part of the process.
Intel GPUs look like a great value. And AV1 hardware acceleration is a game changer
Read up on Intel QSV. You essentially only need a recent cpu. i3 would do.
One of my miniPCs is just a little N95 and it can easily transcode 4K HDR to 1080p (HDR or tonemapped SDR) to a couple of clients, and with excellent image quality. You could build a nice little server with a modern i3 and 16gigs of ram and it would smash through 4 or 5 high bitrate 4K HDR transcodes just fine.
Is that one transcoding client local to you? or are you trying to stream over the web? if it’s local, put some of the budget to a new player for that screen perhaps?
I tried that with a cheap minipc I bought and it was CPU limited. The GPU was fine it was the overhead that killed me.
Was it an n100? They have a severely limited power budget of 6w compared to the n95 at 25w or so.
I’m running jellyfin ontop of ubuntu desktop while also playing retro games. That all sits in a proxmox vm with other services running alongside it. It’s perfectly snappy.
I believe it is N9505 if I remember correctly. It is also possible I didn’t give it enough cores.
N5095 ? lots of reports of that one not supporting everything it should based on other Jasper Lake chips, CPU getting hit for Decode when it shouldn’t for example. Also HDR to SDR cant be accelerated with VPP on that one as far as I know so the CPU gets smashed. I think you can do it with OpenCL though.
It is a N5095A
GPU all the way as it will be more efficient. Keep in mind Intel integrated graphics counts as a GPU
I’ve been trying to get this to work for weeks now. No dice, so far. Anybody know any useful guide on setting it up for a docker installation? Or does it only work if you install the.deb? I use Mint, BTW. Server is a Dell with a 9th gen i5.
What specifically isn’t working? I’ve got Jellyfin running on Docker with transcoding from a Nvidia GPU.
I pretty much followed the documentation here: https://jellyfin.org/docs/general/administration/hardware-acceleration/nvidia. I can share my docker-compose for that specific use case if you’d like.
“jellyfin-ffmpeg5 deb package” is one bit I’m confused about. Is that part of the docker installation? If not, if I install the deb, can the docker installation use it? Do I have to configure something there?
I also struggled to get it to work with an Intel Celeron N5100. To get it to work I followed the instructions in the Jellyfin documentation. It seems like there are some additional steps for some versions of Intel CPUs, could it be that yours is affected? After enabling “Low-Power Encoding” it worked as expected.
Do you have it installed with docker?
Yes, I have it installed as a Docker container in a Debian 12 machine. My Docker compose file is something like this:
jellyfin: container_name: jellyfin image: jellyfin/jellyfin group_add: - "105" - "44" - "102" devices: - /dev/dri/renderD128:/dev/dri/renderD128 - /dev/dri/card0:/dev/dri/card0
The group numbers were obtained following Jellyfin’s documentation.
You also need to configure Jellyfin from Menu > Playback. In “Hardware acceleration” I selected “Intel QuickSync (QSV)”. I have selected all but AV1 (not supported by my CPU) from “Enable hardware decoding from:” and from “Hardware encoding options:” I have enable all 3 of them.
Check the Jellyfin wiki
I think those miniPC CPUs do a good job transcoding from what I’ve read, the N95 and N100. I already had older hardware set up when I added Jellyfin so I got a cheap nvidia Quadro P400 for the transcoding. If you’re setting up a new system though, I’d guess a Intel iGPU would be more than enough.
I’ve looked at https://www.elpamsoft.com/?p=Plex-Hardware-Transcoding before for transcoding comparisons.
I have no idea what the people who recommend CPU are smoking. The difference between a GPU with hardware support and doing it on the CPU is huge.
It’s really not, like at all. QuickSync is fast af and overkill for almost any usecase.
Setups for hardware decoding are based on the underlying OS. An example quite common is docker on Debian or Ubuntu. You will need to pass the appropriate /dev/ directories and at times files into your jellyfin docker container with the device environment variable. Commonly that would be /dev/dri
It gets more complicated with a vm because you are likely going to be passing the hardware directly into the vm which will prevent other devices outside the vm from using it.
You can get around this by placing docker directly on the os or placing docker in a Linux container with appropriate permissions and the same devices passed into the Linux container. In this manner system devices and other services will still have access the the video card.
All this to say it depends on your setup and where you have docker installed how you will pass the hardware into jellyfin. However jellyfin on docker will need you to pass the video card into the container with the device environment variable. Docker will need to see the device to be able to do that.
I’ve been using podman due to its low overhead.
Nothing but love for that project. I’ve been using docker-ce and docker-compse. I had portainer-ce but just got tired of it. It’s easier for me to just make a compose file and get things working exactly like I want.
Well it isn’t really CPU vs GPU. It is integrated vs dedicated GPU. A CPU certainly can transcode, but not well. A lot of CPUs have integrated graphics which can handle transcoding quite well. I went with an Intel arc a380 because I know quite a lot of people could hit it under some circumstances. For most people though, I would recommend an Intel CPU with quicksync. What you really should spend your budget on IMO is as much storage as you can.
If only 1 person will watch at any given time, cpu is plenty
My current setup:
- one stream using CPU transcoding, Intel Xeon E2246G
- six streams using GPU transcoding, Nvidia Tesla P4