Self-hosted Jellyfin CPU or GPU for 4K HDR transcoding?
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?
Curious: What's the deal with all the transcoding on servers?
Don't you just need some good rendering on the client? And if you need it on the server, why need it on the fly? You can do it before, and store the result, can't you?
Do you want only 2 devices of the 10 your family possibly owns to work?
Do you want your family to complain that jellyfin "isn't as good as Netflix/Disney+/etc.." Because it constantly stops to buffer and a can't keep up the framerate?
It is completely fine if you are single and have 1-2 devices that work with AV1 and h.265 client side and that is all you need, then you don't have to bother with transcoding at all. When you start letting other people into it, compatibility becomes an issue.
As for storing it beforehand, the entire point of AV1 and HEVC is to significantly reduce the size on disk. If you have to store 10 versions or each file, 5 resolutions each, half h.264, then you are taking up about 20x the space per file compared to 1 copy of HEVC or AV1.
A transcode GPU like the A380 or new QSV compatible CPU is MUCH cheaper than a new good quality 12TB drive lol
Sorry for the long text, it pretty much depends on the living situation.
The 970 unfortunately doesn't have h265 hardware in it. The only gpu in that generation that does is the 960, as it was released later than the others and was one of the first to get h265. I ended up just getting a p400, and it's been rock solid.
The 970 works for encoding h.264 only. My recommendation: If you have a 7th Gen Intel CPU with iGPU or later, use that. Otherwise, sell the 970 and get one of these (in this order):
Intel Arc A310
GTX 1650
GTX 1630
Quadro P1000
Quadro T400
GTX 1050 Ti
GTX 1050
Quadro P620
Quadro P600
Quadro P400
The Intel Card has the best encoder, followed by Nvidia Turing, then Pascal. I recently sold my 970 and got a 1050 Ti for the same price. Works great with Jellyfin. If you need to tone map HDR, you probably shouldn't get anything with much lower performance than that. If it's just some UHD to HD or h.265 to h.264 for compatibility, even the P400 will work well.
thanks for the tips! I am running a Ryzen 9 5950X, so it definitely needs a standalone GPU. I am going to be getting a 1070 off the kids’ computer once I upgrade them later this year, so I think I’ll just stick that into it.
Would really like to get the seamless transcoding to work so the whole family can use it without hiccups.
For one, storing multiple versions of the same film takes up a lot of storage, which is more expensive than a cheap 40€ gpu for transcoding. And I definitely wanna keep the highest quality I can.
Besides transcoding on the fly is more flexible, ensuring the best possible quality at any time, instead of having to pick between the good and the shit version.
And secondly, usually I only need transcoding when I don’t watch on my home setup (or when some friends watch on my server). My upload isn’t as high as some of my film’s bitrates and some clients do not support h.265 or HDR thus needing transcoding and/or tonemapping.
The mobile and TV clients are often limited to the codecs with hardware acceleration. Or just selecting a lower bitrate on the client will cause transcoding.
People talk about the cost of storage space but neglect the cost of electricity to constantly transcode video files. And it’s not like the output is saved for the next time; you need to do it every time.
Plus, I’d bet most people sit too far from their TV to be able to see the actual different between 1080p and 4k.
HDR? Sure. But 4k? Doubtful.
I keep two libraries - one that’s 720/1080p and a second that’s 4k only. My 4k content is severely limited to only things I REALLY want in 4k.
And it’s not like the output is saved for the next time; you need to do it every time.
You can cache transcoded content in Jellyfin. So use a large enough cache and you basically only have to transcode once for every resolution. It's easier for me to set up transcoding than it would be to manually figure out which resolutions I'll prefer having around and transcoding them. Most of my stuff exists in 1080p, with 4k files for stuff I REALLY like, but I sometimes find myself watching on very low resolutions on my phone when away because I have pretty limited data.
I find that in a few movies the 4K versions have a generally better image quality and are worth it even if you are sitting far away or not watching the content in 4K resolution at all. But like you, I only keep around 4k files for stuff I really like.
EDIT: I've also run into problems with codecs on other people's devices when not transcoding. I could keep my files in whatever the most compatible codec is nowadays but having the ability to transcode on the spot is easier.
The transcodes folder exists by default and the cleanup defaults to daily, I think. You'd only need to mess with the configuration for transcode caching if you want them to stick around for longer