← All guides

Playback and quality

Why is Jellyfin transcoding, and how to stop it

Work out the actual reason your server is transcoding, in about two minutes, then fix the four things that cause nearly all of it.

Level
Intermediate
Time
20 minutes
Updated
Checked against
Jellyfin 10.11

Before you start

  • Something playing that you can look at while it plays
  • Administrator access, for the server-side settings

Your server’s fans are running, a 4K film looks soft, and something is working much harder than it should. Jellyfin is transcoding, and the fix depends entirely on why.

Do not change settings yet. Jellyfin will tell you the reason, and the reason points at exactly one of the fixes below.

Get the reason first

Play the thing that transcodes, in the web interface, and open the playback info overlay. It reports the method and, when it is transcoding, what forced it.

You are looking for a line naming a stream and a reason: the video codec is not supported, the audio codec is not supported, the container is not supported, or the bitrate exceeds the limit.

Write down exactly what it says. Each one has a different fix and guessing wastes an evening.

The playback info overlay with a transcoding reason visible
The overlay says which stream forced it, which is the only thing you need to know

Tip

Dashboard, then Devices, shows every active session and what each is doing. When the server is busy and you do not know who is asking, look there rather than guessing from the fan noise.

Reason: the bitrate exceeds the limit

The most common reason, and the one that surprises people, because nothing on the server caused it.

Nearly every client has a quality setting, and many ship with a cap well below what a Blu-ray rip needs. With a cap set, the server is obliged to transcode down to it, even though the device could have played the file and the network could have carried it.

Fix it on the client. Find its quality or bitrate setting and set it to maximum, or auto, on your home network.

Then check the server is not capping too. Dashboard, then Users, then a user, has a maximum streaming bitrate. Useful for someone watching from elsewhere on a poor connection. Not useful applied to yourself at home.

Note

This is worth checking first even when the overlay blames something else. A bitrate cap can hide the real reason by forcing a transcode before anything else gets a chance to.

Reason: the audio codec is not supported

Very common, and usually the cheapest to fix, because it is often one track on a file that is otherwise fine.

Many films carry DTS, DTS-HD or TrueHD audio, which plenty of devices will not decode. The video would have direct played perfectly. The sound is what forced the whole film to be rebuilt.

Three fixes, in order of effort.

Pick a different audio track

Most releases include a simpler AAC or AC3 track alongside the fancy one. Selecting it during playback is often the entire solution.

Set a default

A library’s settings include a preferred audio language and codec behaviour, so the sensible track gets picked without you thinking about it.

Re-encode the audio only, once, offline. A tool that copies the video stream untouched and re-encodes only the audio gives you a file that direct plays forever, in a couple of minutes per film and with no picture loss at all.

Reason: the video codec is not supported

The expensive one, because the video is the part that costs the most to rebuild.

Usually one of three things: HEVC on a device that cannot decode it, AV1 on almost anything older than very recent, or 10-bit video on a device that only handles 8-bit.

There is no server setting that makes a device decode a format it cannot decode. The real options are to use a client that can, or to keep a second copy of the file in a format that device handles.

Note

Apple hardware is unusually good here, and predictably so. Recent iPhones and iPads decode HEVC, including 10-bit, in hardware. What an iPhone and iPad can play without transcoding is the list. A client that plays the file as it is rather than asking the server to rebuild it is how you make use of that, which is what JellyMold does.

Reason: subtitles

The reason that catches people out, because it only happens when subtitles are switched on, so the same file behaves differently depending on a toggle.

Text subtitles, SRT and ASS, are sent to the player and drawn by it. No transcoding.

Image subtitles, PGS and VOBSUB, the kind that come off Blu-rays and DVDs, are pictures. Many players cannot overlay them, so the server burns them into the video, and burning anything into the video means re-encoding all of it.

The fix is to get a text subtitle for that film. Set up OpenSubtitles on your Jellyfin server makes that automatic, and it is the single highest-value change on this page: it turns a whole category of transcodes into nothing at all.

You can also extract the text subtitles that are already inside your files, as a scheduled task, which makes them available without any downloading.

A file’s media info showing its subtitle streams and their formats
PGS and VOBSUB are pictures. SRT and ASS are text, and text never forces a transcode.

When you genuinely cannot avoid it

Sometimes the device simply cannot play the file, and that is the end of it. Make the transcode cheap rather than trying to prevent it.

Turn on hardware acceleration under Dashboard, then Playback. An Intel chip with QuickSync, an Nvidia card, or Apple silicon will do the work on dedicated hardware instead of the processor, which is the difference between one stream and several.

Set the throttling and the transcode path sensibly. Transcoding to a fast disk, or to memory if you have plenty, is noticeably better than to a slow one.

Careful

Hardware acceleration makes a transcode cheap. It does not make it good. The quality is lost in the re-encoding itself, not in which chip did it, so this is damage control rather than a fix.

A quick checklist

  1. Read the reason in the playback info overlay
  2. Set the client’s quality to maximum on your own network
  3. Check the user’s maximum bitrate on the server
  4. Try a different audio track
  5. Get text subtitles instead of image ones
  6. Use a client that direct plays what your device can decode
  7. Only then, turn on hardware acceleration

Something out of date, or a step that no longer matches what you see? Tell us and we will fix it.