From 11d06d909e83252e1d85b1936a2540e533077a40 Mon Sep 17 00:00:00 2001 From: croneter Date: Mon, 13 Sep 2021 08:52:45 +0200 Subject: [PATCH] Transcoding: Fix Plex burning-in subtitles when it should not --- resources/lib/playback_decision.py | 15 +++++---------- resources/lib/plex_functions.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/resources/lib/playback_decision.py b/resources/lib/playback_decision.py index aa8f3ba5..8b2d3640 100644 --- a/resources/lib/playback_decision.py +++ b/resources/lib/playback_decision.py @@ -426,7 +426,8 @@ def setup_transcoding_audio_subtitle_prefs(mediastreams, part_id): action_type='PUT', parameters=args) - select_subs_index = '' + # Zero telling the PMS to deactivate subs altogether + select_subs_index = 0 if sub_num == 1: # Note: we DO need to tell the PMS that we DONT want any sub # Otherwise, the PMS might pick-up the last one @@ -445,15 +446,9 @@ def setup_transcoding_audio_subtitle_prefs(mediastreams, part_id): LOG.info('User chose to not burn-in any subtitles') else: LOG.info('User chose to burn-in subtitle %s: %s', - select_subs_index, - subtitle_streams[resp].decode('utf-8')) + select_subs_index, + subtitle_streams[resp].decode('utf-8')) select_subs_index = subtitle_streams_list[resp - 1] # Now prep the PMS for our choice - args = { - 'subtitleStreamID': select_subs_index, - 'allParts': 1 - } - DU().downloadUrl('{server}/library/parts/%s' % part_id, - action_type='PUT', - parameters=args) + PF.change_subtitle(select_subs_index, part_id) return True diff --git a/resources/lib/plex_functions.py b/resources/lib/plex_functions.py index 3d421122..dc26a164 100644 --- a/resources/lib/plex_functions.py +++ b/resources/lib/plex_functions.py @@ -1117,3 +1117,19 @@ def playback_decision(path, media, part, playmethod, video=True, args=None): return DU().downloadUrl(utils.extend_url(url, arguments), headerOptions=v.STREAMING_HEADERS, reraise=True) + + +def change_subtitle(plex_stream_id, part_id): + """ + Tell the PMS to display/burn-in the subtitle stream with id plex_stream_id + for the Part (PMS XML etree tag "Part") with unique id part_id. + - plex_stream_id = 0 will deactivate the subtitle + - We always do this for ALL parts of a video + """ + arguments = { + 'subtitleStreamID': plex_stream_id, + 'allParts': 1 + } + url = '{server}/library/parts/%s' % part_id + return DU().downloadUrl(utils.extend_url(url, arguments), + action_type='PUT')