diff --git a/bin/ffx.py b/bin/ffx.py index 3b09e2b..082bd87 100755 --- a/bin/ffx.py +++ b/bin/ffx.py @@ -19,12 +19,14 @@ from ffx.track_disposition import TrackDisposition from ffx.process import executeProcess -VERSION='0.1.2' +VERSION='0.1.3' # 0.1.1 # Bugfixes, TMBD identify shows # 0.1.2 # Bugfixes +# 0.1.3 +# Subtitle file imports @click.group() @@ -224,6 +226,7 @@ def convert(ctx, stereo_bitrate, ac3_bitrate, dts_bitrate, + subtitle_directory, subtitle_prefix, @@ -358,7 +361,10 @@ def convert(ctx, if context['import_subtitles']: - sourceMediaDescriptor.importSubtitles(context['subtitle_directory'], context['subtitle_prefix']) + sourceMediaDescriptor.importSubtitles(context['subtitle_directory'], + context['subtitle_prefix'], + mediaFileProperties.getSeason(), + mediaFileProperties.getEpisode()) fc = FfxController(context, sourceMediaDescriptor) @@ -396,8 +402,11 @@ def convert(ctx, click.echo(f"fileBasename={fileBasename}") if context['import_subtitles']: - targetMediaDescriptor.importSubtitles(context['subtitle_directory'], context['subtitle_prefix']) - + targetMediaDescriptor.importSubtitles(context['subtitle_directory'], + context['subtitle_prefix'], + mediaFileProperties.getSeason(), + mediaFileProperties.getEpisode()) + # raise click.ClickException(f"tmd subindices: {[t.getSubIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]}") # click.echo(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getAllTrackDescriptors()]}") diff --git a/bin/ffx/media_descriptor.py b/bin/ffx/media_descriptor.py index ecc2962..6ef5635 100644 --- a/bin/ffx/media_descriptor.py +++ b/bin/ffx/media_descriptor.py @@ -324,6 +324,7 @@ class MediaDescriptor: return importFileTokens + def getInputMappingTokens(self, use_sub_index: bool = True, only_video: bool = False): # reorderedTrackDescriptors = self.getReorderedTrackDescriptors() @@ -363,11 +364,11 @@ class MediaDescriptor: return inputMappingTokens - def searchSubtitleFiles(searchDirectory, prefix): + def searchSubtitleFiles(self, searchDirectory, prefix): sesl_match = re.compile(MediaDescriptor.SEASON_EPISODE_STREAM_LANGUAGE_MATCH) - availableFileSubtitleDescriptors = [] + subtitleFileDescriptors = [] for subtitleFilename in os.listdir(searchDirectory): if subtitleFilename.startswith(prefix) and subtitleFilename.endswith( "." + MediaDescriptor.SUBTITLE_FILE_EXTENSION @@ -381,48 +382,48 @@ class MediaDescriptor: subtitleFileDescriptor["path"] = subtitleFilePath subtitleFileDescriptor["season"] = int(sesl_result.group(1)) subtitleFileDescriptor["episode"] = int(sesl_result.group(2)) - subtitleFileDescriptor["stream"] = int(sesl_result.group(3)) + subtitleFileDescriptor["index"] = int(sesl_result.group(3)) subtitleFileDescriptor["language"] = sesl_result.group(4) - availableFileSubtitleDescriptors.append(subtitleFileDescriptor) + subtitleFileDescriptors.append(subtitleFileDescriptor) - click.echo( - f"Found {len(availableFileSubtitleDescriptors)} subtitles in files\n" - ) + click.echo(f"Available subtitle files {subtitleFileDescriptors}\n") - return availableFileSubtitleDescriptors + return subtitleFileDescriptors - def importSubtitles( - self, searchDirectory, prefix, season: int = -1, episode: int = -1 - ): - availableFileSubtitleDescriptors = self.searchSubtitleFiles( - searchDirectory, prefix - ) + def importSubtitles(self, searchDirectory, prefix, season: int = -1, episode: int = -1): + + click.echo(f"Season: {season} Episode: {episode}") + + availableFileSubtitleDescriptors = self.searchSubtitleFiles(searchDirectory, prefix) + + click.echo(f"availableFileSubtitleDescriptors: {availableFileSubtitleDescriptors}") subtitleTracks = self.getSubtitleTracks() + + click.echo(f"subtitleTracks: {[s.getIndex() for s in subtitleTracks]}") # if len(availableFileSubtitleDescriptors) != len(subtitleTracks): # raise click.ClickException(f"MediaDescriptor.importSubtitles(): Number if subtitle files not matching number of subtitle tracks") - matchingFileSubtitleDescriptors = ( + matchingSubtitleFileDescriptors = ( sorted( [ d for d in availableFileSubtitleDescriptors if d["season"] == int(season) and d["episode"] == int(episode) ], - key=lambda d: d["stream"], + key=lambda d: d["index"], ) if availableFileSubtitleDescriptors else [] ) - for mfsd in matchingFileSubtitleDescriptors: - matchingSubtitleTrackDescriptor = [ - s for s in subtitleTracks if s.getIndex() == mfsd["stream"] - ] + click.echo(f"matchingSubtitleFileDescriptors: {matchingSubtitleFileDescriptors}") + + for msfd in matchingSubtitleFileDescriptors: + matchingSubtitleTrackDescriptor = [s for s in subtitleTracks if s.getIndex() == msfd["index"]] if matchingSubtitleTrackDescriptor: - matchingSubtitleTrackDescriptor[0].setExternalSourceFilePath( - mfsd["path"] - ) + click.echo(f"Found matching subtitle file {msfd["path"]}\n") + matchingSubtitleTrackDescriptor[0].setExternalSourceFilePath(msfd["path"])