click
Maveno 1 year ago
parent 7d85b45d68
commit 5ed97e0b9b

@ -366,7 +366,7 @@ def searchSubtitleFiles(dir, prefix):
sesl_match = re.compile(SEASON_EPISODE_STREAM_LANGUAGE_MATCH) sesl_match = re.compile(SEASON_EPISODE_STREAM_LANGUAGE_MATCH)
availableFileSubtitles = [] availableFileSubtitleDescriptors = []
for subtitleFilename in os.listdir(dir): for subtitleFilename in os.listdir(dir):
if subtitleFilename.startswith(prefix) and subtitleFilename.endswith('.' + SUBTITLE_FILE_EXTENSION): if subtitleFilename.startswith(prefix) and subtitleFilename.endswith('.' + SUBTITLE_FILE_EXTENSION):
sesl_result = sesl_match.search(subtitleFilename) sesl_result = sesl_match.search(subtitleFilename)
@ -381,11 +381,11 @@ def searchSubtitleFiles(dir, prefix):
subtitleFileDescriptor['stream'] = int(sesl_result.group(3)) subtitleFileDescriptor['stream'] = int(sesl_result.group(3))
subtitleFileDescriptor['language'] = sesl_result.group(4) subtitleFileDescriptor['language'] = sesl_result.group(4)
availableFileSubtitles.append(subtitleFileDescriptor) availableFileSubtitleDescriptors.append(subtitleFileDescriptor)
click.echo(f"Found {len(availableFileSubtitles)} subtitles in files\n") click.echo(f"Found {len(availableFileSubtitleDescriptors)} subtitles in files\n")
return availableFileSubtitles return availableFileSubtitleDescriptors
@click.group() @click.group()
@ -524,10 +524,11 @@ def convert(ctx,
e_match = re.compile(EPISODE_INDICATOR_MATCH) e_match = re.compile(EPISODE_INDICATOR_MATCH)
## Conversion parameters
# Parse subtitle files # Parse subtitle files
context['import_subtitles'] = (subtitle_directory and subtitle_prefix) context['import_subtitles'] = (subtitle_directory and subtitle_prefix)
availableFileSubtitles = searchSubtitleFiles(subtitle_directory, subtitle_prefix) if context['import_subtitles'] else [] availableFileSubtitleDescriptors = searchSubtitleFiles(subtitle_directory, subtitle_prefix) if context['import_subtitles'] else []
# Overwrite audio tags if set # Overwrite audio tags if set
audioLanguages = audio_language audioLanguages = audio_language
@ -537,6 +538,11 @@ def convert(ctx,
subtitleLanguages = subtitle_language subtitleLanguages = subtitle_language
subtitleTitles = subtitle_title subtitleTitles = subtitle_title
defaultAudio = default_audio
defaultSubtitle = default_subtitle
forcedAudio = forced_audio
forcedSubtitle = forced_subtitle
# Process crop parameters # Process crop parameters
context['perform_crop'] = (crop != 'none') context['perform_crop'] = (crop != 'none')
@ -654,36 +660,36 @@ def convert(ctx,
#NOTE: It is currently expected that all source file have the same substream pattern, e.g. coming from the same encoder #NOTE: It is currently expected that all source file have the same substream pattern, e.g. coming from the same encoder
defaultAudioStreams = [a for a in sourceStreamDescriptor[STREAM_TYPE_AUDIO] if a['disposition']['default'] == 1] numDefaultAudioStreams = len([a for a in sourceStreamDescriptor[STREAM_TYPE_AUDIO] if a['disposition']['default'] == 1])
if default_audio == -1 and len(defaultAudioStreams) > 1: if defaultAudio == -1 and numDefaultAudioStreams > 1:
default_audio = click.prompt("More than one default audio stream detected! Please select stream", type=int) defaultAudio = click.prompt("More than one default audio stream detected! Please select stream", type=int)
forcedAudioStreams = [a for a in sourceStreamDescriptor[STREAM_TYPE_AUDIO] if a['disposition']['forced'] == 1] numForcedAudioStreams = len([a for a in sourceStreamDescriptor[STREAM_TYPE_AUDIO] if a['disposition']['forced'] == 1])
if forced_audio == -1 and len(forcedAudioStreams) > 1: if forcedAudio == -1 and numForcedAudioStreams > 1:
forced_audio = click.prompt("More than one forced audio stream detected! Please select stream", type=int) forcedAudio = click.prompt("More than one forced audio stream detected! Please select stream", type=int)
defaultSubtitleStreams = [s for s in sourceStreamDescriptor[STREAM_TYPE_SUBTITLE] if s['disposition']['default'] == 1] numDefaultSubtitleStreams = len([s for s in sourceStreamDescriptor[STREAM_TYPE_SUBTITLE] if s['disposition']['default'] == 1])
if default_subtitle == -1 and len(defaultSubtitleStreams) > 1: if defaultSubtitle == -1 and numDefaultSubtitleStreams > 1:
default_subtitle = click.prompt("More than one default subtitle stream detected! Please select stream", type=int) defaultSubtitle = click.prompt("More than one default subtitle stream detected! Please select stream", type=int)
forcedSubtitleStreams = [s for s in sourceStreamDescriptor[STREAM_TYPE_SUBTITLE] if s['disposition']['forced'] == 1] numForcedSubtitleStreams = len([s for s in sourceStreamDescriptor[STREAM_TYPE_SUBTITLE] if s['disposition']['forced'] == 1])
if forced_subtitle == -1 and len(forcedSubtitleStreams) > 1: if forcedSubtitle == -1 and numForcedSubtitleStreams > 1:
forced_subtitle = click.prompt("More than one forced subtitle stream detected! Please select stream", type=int) forcedSubtitle = click.prompt("More than one forced subtitle stream detected! Please select stream", type=int)
#Fix multiple default/forced tags #Fix multiple default/forced tags
if default_audio != -1: if defaultAudio != -1:
for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_AUDIO])): for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_AUDIO])):
targetStreamDescriptor[STREAM_TYPE_AUDIO][substreamIndex]['disposition']['default'] = 1 if substreamIndex == default_audio else 0 targetStreamDescriptor[STREAM_TYPE_AUDIO][substreamIndex]['disposition']['default'] = 1 if substreamIndex == defaultAudio else 0
if forced_audio != -1: if forcedAudio != -1:
for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_AUDIO])): for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_AUDIO])):
targetStreamDescriptor[STREAM_TYPE_AUDIO][substreamIndex]['disposition']['forced'] = 1 if substreamIndex == forced_audio else 0 targetStreamDescriptor[STREAM_TYPE_AUDIO][substreamIndex]['disposition']['forced'] = 1 if substreamIndex == forcedAudio else 0
if default_subtitle != -1: if defaultSubtitle != -1:
for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_SUBTITLE])): for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_SUBTITLE])):
targetStreamDescriptor[STREAM_TYPE_SUBTITLE][substreamIndex]['disposition']['default'] = 1 if substreamIndex == default_subtitle else 0 targetStreamDescriptor[STREAM_TYPE_SUBTITLE][substreamIndex]['disposition']['default'] = 1 if substreamIndex == defaultSubtitle else 0
if forced_subtitle != -1: if forcedSubtitle != -1:
for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_SUBTITLE])): for substreamIndex in range(len(targetStreamDescriptor[STREAM_TYPE_SUBTITLE])):
targetStreamDescriptor[STREAM_TYPE_SUBTITLE][substreamIndex]['disposition']['forded'] = 1 if substreamIndex == forced_subtitle else 0 targetStreamDescriptor[STREAM_TYPE_SUBTITLE][substreamIndex]['disposition']['forded'] = 1 if substreamIndex == forcedSubtitle else 0
click.echo('Target streans:') click.echo('Target streans:')
@ -701,21 +707,21 @@ def convert(ctx,
matchingSubtitles = [] matchingSubtitles = []
if context['import_subtitles']: if context['import_subtitles']:
subtitles = [a for a in availableFileSubtitles if a['season'] == season and a['episode'] == episode] subtitles = [a for a in availableFileSubtitleDescriptors if a['season'] == season and a['episode'] == episode]
mSubtitles = sorted(subtitles, key=lambda d: d['stream']) mSubtitles = sorted(subtitles, key=lambda d: d['stream'])
for sfd in mSubtitles: for sfd in mSubtitles:
subtitleFileTokens += ['-i', sfd['path']] subtitleFileTokens += ['-i', sfd['path']]
for streamIndex in range(len(mSubtitles)): for streamIndex in range(len(mSubtitles)):
mSubtitles[streamIndex]['forced'] = 1 if forced_subtitle != -1 and streamIndex == forced_subtitle else 0 mSubtitles[streamIndex]['forced'] = 1 if forcedSubtitle != -1 and streamIndex == forcedSubtitle else 0
mSubtitles[streamIndex]['default'] = 1 if default_subtitle != -1 and streamIndex == default_subtitle else 0 mSubtitles[streamIndex]['default'] = 1 if defaultSubtitle != -1 and streamIndex == defaultSubtitle else 0
if streamIndex <= len(subtitleTitles) -1: if streamIndex <= len(subtitleTitles) -1:
mSubtitles[streamIndex]['title'] = subtitleTitles[streamIndex] mSubtitles[streamIndex]['title'] = subtitleTitles[streamIndex]
if default_subtitle != -1 and jellyfin: if defaultSubtitle != -1 and jellyfin:
matchingSubtitles = getReorderedSubstreams(mSubtitles, default_subtitle) matchingSubtitles = getReorderedSubstreams(mSubtitles, defaultSubtitle)
else: else:
matchingSubtitles = mSubtitles matchingSubtitles = mSubtitles
@ -757,29 +763,29 @@ def convert(ctx,
subtitleStreams[streamIndex]['tags']['title'] = subtitleTitles[streamIndex] subtitleStreams[streamIndex]['tags']['title'] = subtitleTitles[streamIndex]
# Reorder audio stream descriptors and create disposition options if default is given per command line option # Reorder audio stream descriptors and create disposition options if default is given per command line option
if default_audio == -1: if defaultAudio == -1:
sourceAudioStreams = audioStreams sourceAudioStreams = audioStreams
else: else:
for streamIndex in range(len(audioStreams)): for streamIndex in range(len(audioStreams)):
audioStreams[streamIndex]['disposition']['default'] = 1 if streamIndex == default_audio else 0 audioStreams[streamIndex]['disposition']['default'] = 1 if streamIndex == defaultAudio else 0
sourceAudioStreams = getReorderedSubstreams(audioStreams, default_audio) if jellyfin else audioStreams sourceAudioStreams = getReorderedSubstreams(audioStreams, defaultAudio) if jellyfin else audioStreams
dispositionTokens += generateDispositionTokens(sourceAudioStreams) dispositionTokens += generateDispositionTokens(sourceAudioStreams)
# Set forced tag in subtitle descriptor if given per command line option # Set forced tag in subtitle descriptor if given per command line option
if forced_subtitle != -1: if forcedSubtitle != -1:
for streamIndex in range(len(subtitleStreams)): for streamIndex in range(len(subtitleStreams)):
subtitleStreams[streamIndex]['disposition']['forced'] = 1 if streamIndex == forced_subtitle else 0 subtitleStreams[streamIndex]['disposition']['forced'] = 1 if streamIndex == forcedSubtitle else 0
# Reorder subtitle stream descriptors and create disposition options if default is given per command line option # Reorder subtitle stream descriptors and create disposition options if default is given per command line option
if default_subtitle == -1: if defaultSubtitle == -1:
sourceSubtitleStreams = subtitleStreams sourceSubtitleStreams = subtitleStreams
else: else:
for streamIndex in range(len(subtitleStreams)): for streamIndex in range(len(subtitleStreams)):
subtitleStreams[streamIndex]['disposition']['default'] = 1 if streamIndex == default_subtitle else 0 subtitleStreams[streamIndex]['disposition']['default'] = 1 if streamIndex == defaultSubtitle else 0
sourceSubtitleStreams = getReorderedSubstreams(subtitleStreams, default_subtitle) if jellyfin else subtitleStreams sourceSubtitleStreams = getReorderedSubstreams(subtitleStreams, defaultSubtitle) if jellyfin else subtitleStreams
dispositionTokens += generateDispositionTokens(sourceSubtitleStreams) dispositionTokens += generateDispositionTokens(sourceSubtitleStreams)
@ -806,7 +812,7 @@ def convert(ctx,
numMatchingSubtitles = len(matchingSubtitles) numMatchingSubtitles = len(matchingSubtitles)
if jellyfin and default_subtitle != -1: if jellyfin and defaultSubtitle != -1:
subtitleSequence = getModifiedStreamOrder(numMatchingSubtitles, default_subtitle) subtitleSequence = getModifiedStreamOrder(numMatchingSubtitles, default_subtitle)
else: else:
subtitleSequence = range(numMatchingSubtitles) subtitleSequence = range(numMatchingSubtitles)

Loading…
Cancel
Save