Jellyfin Transcoding Not Working: A Checklist

We earn commissions when you shop through the links below. Learn more

Guide · Jellyfin

Version/date: Jellyfin Server v12.4 (latest GitHub release, published 2026-10-27 06:30 JST, https://github.com/jellyfin/jellyfin/releases/tag/v12.4). Last checked: 2026-10-28.

When Jellyfin playback stutters or fails, check five things in order. First, find out whether the stream is actually transcoding (the dashboard shows the playback type). Second, check that the container can see /dev/dri/renderD128. Third, check that Jellyfin's user is in the host's render group. Fourth, make sure only the codecs your GPU supports are ticked. Fifth, if it still fails, read the FFmpeg log for that playback. Every step below comes from the official Jellyfin docs (checked 2026-10-28).

1. Is it transcoding at all?

Jellyfin's transcoding docs list four playback types, from lightest to heaviest load:

TypeWhat happens
Direct PlayThe file is sent as is
RemuxContainer changes, audio and video untouched
Direct StreamAudio is transcoded, video untouched
TranscodeThe video stream is transcoded

The type in use appears in the dashboard while the file plays. The client decides when to request a transcode, based on its codec and bitrate limits. If the client asks for a lower quality, you'll see a full transcode even with fast hardware.

2. Can Jellyfin see the GPU?

On the host, list the devices:

ls -l /dev/dri

The Intel guide says at least one renderD* device must exist. If none does, upgrade the kernel or enable the iGPU in the BIOS. In Docker, pass the device through:

yaml
devices:
  - /dev/dri/renderD128:/dev/dri/renderD128

On a system with a second GPU, the docs say to use renderD129 instead, and to change the device in the Jellyfin dashboard too.

3. Is the render group right?

The device belongs to a group, usually render. On some releases it's video or input. Find its ID on the host and add it to the container:

getent group render | cut -d: -f3
yaml
group_add:
  - "122"   # replace with your host's render group ID

For a bare-metal (deb) install, the docs use sudo usermod -aG render jellyfin, then restart Jellyfin. In a Kubernetes pod, the docs say the error failed to initialize display means the supplemental group is wrong.

4. Test the driver inside the container

The Intel guide's checks for Docker:

docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo
docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va -init_hw_device opencl@va

vainfo lists the codecs your GPU can decode and encode. If it errors, the problem is the device, group or driver, not Jellyfin's settings.

Use jellyfin-ffmpeg. The hardware acceleration overview warns that FFmpeg binaries from elsewhere "will result in partial acceleration". The official Docker images already include it.

5. Tick only the codecs your hardware supports

In the dashboard's transcoding settings, choose the method (QSV or VA-API for Intel on Linux), then the docs' instruction is to "uncheck the unsupported codecs". From the Intel guide:

One trap the docs call out: H.264 10-bit (High 10) has no hardware decoding on any Intel, NVIDIA or AMD GPU, so Jellyfin falls back to the CPU for it.

6. Read the FFmpeg log

Jellyfin's troubleshooting page: "If media is unable to transcode, first check the ffmpeg logs." You'll find them in the dashboard's logs or in the server's log directory. For more detail, the page explains how to switch on debug logging with a logging.json file in the config directory. Turn it off afterwards, because the output is very large.

7. Confirm the GPU is doing the work

On the host, install intel-gpu-tools, play a video at a lower quality to force a transcode, and run sudo intel_gpu_top. The Video engine should show load. If only the CPU is busy, hardware acceleration isn't active.

HDR looks washed out

When HDR video is transcoded, Jellyfin has to tone-map it to SDR. The docs recommend a GPU for this, since software tone-mapping is very slow. On Intel, hardware tone-mapping needs a GPU with HEVC 10-bit decoding. Enable tone-mapping in the transcoding settings.

For the full Intel Quick Sync setup, see Jellyfin Quick Sync in Docker. If you're picking hardware, see best mini PCs for Jellyfin.

Related: Jellyfin Quick Sync in Docker · best mini PC for Jellyfin · Jellyfin vs Plex · Plex to Jellyfin migration

Sources

Related guides