When playing a movie from your Plex server, you may notice that Plex decides to transcode the movie instead of direct playing it. While this is common for movie formats or encodings that aren't compatible with the client device, you may some times see Plex transcode a movie from H.264 to H.264.
You may be wondering why Plex transcodes a movie to the exact same format as the original movie. There could be a number of reasons why this happens, and the next few sections will outline possible reasons for the movie being transcoded.
Movie file specifications
Plex transcoding from H.264 to H.264 could be related to the actual specifications of the movie file. Each client has different capabilities when it comes to play a movie file.
Some clients are older, or have low-powered processors, and can be limited to the how quickly it can play a movie. This means that the client can't play a movie that is over a certain bitrate. Such clients may also not support specific bit depths, or H.264 level, and having a movie that isn't within the capabilities of the client will cause Plex to transcode the movie.
To help ensure that Plex can direct play your movie on most clients, you should ensure your movie files adhere to the following specifications:
- Container: mp4
- Resolution: 1920x1080 or lower
- Video codec: H.264 (level 4.0 or lower)
- Framerate: 30 fps (bit depth: 8)
- Audio Codec: AAC (2 channels)
- Bitrate: 20 Mbps or lower
While the above specifications may not cause your movies to be direct played on all devices, it should be able to direct play on most.
In addition, you can always look at optimizing your movie files, to provide a selection of different formats for Plex to choose when streaming media to a client.
Another reason Plex may transcode the movie is because of the quality setting specified in the client.
If the client device is on the same local network as the Plex server, then you can probably set the quality setting on the client to Original/Maximum to ensure Plex streams the highest quality move to the client. The movie should direct play, unless the client has limitations as outlined in the previous section.
By default, Plex limits streaming remotely, meaning the client device is not on the same local network, but is streaming from the server over the Internet, to 720p 2 Mbps. This is really low, and most movie files - especially HD or UHD movies - aren't stored at this bitrate.
If the client is streaming from the Internet, and the remote streaming quality hasn't changed, then Plex will transcode any movie that is encoded with a higher bitrate.
When streaming remotely, you can adjust the remote streaming quality in your Plex client to a higher quality, and it may prevent transcoding if the movie is encoded at that quality.
If providing a compatible movie file to play on the client, and changing the quality setting on the client still does not prevent Plex from transcoding your movie, there is still one other option: disable PGS subtitles.
This one is easy to debug from the server. If you view the activity on the server, you will see the movie being transcoded. If you look at the details you will see the video, audio and subtitles and whether they are being direct played, transcoded, or direct streamed.
If you see the video stream being transcoded, and the subtitles indicating PGS, then Plex is burning the subtitles into the movie before streaming that movie to the client. In order to burn the PGS subtitles into the movie, Plex needs to transcode the video stream.
PGS subtitles are images and not text. Most Plex clients don't support PGS subtitles, so Plex needs to handle them. A client like the NVIDIA SHIELD is able to display PGS subtitles without having Plex first burn them into the video stream, so the movie should direct play on that client.
There are three solutions to this issue:
- Turn off subtitles on the client when streaming the movie from Plex.
- Use SRT subtitles, which are text, instead of PGS subtitles.
- If subtitles are always needed, burn them into the movie when encoding the movie.
Plex will transcode your movie before streaming it to your client if it determines the client can't handle the movie in its current format. If you use one of the above solutions, then you should be able to direct play your movie on your client and prevent Plex from consuming too many resources on your server.