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