ff
This commit is contained in:
@@ -238,7 +238,7 @@ def convert(ctx,
|
|||||||
cTokens = crop.split(',')
|
cTokens = crop.split(',')
|
||||||
if cTokens and len(cTokens) == 2:
|
if cTokens and len(cTokens) == 2:
|
||||||
context['crop_start'] = int(cTokens[0])
|
context['crop_start'] = int(cTokens[0])
|
||||||
context['crop_lenght'] = int(cTokens[1])
|
context['crop_length'] = int(cTokens[1])
|
||||||
click.echo(f"Crop start={context['crop_start']} length={context['crop_length']}")
|
click.echo(f"Crop start={context['crop_start']} length={context['crop_length']}")
|
||||||
|
|
||||||
|
|
||||||
@@ -337,6 +337,9 @@ def convert(ctx,
|
|||||||
tmdbEpisodeResult = tc.queryEpisode(currentShowDescriptor.getId(), mediaFileProperties.getSeason(), mediaFileProperties.getEpisode())
|
tmdbEpisodeResult = tc.queryEpisode(currentShowDescriptor.getId(), mediaFileProperties.getSeason(), mediaFileProperties.getEpisode())
|
||||||
|
|
||||||
# click.echo(f"{tmdbEpisodeResult}")
|
# click.echo(f"{tmdbEpisodeResult}")
|
||||||
|
|
||||||
|
#print(type(tmdbEpisodeResult['name']))
|
||||||
|
#quit()
|
||||||
|
|
||||||
if tmdbEpisodeResult:
|
if tmdbEpisodeResult:
|
||||||
fileBasename = tc.getEpisodeFileBasename(currentShowDescriptor.getFilenamePrefix(),
|
fileBasename = tc.getEpisodeFileBasename(currentShowDescriptor.getFilenamePrefix(),
|
||||||
@@ -359,7 +362,7 @@ def convert(ctx,
|
|||||||
|
|
||||||
targetMediaDescriptor.setJellyfinOrder(context['jellyfin'])
|
targetMediaDescriptor.setJellyfinOrder(context['jellyfin'])
|
||||||
|
|
||||||
click.echo(f"Input mapping tokens: {targetMediaDescriptor.getInputMappingTokens()}")
|
click.echo(f"Input mapping tokens (2nd pass): {targetMediaDescriptor.getInputMappingTokens()}")
|
||||||
|
|
||||||
fc = FfxController(context, targetMediaDescriptor, sourceMediaDescriptor)
|
fc = FfxController(context, targetMediaDescriptor, sourceMediaDescriptor)
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,8 @@ class FfxController():
|
|||||||
|
|
||||||
|
|
||||||
def generateOutputTokens(self, filepath, format, ext):
|
def generateOutputTokens(self, filepath, format, ext):
|
||||||
return ['-f', format, f"{filepath}.{ext}"]
|
outputFilePath = f"{filepath}.{ext}"
|
||||||
|
return ['-f', format, outputFilePath]
|
||||||
|
|
||||||
|
|
||||||
def generateAudioEncodingTokens(self):
|
def generateAudioEncodingTokens(self):
|
||||||
@@ -199,157 +200,195 @@ class FfxController():
|
|||||||
return dispositionTokens
|
return dispositionTokens
|
||||||
|
|
||||||
|
|
||||||
|
# def generateMetadataTokens(self):
|
||||||
|
# """Source media descriptor is mandatory"""
|
||||||
|
#
|
||||||
|
# metadataTokens = []
|
||||||
|
#
|
||||||
|
# # click.echo(f"source media descriptor: track indices={[d.getIndex() for d in sourceMediaDescriptor.getAllTrackDescriptors()]}")
|
||||||
|
# # click.echo(f"target media descriptor: track indices={[d.getIndex() for d in targetMediaDescriptor.getAllTrackDescriptors()]}")
|
||||||
|
#
|
||||||
|
# # +jellyfin -jellyfin
|
||||||
|
# mediaDifferences = self.__targetMediaDescriptor.compare(self.__sourceMediaDescriptor)
|
||||||
|
#
|
||||||
|
# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
||||||
|
#
|
||||||
|
# click.echo(f"media diff {mediaDifferences}")
|
||||||
|
#
|
||||||
|
# if MediaDescriptor.TAGS_KEY in mediaDifferences.keys():
|
||||||
|
#
|
||||||
|
# sourceTags = self.__sourceMediaDescriptor.getTags()
|
||||||
|
# targetTags = self.__targetMediaDescriptor.getTags()
|
||||||
|
#
|
||||||
|
# #TODO: Warum erscheint nur -1 im output?
|
||||||
|
# if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys():
|
||||||
|
# # for removedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]:
|
||||||
|
# # row = (f"removed media tag: key='{removedTagKey}' value='{sourceTags[removedTagKey]}'",)
|
||||||
|
# # self.differencesTable.add_row(*map(str, row))
|
||||||
|
# pass
|
||||||
|
# #metadataTokens += [f"-map_metadata:g", "-1"]
|
||||||
|
#
|
||||||
|
# #for targetMediaTagKey in targetTags:
|
||||||
|
# #metadataTokens += [f"-metadata:g", f"{targetMediaTagKey}={targetTags[targetMediaTagKey]}"]
|
||||||
|
#
|
||||||
|
# else:
|
||||||
|
#
|
||||||
|
# if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys():
|
||||||
|
# for addedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]:
|
||||||
|
# # row = (f"added media tag: key='{addedTagKey}' value='{targetTags[addedTagKey]}'",)
|
||||||
|
# click.echo(f"added metadata key='{addedTagKey}' value='{targetTags[addedTagKey]}'->'{targetTags[addedTagKey]}'")
|
||||||
|
# # self.differencesTable.add_row(*map(str, row))
|
||||||
|
# #pass
|
||||||
|
# metadataTokens += [f"-metadata:g", f"{addedTagKey}={targetTags[addedTagKey]}"]
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys():
|
||||||
|
# for changedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]:
|
||||||
|
# #row = (f"changed media tag: key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'",)
|
||||||
|
# click.echo(f"changed metadata key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'")
|
||||||
|
# # self.differencesTable.add_row(*map(str, row))
|
||||||
|
# #pass
|
||||||
|
# metadataTokens += [f"-metadata:g", f"{changedTagKey}={targetTags[changedTagKey]}"]
|
||||||
|
#
|
||||||
|
# if MediaDescriptor.TRACKS_KEY in mediaDifferences.keys():
|
||||||
|
#
|
||||||
|
# sourceTrackDescriptors = self.__sourceMediaDescriptor.getAllTrackDescriptors()
|
||||||
|
# targetTrackDescriptors = self.__targetMediaDescriptor.getReorderedTrackDescriptors()
|
||||||
|
#
|
||||||
|
# if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys():
|
||||||
|
# addedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]
|
||||||
|
# raise click.ClickException(f"FfxController.generateMetadataTokens(): Adding tracks is not supported. Track indices {addedTracksIndices}")
|
||||||
|
#
|
||||||
|
# #raise click.ClickException(f"add track {mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]}")
|
||||||
|
# #for addedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]:
|
||||||
|
# #addedTrack : Track = targetTrackDescriptors[addedTrackIndex]
|
||||||
|
# # row = (f"added {addedTrack.getType().label()} track: index={addedTrackIndex} lang={addedTrack.getLanguage().threeLetter()}",)
|
||||||
|
# # self.differencesTable.add_row(*map(str, row))
|
||||||
|
#
|
||||||
|
# if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys():
|
||||||
|
# removedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY].keys()
|
||||||
|
# raise click.ClickException(f"FfxController.generateMetadataTokens(): Removing tracks is not supported. Track indices {removedTracksIndices}")
|
||||||
|
# #for removedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_REMOVED_KEY]:
|
||||||
|
# # row = (f"removed track: index={removedTrackIndex}",)
|
||||||
|
# # self.differencesTable.add_row(*map(str, row))
|
||||||
|
#
|
||||||
|
# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
||||||
|
# if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys():
|
||||||
|
# for changedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY].keys():
|
||||||
|
#
|
||||||
|
# changedTargetTrackDescriptor : TrackDescriptor = targetTrackDescriptors[changedTrackIndex]
|
||||||
|
# changedTargetTrackSourceIndex = changedTargetTrackDescriptor.getSourceIndex()
|
||||||
|
# changedTargetSourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex()
|
||||||
|
# # changedSourceTrackDescriptor : TrackDescriptor = sourceTrackDescriptors[changedTargetTrackSourceIndex]
|
||||||
|
# # changedSourceTrackSubIndex = changedSourceTrackDescriptor.getSubIndex()
|
||||||
|
#
|
||||||
|
# changedTrackDiff : dict = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY][changedTrackIndex]
|
||||||
|
#
|
||||||
|
# if MediaDescriptor.TAGS_KEY in changedTrackDiff.keys():
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# if DIFF_REMOVED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]:
|
||||||
|
# #for removedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]:
|
||||||
|
# # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed key={removedTagKey}",)
|
||||||
|
# # self.differencesTable.add_row(*map(str, row))
|
||||||
|
#
|
||||||
|
# #addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey]
|
||||||
|
#
|
||||||
|
# metadataTokens += [f"-map_metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", "-1"]
|
||||||
|
#
|
||||||
|
# for targetTrackTagKey, targetTrackTagValue in changedTargetTrackDescriptor.getTags():
|
||||||
|
# metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}",
|
||||||
|
# f"{targetTrackTagKey}={targetTrackTagValue}"]
|
||||||
|
#
|
||||||
|
# else:
|
||||||
|
#
|
||||||
|
# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
||||||
|
# if DIFF_ADDED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]:
|
||||||
|
# for addedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]:
|
||||||
|
#
|
||||||
|
# addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey]
|
||||||
|
#
|
||||||
|
# # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey]
|
||||||
|
#
|
||||||
|
# # click.echo(f"addedTagValue={addedTagValue}")
|
||||||
|
# # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}")
|
||||||
|
# # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}")
|
||||||
|
# # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
|
||||||
|
#
|
||||||
|
# metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}",
|
||||||
|
# f"{addedTagKey}={addedTagValue}"]
|
||||||
|
#
|
||||||
|
# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
||||||
|
# if DIFF_CHANGED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]:
|
||||||
|
# for changedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]:
|
||||||
|
#
|
||||||
|
# changedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[changedTagKey]
|
||||||
|
# # sourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex()
|
||||||
|
# # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey]
|
||||||
|
#
|
||||||
|
# # click.echo(f"addedTagValue={addedTagValue}")
|
||||||
|
# # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}")
|
||||||
|
# # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}")
|
||||||
|
# # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
|
||||||
|
#
|
||||||
|
# metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}",
|
||||||
|
# f"{changedTagKey}={changedTagValue}"]
|
||||||
|
#
|
||||||
|
# # if TrackDescriptor.DISPOSITION_SET_KEY in changedTrackDiff.keys():
|
||||||
|
#
|
||||||
|
# # if DIFF_ADDED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]:
|
||||||
|
# # for addedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_ADDED_KEY]:
|
||||||
|
# # # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} added disposition={addedDisposition.label()}",)
|
||||||
|
# # # self.differencesTable.add_row(*map(str, row))
|
||||||
|
# # pass
|
||||||
|
#
|
||||||
|
# # if DIFF_REMOVED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]:
|
||||||
|
# # for removedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_REMOVED_KEY]:
|
||||||
|
# # # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed disposition={removedDisposition.label()}",)
|
||||||
|
# # # self.differencesTable.add_row(*map(str, row))
|
||||||
|
# # pass
|
||||||
|
|
||||||
|
# return metadataTokens
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def generateMetadataTokens(self):
|
def generateMetadataTokens(self):
|
||||||
"""Source media descriptor is mandatory"""
|
|
||||||
|
|
||||||
metadataTokens = []
|
metadataTokens = []
|
||||||
|
|
||||||
|
for tagKey, tagValue in self.__targetMediaDescriptor.getTags().items():
|
||||||
|
|
||||||
# click.echo(f"source media descriptor: track indices={[d.getIndex() for d in sourceMediaDescriptor.getAllTrackDescriptors()]}")
|
metadataTokens += [f"-metadata:g",
|
||||||
# click.echo(f"target media descriptor: track indices={[d.getIndex() for d in targetMediaDescriptor.getAllTrackDescriptors()]}")
|
f"{tagKey}={tagValue}"]
|
||||||
|
|
||||||
# +jellyfin -jellyfin
|
|
||||||
mediaDifferences = self.__targetMediaDescriptor.compare(self.__sourceMediaDescriptor)
|
|
||||||
|
|
||||||
# media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
|
||||||
|
|
||||||
click.echo(f"media diff {mediaDifferences}")
|
|
||||||
|
|
||||||
if MediaDescriptor.TAGS_KEY in mediaDifferences.keys():
|
|
||||||
|
|
||||||
sourceTags = self.__sourceMediaDescriptor.getTags()
|
|
||||||
targetTags = self.__targetMediaDescriptor.getTags()
|
|
||||||
|
|
||||||
#TODO: Warum erscheint nur -1 im output?
|
|
||||||
if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys():
|
|
||||||
# for removedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]:
|
|
||||||
# row = (f"removed media tag: key='{removedTagKey}' value='{sourceTags[removedTagKey]}'",)
|
|
||||||
# self.differencesTable.add_row(*map(str, row))
|
|
||||||
metadataTokens += [f"-map_metadata:g", "-1"]
|
|
||||||
|
|
||||||
for targetMediaTagKey in targetTags:
|
|
||||||
metadataTokens += [f"-metadata:g", f"{targetMediaTagKey}={targetTags[targetMediaTagKey]}"]
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys():
|
|
||||||
for addedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]:
|
|
||||||
# row = (f"added media tag: key='{addedTagKey}' value='{targetTags[addedTagKey]}'",)
|
|
||||||
click.echo(f"added metadata key='{addedTagKey}' value='{targetTags[addedTagKey]}'->'{targetTags[addedTagKey]}'")
|
|
||||||
# self.differencesTable.add_row(*map(str, row))
|
|
||||||
#pass
|
|
||||||
metadataTokens += [f"-metadata:g", f"{addedTagKey}={targetTags[addedTagKey]}"]
|
|
||||||
|
|
||||||
|
|
||||||
|
#NOTE: With current version track metadata tags are not passed to the outfile
|
||||||
if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys():
|
targetTrackDescriptors = self.__targetMediaDescriptor.getReorderedTrackDescriptors()
|
||||||
for changedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]:
|
|
||||||
#row = (f"changed media tag: key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'",)
|
|
||||||
click.echo(f"changed metadata key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'")
|
|
||||||
# self.differencesTable.add_row(*map(str, row))
|
|
||||||
#pass
|
|
||||||
metadataTokens += [f"-metadata:g", f"{changedTagKey}={targetTags[changedTagKey]}"]
|
|
||||||
|
|
||||||
if MediaDescriptor.TRACKS_KEY in mediaDifferences.keys():
|
|
||||||
|
|
||||||
sourceTrackDescriptors = self.__sourceMediaDescriptor.getAllTrackDescriptors()
|
|
||||||
targetTrackDescriptors = self.__targetMediaDescriptor.getReorderedTrackDescriptors()
|
|
||||||
|
|
||||||
if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys():
|
|
||||||
addedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]
|
|
||||||
raise click.ClickException(f"FfxController.generateMetadataTokens(): Adding tracks is not supported. Track indices {addedTracksIndices}")
|
|
||||||
|
|
||||||
#raise click.ClickException(f"add track {mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]}")
|
|
||||||
#for addedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]:
|
|
||||||
#addedTrack : Track = targetTrackDescriptors[addedTrackIndex]
|
|
||||||
# row = (f"added {addedTrack.getType().label()} track: index={addedTrackIndex} lang={addedTrack.getLanguage().threeLetter()}",)
|
|
||||||
# self.differencesTable.add_row(*map(str, row))
|
|
||||||
|
|
||||||
if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys():
|
|
||||||
removedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY].keys()
|
|
||||||
raise click.ClickException(f"FfxController.generateMetadataTokens(): Removing tracks is not supported. Track indices {removedTracksIndices}")
|
|
||||||
#for removedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_REMOVED_KEY]:
|
|
||||||
# row = (f"removed track: index={removedTrackIndex}",)
|
|
||||||
# self.differencesTable.add_row(*map(str, row))
|
|
||||||
|
|
||||||
# media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
|
||||||
if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys():
|
|
||||||
for changedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY].keys():
|
|
||||||
|
|
||||||
changedTargetTrackDescriptor : TrackDescriptor = targetTrackDescriptors[changedTrackIndex]
|
|
||||||
changedTargetTrackSourceIndex = changedTargetTrackDescriptor.getSourceIndex()
|
|
||||||
changedTargetSourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex()
|
|
||||||
# changedSourceTrackDescriptor : TrackDescriptor = sourceTrackDescriptors[changedTargetTrackSourceIndex]
|
|
||||||
# changedSourceTrackSubIndex = changedSourceTrackDescriptor.getSubIndex()
|
|
||||||
|
|
||||||
changedTrackDiff : dict = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY][changedTrackIndex]
|
|
||||||
|
|
||||||
if MediaDescriptor.TAGS_KEY in changedTrackDiff.keys():
|
|
||||||
|
|
||||||
|
|
||||||
if DIFF_REMOVED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]:
|
for d in targetTrackDescriptors:
|
||||||
#for removedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]:
|
|
||||||
# row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed key={removedTagKey}",)
|
|
||||||
# self.differencesTable.add_row(*map(str, row))
|
|
||||||
|
|
||||||
#addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey]
|
|
||||||
|
|
||||||
metadataTokens += [f"-map_metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", "-1"]
|
# changedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[changedTagKey]
|
||||||
|
# sourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex()
|
||||||
for targetTrackTagKey, targetTrackTagValue in changedTargetTrackDescriptor.getTags():
|
# addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey]
|
||||||
metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}",
|
|
||||||
f"{targetTrackTagKey}={targetTrackTagValue}"]
|
|
||||||
|
|
||||||
else:
|
# click.echo(f"addedTagValue={addedTagValue}")
|
||||||
|
# click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}")
|
||||||
# media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
# click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}")
|
||||||
if DIFF_ADDED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]:
|
# click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
|
||||||
for addedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]:
|
for tagKey, tagValue in d.getTags().items():
|
||||||
|
|
||||||
addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey]
|
metadataTokens += [f"-metadata:s:{d.getType().indicator()}:{d.getSubIndex()}",
|
||||||
|
f"{tagKey}={tagValue}"]
|
||||||
# addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey]
|
|
||||||
|
|
||||||
# click.echo(f"addedTagValue={addedTagValue}")
|
|
||||||
# click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}")
|
|
||||||
# click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}")
|
|
||||||
# click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
|
|
||||||
|
|
||||||
metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}",
|
|
||||||
f"{addedTagKey}={addedTagValue}"]
|
|
||||||
|
|
||||||
# media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
|
|
||||||
if DIFF_CHANGED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]:
|
|
||||||
for changedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]:
|
|
||||||
|
|
||||||
changedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[changedTagKey]
|
|
||||||
# sourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex()
|
|
||||||
# addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey]
|
|
||||||
|
|
||||||
# click.echo(f"addedTagValue={addedTagValue}")
|
|
||||||
# click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}")
|
|
||||||
# click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}")
|
|
||||||
# click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
|
|
||||||
|
|
||||||
metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}",
|
|
||||||
f"{changedTagKey}={changedTagValue}"]
|
|
||||||
|
|
||||||
# if TrackDescriptor.DISPOSITION_SET_KEY in changedTrackDiff.keys():
|
|
||||||
|
|
||||||
# if DIFF_ADDED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]:
|
|
||||||
# for addedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_ADDED_KEY]:
|
|
||||||
# # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} added disposition={addedDisposition.label()}",)
|
|
||||||
# # self.differencesTable.add_row(*map(str, row))
|
|
||||||
# pass
|
|
||||||
|
|
||||||
# if DIFF_REMOVED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]:
|
|
||||||
# for removedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_REMOVED_KEY]:
|
|
||||||
# # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed disposition={removedDisposition.label()}",)
|
|
||||||
# # self.differencesTable.add_row(*map(str, row))
|
|
||||||
# pass
|
|
||||||
|
|
||||||
return metadataTokens
|
return metadataTokens
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def runJob(self,
|
def runJob(self,
|
||||||
sourcePath,
|
sourcePath,
|
||||||
targetPath,
|
targetPath,
|
||||||
|
|||||||
@@ -165,44 +165,37 @@ class MediaDescriptor:
|
|||||||
TrackDisposition.FORCED, t.getSubIndex() == int(subIndex)
|
TrackDisposition.FORCED, t.getSubIndex() == int(subIndex)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def checkDefaultAndForcedDispositions(self):
|
def checkDefaultAndForcedDispositions(self):
|
||||||
try:
|
|
||||||
self.getDefaultVideoTrack()
|
videoTracks = self.getVideoTracks()
|
||||||
self.getForcedVideoTrack()
|
audioTracks = self.getAudioTracks()
|
||||||
self.getDefaultAudioTrack()
|
subtitleTracks = self.getSubtitleTracks()
|
||||||
self.getForcedAudioTrack()
|
|
||||||
self.getDefaultSubtitleTrack()
|
if len([v for v in videoTracks if v.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1:
|
||||||
self.getForcedSubtitleTrack()
|
raise ValueError('More than one default video track')
|
||||||
return True
|
if len([a for a in audioTracks if a.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1:
|
||||||
except ValueError:
|
raise ValueError('More than one default audio track')
|
||||||
return False
|
if len([s for s in subtitleTracks if s.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1:
|
||||||
|
raise ValueError('More than one default subtitle track')
|
||||||
|
|
||||||
|
if len([v for v in videoTracks if v.getDispositionFlag(TrackDisposition.FORCED)]) > 1:
|
||||||
|
raise ValueError('More than one forced video track')
|
||||||
|
if len([a for a in audioTracks if a.getDispositionFlag(TrackDisposition.FORCED)]) > 1:
|
||||||
|
raise ValueError('More than one forced audio track')
|
||||||
|
if len([s for s in subtitleTracks if s.getDispositionFlag(TrackDisposition.FORCED)]) > 1:
|
||||||
|
raise ValueError('More than one forced subtitle track')
|
||||||
|
|
||||||
|
trackDescriptors = videoTracks + audioTracks + subtitleTracks
|
||||||
|
sourceIndices = [
|
||||||
|
t.getSourceIndex() for t in trackDescriptors
|
||||||
|
]
|
||||||
|
if len(set(sourceIndices)) < len(trackDescriptors):
|
||||||
|
raise ValueError('Multiple streams originating from the same source stream')
|
||||||
|
|
||||||
def getReorderedTrackDescriptors(self):
|
def getReorderedTrackDescriptors(self):
|
||||||
|
|
||||||
videoTracks = self.sortSubIndices(self.getVideoTracks())
|
|
||||||
audioTracks = self.sortSubIndices(self.getAudioTracks())
|
|
||||||
subtitleTracks = self.sortSubIndices(self.getSubtitleTracks())
|
|
||||||
|
|
||||||
videoDefaultTrack = self.getDefaultVideoTrack()
|
|
||||||
self.getForcedVideoTrack()
|
|
||||||
audioDefaultTrack = self.getDefaultAudioTrack()
|
|
||||||
self.getForcedAudioTrack()
|
|
||||||
subtitleDefaultTrack = self.getDefaultSubtitleTrack()
|
|
||||||
self.getForcedSubtitleTrack()
|
|
||||||
|
|
||||||
if self.__jellyfinOrder:
|
|
||||||
if not videoDefaultTrack is None:
|
|
||||||
videoTracks.append(
|
|
||||||
videoTracks.pop(videoTracks.index(videoDefaultTrack))
|
|
||||||
)
|
|
||||||
if not audioDefaultTrack is None:
|
|
||||||
audioTracks.append(
|
|
||||||
audioTracks.pop(audioTracks.index(audioDefaultTrack))
|
|
||||||
)
|
|
||||||
if not subtitleDefaultTrack is None:
|
|
||||||
subtitleTracks.append(
|
|
||||||
subtitleTracks.pop(subtitleTracks.index(subtitleDefaultTrack))
|
|
||||||
)
|
|
||||||
|
|
||||||
reorderedTrackDescriptors = videoTracks + audioTracks + subtitleTracks
|
reorderedTrackDescriptors = videoTracks + audioTracks + subtitleTracks
|
||||||
orderedSourceTrackSequence = [
|
orderedSourceTrackSequence = [
|
||||||
@@ -216,6 +209,28 @@ class MediaDescriptor:
|
|||||||
|
|
||||||
return reorderedTrackDescriptors
|
return reorderedTrackDescriptors
|
||||||
|
|
||||||
|
def applyJellyfinOrder(self):
|
||||||
|
|
||||||
|
# videoTracks = self.sortSubIndices(self.getVideoTracks())
|
||||||
|
# audioTracks = self.sortSubIndices(self.getAudioTracks())
|
||||||
|
# subtitleTracks = self.sortSubIndices(self.getSubtitleTracks())
|
||||||
|
|
||||||
|
videoTracks = self.getVideoTracks()
|
||||||
|
audioTracks = self.getAudioTracks()
|
||||||
|
subtitleTracks = self.getSubtitleTracks()
|
||||||
|
|
||||||
|
if len([v for v in videoTracks if v.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1:
|
||||||
|
pass
|
||||||
|
if len([a for a in audioTracks if a.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1:
|
||||||
|
pass
|
||||||
|
if len([s for s in subtitleTracks if s.getDispositionFlag(TrackDisposition.DEFAULT)]):
|
||||||
|
pass
|
||||||
|
|
||||||
|
videoTracks.append(videoTracks.pop(videoTracks.index(videoTracks)))
|
||||||
|
audioTracks.append(audioTracks.pop(audioTracks.index(audioTracks)))
|
||||||
|
subtitleTracks.append(subtitleTracks.pop(subtitleTracks.index(subtitleTracks)))
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def fromFfprobe(cls, formatData, streamData):
|
def fromFfprobe(cls, formatData, streamData):
|
||||||
|
|
||||||
@@ -282,11 +297,11 @@ class MediaDescriptor:
|
|||||||
if s.getType() == TrackType.SUBTITLE
|
if s.getType() == TrackType.SUBTITLE
|
||||||
]
|
]
|
||||||
|
|
||||||
def getJellyfin(self):
|
# def getJellyfin(self):
|
||||||
return self.__jellyfinOrder
|
# return self.__jellyfinOrder
|
||||||
|
#
|
||||||
def setJellyfinOrder(self, state):
|
# def setJellyfinOrder(self, state):
|
||||||
self.__jellyfinOrder = state
|
# self.__jellyfinOrder = state
|
||||||
|
|
||||||
def getClearTags(self):
|
def getClearTags(self):
|
||||||
return self.__clearTags
|
return self.__clearTags
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
from typing import List
|
||||||
|
|
||||||
def executeProcess(commandSequence):
|
def executeProcess(commandSequence: List[str]):
|
||||||
process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
# process = subprocess.Popen([t.encode('utf-8') for t in commandSequence], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
|
||||||
output, error = process.communicate()
|
output, error = process.communicate()
|
||||||
return output.decode('utf-8'), error.decode('utf-8'), process.returncode
|
# return output.decode('utf-8'), error.decode('utf-8'), process.returncode
|
||||||
|
return output, error, process.returncode
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import os, click, requests
|
import os, click, requests, json
|
||||||
|
|
||||||
|
|
||||||
class TmdbController():
|
class TmdbController():
|
||||||
@@ -57,6 +57,17 @@ class TmdbController():
|
|||||||
|
|
||||||
#TODO Check for result
|
#TODO Check for result
|
||||||
try:
|
try:
|
||||||
|
#TODO: Content Type aware processing
|
||||||
|
# response = requests.get(tmdbUrl)
|
||||||
|
# response.encoding = 'utf-8'
|
||||||
|
# return response.json()
|
||||||
|
# response = requests.get(tmdbUrl)
|
||||||
|
|
||||||
|
# contentType = response.headers.get('Content-Type')
|
||||||
|
# print(content_type) # Example: 'application/json; charset=UTF-8'
|
||||||
|
|
||||||
|
# decoded_content = response.content.decode('utf-8')
|
||||||
|
# return json.loads(decoded_content)
|
||||||
return requests.get(tmdbUrl).json()
|
return requests.get(tmdbUrl).json()
|
||||||
except:
|
except:
|
||||||
return {}
|
return {}
|
||||||
|
|||||||
Reference in New Issue
Block a user