nightly subtitle file import

click-textual 0.1.3
Maveno 12 months ago
parent 3463c1e371
commit 24d0700db2

@ -19,12 +19,14 @@ from ffx.track_disposition import TrackDisposition
from ffx.process import executeProcess from ffx.process import executeProcess
VERSION='0.1.2' VERSION='0.1.3'
# 0.1.1 # 0.1.1
# Bugfixes, TMBD identify shows # Bugfixes, TMBD identify shows
# 0.1.2 # 0.1.2
# Bugfixes # Bugfixes
# 0.1.3
# Subtitle file imports
@click.group() @click.group()
@ -224,6 +226,7 @@ def convert(ctx,
stereo_bitrate, stereo_bitrate,
ac3_bitrate, ac3_bitrate,
dts_bitrate, dts_bitrate,
subtitle_directory, subtitle_directory,
subtitle_prefix, subtitle_prefix,
@ -358,7 +361,10 @@ def convert(ctx,
if context['import_subtitles']: 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) fc = FfxController(context, sourceMediaDescriptor)
@ -396,7 +402,10 @@ def convert(ctx,
click.echo(f"fileBasename={fileBasename}") click.echo(f"fileBasename={fileBasename}")
if context['import_subtitles']: 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()]}") # 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()]}") # 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()]}")

@ -324,6 +324,7 @@ class MediaDescriptor:
return importFileTokens return importFileTokens
def getInputMappingTokens(self, use_sub_index: bool = True, only_video: bool = False): def getInputMappingTokens(self, use_sub_index: bool = True, only_video: bool = False):
# reorderedTrackDescriptors = self.getReorderedTrackDescriptors() # reorderedTrackDescriptors = self.getReorderedTrackDescriptors()
@ -363,11 +364,11 @@ class MediaDescriptor:
return inputMappingTokens return inputMappingTokens
def searchSubtitleFiles(searchDirectory, prefix): def searchSubtitleFiles(self, searchDirectory, prefix):
sesl_match = re.compile(MediaDescriptor.SEASON_EPISODE_STREAM_LANGUAGE_MATCH) sesl_match = re.compile(MediaDescriptor.SEASON_EPISODE_STREAM_LANGUAGE_MATCH)
availableFileSubtitleDescriptors = [] subtitleFileDescriptors = []
for subtitleFilename in os.listdir(searchDirectory): for subtitleFilename in os.listdir(searchDirectory):
if subtitleFilename.startswith(prefix) and subtitleFilename.endswith( if subtitleFilename.startswith(prefix) and subtitleFilename.endswith(
"." + MediaDescriptor.SUBTITLE_FILE_EXTENSION "." + MediaDescriptor.SUBTITLE_FILE_EXTENSION
@ -381,48 +382,48 @@ class MediaDescriptor:
subtitleFileDescriptor["path"] = subtitleFilePath subtitleFileDescriptor["path"] = subtitleFilePath
subtitleFileDescriptor["season"] = int(sesl_result.group(1)) subtitleFileDescriptor["season"] = int(sesl_result.group(1))
subtitleFileDescriptor["episode"] = int(sesl_result.group(2)) 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) subtitleFileDescriptor["language"] = sesl_result.group(4)
availableFileSubtitleDescriptors.append(subtitleFileDescriptor) subtitleFileDescriptors.append(subtitleFileDescriptor)
click.echo( click.echo(f"Available subtitle files {subtitleFileDescriptors}\n")
f"Found {len(availableFileSubtitleDescriptors)} subtitles in files\n"
)
return availableFileSubtitleDescriptors return subtitleFileDescriptors
def importSubtitles(
self, searchDirectory, prefix, season: int = -1, episode: int = -1
):
availableFileSubtitleDescriptors = self.searchSubtitleFiles( def importSubtitles(self, searchDirectory, prefix, season: int = -1, episode: int = -1):
searchDirectory, prefix
) click.echo(f"Season: {season} Episode: {episode}")
availableFileSubtitleDescriptors = self.searchSubtitleFiles(searchDirectory, prefix)
click.echo(f"availableFileSubtitleDescriptors: {availableFileSubtitleDescriptors}")
subtitleTracks = self.getSubtitleTracks() subtitleTracks = self.getSubtitleTracks()
click.echo(f"subtitleTracks: {[s.getIndex() for s in subtitleTracks]}")
# if len(availableFileSubtitleDescriptors) != len(subtitleTracks): # if len(availableFileSubtitleDescriptors) != len(subtitleTracks):
# raise click.ClickException(f"MediaDescriptor.importSubtitles(): Number if subtitle files not matching number of subtitle tracks") # raise click.ClickException(f"MediaDescriptor.importSubtitles(): Number if subtitle files not matching number of subtitle tracks")
matchingFileSubtitleDescriptors = ( matchingSubtitleFileDescriptors = (
sorted( sorted(
[ [
d d
for d in availableFileSubtitleDescriptors for d in availableFileSubtitleDescriptors
if d["season"] == int(season) and d["episode"] == int(episode) if d["season"] == int(season) and d["episode"] == int(episode)
], ],
key=lambda d: d["stream"], key=lambda d: d["index"],
) )
if availableFileSubtitleDescriptors if availableFileSubtitleDescriptors
else [] else []
) )
for mfsd in matchingFileSubtitleDescriptors: click.echo(f"matchingSubtitleFileDescriptors: {matchingSubtitleFileDescriptors}")
matchingSubtitleTrackDescriptor = [
s for s in subtitleTracks if s.getIndex() == mfsd["stream"] for msfd in matchingSubtitleFileDescriptors:
] matchingSubtitleTrackDescriptor = [s for s in subtitleTracks if s.getIndex() == msfd["index"]]
if matchingSubtitleTrackDescriptor: if matchingSubtitleTrackDescriptor:
matchingSubtitleTrackDescriptor[0].setExternalSourceFilePath( click.echo(f"Found matching subtitle file {msfd["path"]}\n")
mfsd["path"] matchingSubtitleTrackDescriptor[0].setExternalSourceFilePath(msfd["path"])
)

Loading…
Cancel
Save