Jellyfin Transcoding Not Working: A Checklist
We earn commissions when you shop through the links below. Learn more
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:
| Type | What happens |
|---|---|
| Direct Play | The file is sent as is |
| Remux | Container changes, audio and video untouched |
| Direct Stream | Audio is transcoded, video untouched |
| Transcode | The 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/driThe 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:
devices:
- /dev/dri/renderD128:/dev/dri/renderD128On 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: -f3group_add:
- "122" # replace with your host's render group IDFor 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@vavainfo 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:
- H.264 8-bit: any Intel GPU with Quick Sync Video
- HEVC 8-bit: Gen 9 Skylake (6th Gen Core) and newer
- HEVC 10-bit: Gen 9.5 Kaby Lake, Apollo Lake, Gemini Lake and newer
- AV1 decode 8/10-bit: Gen 12 Tiger Lake (11th Gen Core) and newer
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
- Jellyfin docs, Transcoding: https://jellyfin.org/docs/general/server/transcoding/ (checked 2026-10-28)
- Jellyfin docs, Hardware Acceleration overview: https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/ (checked 2026-10-28)
- Jellyfin docs, Intel GPU: https://jellyfin.org/docs/general/post-install/transcoding/hardware-acceleration/intel/ (checked 2026-10-28)
- Jellyfin docs, Troubleshooting: https://jellyfin.org/docs/general/administration/troubleshooting/ (checked 2026-10-28)
- Jellyfin v12.4 release: https://github.com/jellyfin/jellyfin/releases/tag/v12.4 (checked 2026-10-28)

