nightly subtitle file import
This commit is contained in:
15
bin/ffx.py
15
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,7 +402,10 @@ 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()]}")
|
||||
|
||||
@@ -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"])
|
||||
|
||||
Reference in New Issue
Block a user