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?

  • narc0tic_bird@lemm.ee
    link
    fedilink
    English
    arrow-up
    10
    ·
    5 months ago

    Like others said an Intel CPU with iGPU, alternatively the cheapest Intel Arc GPU (A380?) supports the latest spec of Intel QSV as well.

  • Vinny_93@lemmy.world
    link
    fedilink
    English
    arrow-up
    10
    arrow-down
    1
    ·
    5 months ago

    Read up on Intel QSV. You essentially only need a recent cpu. i3 would do.

  • entropicdrift@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    8
    ·
    5 months ago

    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.

    • Rogers@lemmy.ml
      link
      fedilink
      English
      arrow-up
      1
      ·
      5 months ago

      Intel GPUs look like a great value. And AV1 hardware acceleration is a game changer

    • khi@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      5 months ago

      I don’t know where you’ve bought your N100 but i think it shouldn’t be able to do that. I have one too and it cant do even one 4k 10bit HDR transcode.

      As i see in the results from the benchmarks we’ve gathered (here: https://gist.github.com/ironicbadger/5da9b321acbe6b6b53070437023b844d), my experience seems to be the common one.

      While de N100 is a great value and low energy processor for a jellyfin server (especially if you direct play everything as is my case), I think if the objective is 4k hdr 10bit it will fall short as in my experience it usually transcodes at 8-9fps.

      • Rehwyn@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        edit-2
        5 months ago

        It’s not Jellyfin, but here’s my N100 simultaneously doing two 4K HDR transcodes with tone mapping enabled. Neither stream had buffering.

        So it’s definitely a capable chip, but might be dependent on transcode settings.

        • khi@lemmy.world
          link
          fedilink
          English
          arrow-up
          0
          ·
          5 months ago

          Yeah after seeing this and another very detail answer it looks line my settings are too demanding and that is causing a slowdown. Since i do direct playing on everything i might just turn them down for the one friend who seems to be always on the weirdest player that needs transcoding. Thanks all!!

  • Faceman🇦🇺@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    6
    ·
    5 months ago

    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?

  • Diplomjodler@lemmy.world
    link
    fedilink
    English
    arrow-up
    5
    ·
    5 months ago

    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.

    • SmallBorg@lemm.ee
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      5 months ago

      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.

      • Diplomjodler@lemmy.world
        link
        fedilink
        English
        arrow-up
        1
        ·
        5 months ago

        “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?

  • NeoNachtwaechter@lemmy.world
    link
    fedilink
    English
    arrow-up
    5
    ·
    5 months ago

    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?

    • JustEnoughDucks@feddit.nl
      link
      fedilink
      English
      arrow-up
      10
      ·
      edit-2
      5 months ago

      Compatibility and storage.

      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.

    • accideath@lemmy.world
      link
      fedilink
      English
      arrow-up
      6
      ·
      5 months ago

      A few reasons.

      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.

    • bazsy@lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      5 months ago

      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.

  • tables@kbin.social
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    5 months ago

    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.

  • Pyrosis@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    5 months ago

    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.