diff --git a/resources/language/resource.language.de/strings.po b/resources/language/resource.language.de/strings.po
index 49e1786..e1d6c6f 100644
--- a/resources/language/resource.language.de/strings.po
+++ b/resources/language/resource.language.de/strings.po
@@ -1329,3 +1329,19 @@ msgstr "Abspielen mit Track-Auswahl"
msgctxt "#30702"
msgid "Nur Forced-Untertitel auswählen (keine normalen)"
msgstr "Nur Forced-Untertitel auswählen (keine normalen)"
+
+msgctxt "#30703"
+msgid "Untertitel-Codec-Präferenz"
+msgstr "Untertitel-Codec-Präferenz"
+
+msgctxt "#30704"
+msgid "PGS bevorzugt (bessere Qualität beim Brennen)"
+msgstr "PGS bevorzugt (bessere Qualität beim Brennen)"
+
+msgctxt "#30705"
+msgid "SRT bevorzugt (flexibel, kann gestreamt werden)"
+msgstr "SRT bevorzugt (flexibel, kann gestreamt werden)"
+
+msgctxt "#30706"
+msgid "Keine Präferenz"
+msgstr "Keine Präferenz"
diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po
index 64abb6b..2a5a170 100644
--- a/resources/language/resource.language.en_gb/strings.po
+++ b/resources/language/resource.language.en_gb/strings.po
@@ -1320,3 +1320,19 @@ msgstr "Play with track selection"
msgctxt "#30702"
msgid "Only select forced subtitles (no regular subs)"
msgstr "Only select forced subtitles (no regular subs)"
+
+msgctxt "#30703"
+msgid "Subtitle codec preference"
+msgstr "Subtitle codec preference"
+
+msgctxt "#30704"
+msgid "Prefer PGS (better quality when burned)"
+msgstr "Prefer PGS (better quality when burned)"
+
+msgctxt "#30705"
+msgid "Prefer SRT (flexible, can be streamed)"
+msgstr "Prefer SRT (flexible, can be streamed)"
+
+msgctxt "#30706"
+msgid "No preference"
+msgstr "No preference"
diff --git a/resources/lib/play_utils.py b/resources/lib/play_utils.py
index 0d9cb72..38fa283 100644
--- a/resources/lib/play_utils.py
+++ b/resources/lib/play_utils.py
@@ -811,7 +811,13 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
prefer_forced = settings.getSetting("prefer_forced_subtitles") == "true"
only_forced = settings.getSetting("only_forced_subtitles") == "true"
- prefer_srt = settings.getSetting("prefer_srt_over_pgs") == "true"
+
+ # Subtitle codec preference: 0=PGS, 1=SRT, 2=No preference
+ codec_pref_index = int(settings.getSetting("subtitle_codec_preference") or "0")
+ prefer_pgs = codec_pref_index == 0
+ prefer_srt = codec_pref_index == 1
+ # codec_pref_index == 2 means no preference (both prefer_pgs and prefer_srt are False)
+
auto_no_subs = settings.getSetting("auto_no_subtitles_if_no_match") == "true"
# Language code mapping for better matching
@@ -966,8 +972,8 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
auto_selected = None
best_score = -1
- log.debug("Auto-selecting subtitle: preferred_lang={0}, prefer_forced={1}, only_forced={2}, prefer_srt={3}".format(
- preferred_sub_lang, prefer_forced, only_forced, prefer_srt))
+ log.debug("Auto-selecting subtitle: preferred_lang={0}, prefer_forced={1}, only_forced={2}, prefer_pgs={3}, prefer_srt={4}".format(
+ preferred_sub_lang, prefer_forced, only_forced, prefer_pgs, prefer_srt))
for stream in subtitle_streams_data:
score = 0
@@ -990,10 +996,10 @@ def audio_subs_pref(url, list_item, media_source, item_id, audio_stream_index, s
if prefer_forced and is_forced:
score += 50
- # Bonus for SRT if preferred
- if prefer_srt and codec in ['subrip', 'srt']:
+ # Bonus for codec preference
+ if prefer_pgs and codec in ['hdmv_pgs_subtitle', 'pgs']:
score += 30
- elif not prefer_srt and codec in ['hdmv_pgs_subtitle', 'pgs']:
+ elif prefer_srt and codec in ['subrip', 'srt']:
score += 30
# Small bonus for default
diff --git a/resources/settings.xml b/resources/settings.xml
index 1abe36f..f289cce 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -55,7 +55,7 @@
-
+