Jellyfin Forum
Approach to Internal/External Subtitles - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Support (https://forum.jellyfin.org/f-support)
+--- Forum: General Questions (https://forum.jellyfin.org/f-general-questions)
+--- Thread: Approach to Internal/External Subtitles (/t-approach-to-internal-external-subtitles)



Approach to Internal/External Subtitles - BotchedMiracle - 2025-01-30

I'm looking to optimize my entire library's approach to handling subtitles. I have a few main questions:

1.  I have 4K HDR files that will transcode instead of direct play when certain PGS subs are being displayed. Would extracting them and making them external prevent the entire video from transcoding?

2.  Does Jellyfin prioritize external subtitle files (.srt) before any embedded ones in the media file? If so, is there any indication when viewing media which subtitle Jellyfin is reading?

3. Is there any preferred tool to run against my library to extract, place alongside, and subsequently remove the internal subtitles to be left with ONLY externals? I have a wide mix of formats, 1 tool would be awesome instead of a different one for every format. I know the official Subtitle Extract Plugin could work for this if there was an option to change the destination, and also remove embedded subs, but I think you can't do either of those.

Thanks for reading. Info is sparse regarding these hurdles.


RE: Approach to Internal/External Subtitles - TheDreadPirate - 2025-01-30

Currently, only Jellyfin-web and Jellyfin Media Player support directly playing PGS subs. For Jellyfin-web it is experimental and, from my experience, hit or miss. Sometimes causes video, audio, and subs to desync.

Jellyfin doesn't prioritize any, really. It will show both embedded and external if you have both. Some clients require that, for example, SRT subs be external. Some can play embedded subs. If you don't already have external SRT subs Jellyfin will extract them either on the fly or pre-extract them if you have the "Subtitle Extract" plugin installed.

If you don't care about using a little extra storage space, the Subtitle Extract plugin will pre-extract subtitles that are embedded and save them in the Jellyfin application directory. Not with your media.

Otherwise, you'd have to use something like MKVToolnix or ffmpeg to extract and remove subs. ffmpeg could be scripted to do this.


RE: Approach to Internal/External Subtitles - BotchedMiracle - 2025-01-31

Appreciate the response. To clarify:

Would pre-extracting subtitles (either using the plugin or other tools) prevent the entire video from transcoding if embedded subs forced a transcode previously? Not sure what function the "on the fly" extraction has on someone who doesn't have the plugin installed, or if it's even relevant to force direct-play with pgs subs.


RE: Approach to Internal/External Subtitles - theguymadmax - 2025-01-31

The answers may vary depending on the client you're using—whether it's Android TV, Roku, WebUI (Chrome, Firefox), Jellyfin Media Player, or Swiftfin. Could you specify which one you're referring to?

Also, most clients will default to using external SRT files if they're available, and yes, this should prevent transcoding. One thing Dread forgot to mention is that the Android TV client also supports PGS subtitles without transcoding, but only for embedded PGS subtitles (it doesn't support external PGS files).

Personally, I use external SRT files for all my media to avoid transcoding on the clients I use.


RE: Approach to Internal/External Subtitles - BotchedMiracle - 2025-01-31

Ah, In this case I'm concerned with the LG WebOS cient. However if there's an appliance that could achieve this that you know of like an Apple TV or something, let me knwow.


RE: Approach to Internal/External Subtitles - theguymadmax - 2025-01-31

It really depends on the media you're using. As I mentioned, PGS subtitles are natively supported on the Android TV client. If you have DV/HDR10+ content, I wouldn’t recommend the latest Google Streamer or Firestick, as there’s an issue affecting those players. If your media isn't DV/HDR10+, either one should work just fine. In my opinion, the best player is the Nvidia Shield, although it’s a bit pricey and could use a refresh. I haven’t tried an iOS or Roku client, so I can’t speak to those, but each client will have its own quirks.


RE: Approach to Internal/External Subtitles - BotchedMiracle - 2025-01-31

Oh I replied to your comment before you edited it.

For what it's worth, Only HDR10 media, no DV.

I guess I'll extract some subs as a test and report back regarding WebOS.


RE: Approach to Internal/External Subtitles - visualblind - 2025-02-07

(2025-01-31, 02:05 AM)theguymadmax Wrote: The answers may vary depending on the client you're using—whether it's Android TV, Roku, WebUI (Chrome, Firefox), Jellyfin Media Player, or Swiftfin. Could you specify which one you're referring to?

Also, most clients will default to using external SRT files if they're available, and yes, this should prevent transcoding. One thing Dread forgot to mention is that the Android TV client also supports PGS subtitles without transcoding, but only for embedded PGS subtitles (it doesn't support external PGS files).

Personally, I use external SRT files for all my media to avoid transcoding on the clients I use.

So many different configurations it feels like a "Where's Waldo?" collage.

That's awesome that PGS is supposed to Direct Play now with jellyfin-web and Android TV. I have avoided anything related to PGS because in my mind it was always the case that it would cause transcoding and I have always thought "pictures of text" might take the cake for the dumbest idea I have heard. I'm sure there's lots of others I can't think of right now.

I haven't had any issues with any client (jellyfin-web, android tv, roku) doing Direct Play with the following subtitle configurations:
  • Internal SRT inside MKV container
  • External SRT alongside MKV container
  • Internal mov_text (mp4 timed-text) inside MP4 container
  • External SRT alongside MP4 container



RE: Approach to Internal/External Subtitles - amorapotter - 2025-03-13

(2025-01-30, 08:38 PM)BotchedMiracle Wrote: I'm looking to optimize my entire library's approach to handling subtitles. I have a few main questions:

1.  I have 4K HDR files that will transcode instead of direct play when certain PGS subs are being displayed. Would extracting them and making them external prevent the entire video from transcoding?

2.  Does Jellyfin prioritize external subtitle files (.srt) before any embedded ones in the media file? If so, is there any indication when viewing media which subtitle Jellyfin is reading?

3. Is there any preferred tool to run against my library to extract, place alongside, slopeand subsequently remove the internal subtitles to be left with ONLY externals? I have a wide mix of formats, 1 tool would be awesome instead of a different one for every format. I know the official Subtitle Extract Plugin could work for this if there was an option to change the destination, and also remove embedded subs, but I think you can't do either of those.

Thanks for reading. Info is sparse regarding these hurdles.

I'll answer each of your questions as best I can:

1. Yes, in many cases, extracting PGS (Presentation Graphic Stream) subtitles and converting them to an external text-based format like .srt can help avoid transcoding, especially with 4K HDR content.
2. Jellyfin doesn’t strictly prioritize external .srt files over embedded subtitles by default—it lists all available subtitles (internal and external) and lets you choose.
3. You’re right—info is sparse, and the Jellyfin Subtitle Extract Plugin has limitations (no destination override or embedded sub removal). No single tool perfectly automates everything across all formats, but here’s a practical approach using widely available software: FFmpeg + Scripting: It’s versatile, handles most video formats (MKV, MP4, TS, etc.), and can extract subtitles to external files. It’s not a one-click GUI, but it’s scriptable for batch processing your library. It won’t remove embedded subs directly—you’ll need a second step for that—but it’s a solid starting point.