2026-09-27, 07:49 PM
I run a pretty large library and the official Subtitle Extract plugin was bugging me. It dumps every subtitle stream in every file into Jellyfin's cache, and I only ever want forced English tracks. On releases that have 20+ subtitle streams, that's a lot of ffmpeg work for files I'm going to ignore.
So I forked it. It's called Subtitle Extract Plus:
https://github.com/jnracreates/subtitle-extract-plus
Things it does that the official one doesn't:
- Only extracts the languages you list. I have mine set to just "en".
- Filter by forced / non-forced, or both. Mine only does forced.
- Writes the .srt next to the video file instead of into Jellyfin's cache, so they show up as external subs. Can be turned off if you want the old behavior.
- Writes .en.srt instead of .eng.srt (matches what Jellyfin expects).
- Skips files that already have a subtitle, so nightly runs don't redo work.
- Has a path filter field so you can test on one movie without walking the whole library.
I also rewrote the extraction to call ffmpeg per stream instead of going through Jellyfin's ISubtitleEncoder. Jellyfin batches all subtitle streams into one ffmpeg call, and if any single stream is empty (which happens a lot - some releases have zero-byte placeholder forced tracks), ffmpeg returns non-zero and Jellyfin throws out the whole batch. Meaning the streams that extracted fine get deleted too. Extracting one stream at a time means an empty track only affects itself.
Install: Dashboard -> Plugins -> Repositories, add this URL:
https://raw.githubusercontent.com/jnracr...ifest.json
Then it shows up in the catalog. You can also grab the zip from releases if you'd rather do it manually.
Forked from the official plugin, MIT licensed. If you find a release that breaks it, let me know.
So I forked it. It's called Subtitle Extract Plus:
https://github.com/jnracreates/subtitle-extract-plus
Things it does that the official one doesn't:
- Only extracts the languages you list. I have mine set to just "en".
- Filter by forced / non-forced, or both. Mine only does forced.
- Writes the .srt next to the video file instead of into Jellyfin's cache, so they show up as external subs. Can be turned off if you want the old behavior.
- Writes .en.srt instead of .eng.srt (matches what Jellyfin expects).
- Skips files that already have a subtitle, so nightly runs don't redo work.
- Has a path filter field so you can test on one movie without walking the whole library.
I also rewrote the extraction to call ffmpeg per stream instead of going through Jellyfin's ISubtitleEncoder. Jellyfin batches all subtitle streams into one ffmpeg call, and if any single stream is empty (which happens a lot - some releases have zero-byte placeholder forced tracks), ffmpeg returns non-zero and Jellyfin throws out the whole batch. Meaning the streams that extracted fine get deleted too. Extracting one stream at a time means an empty track only affects itself.
Install: Dashboard -> Plugins -> Repositories, add this URL:
https://raw.githubusercontent.com/jnracr...ifest.json
Then it shows up in the catalog. You can also grab the zip from releases if you'd rather do it manually.
Forked from the official plugin, MIT licensed. If you find a release that breaks it, let me know.

