@ -13,6 +13,8 @@ from ffx.helper import dictDiff, DIFF_ADDED_KEY, DIFF_CHANGED_KEY, DIFF_REMOVED_
class MediaDescriptor ( ) :
""" This class represents the structural content of a media file including streams and metadata """
CONTEXT_KEY = ' context '
TAGS_KEY = ' tags '
TRACKS_KEY = ' tracks '
@ -22,6 +24,7 @@ class MediaDescriptor():
FFPROBE_DISPOSITION_KEY = ' disposition '
FFPROBE_TAGS_KEY = ' tags '
FFPROBE_CODEC_TYPE_KEY = ' codec_type '
JELLYFIN_ORDER_FLAG_KEY = ' jellyfin_order '
def __init__ ( self , * * kwargs ) :
@ -34,9 +37,6 @@ class MediaDescriptor():
self . __mediaTags = { }
if MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY in kwargs . keys ( ) :
# if type(kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]) is not List[TrackDescriptor]: # Use List typehint for TrackDescriptor as well if it works
# raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type list containing only elements of type TrackDescriptor")
if type ( kwargs [ MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY ] ) is not list : # Use List typehint for TrackDescriptor as well if it works
raise TypeError ( f " MediaDescriptor.__init__(): Argument { MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY } is required to be of type list " )
for d in kwargs [ MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY ] :
@ -105,7 +105,7 @@ class MediaDescriptor():
@classmethod
def fromFfprobe ( cls , formatData , streamData ):
def fromFfprobe ( cls , formatData , streamData , context : dict = None ):
kwargs = { }
@ -114,6 +114,7 @@ class MediaDescriptor():
kwargs [ MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY ] = [ ]
#TODO: Evtl obsolet
subIndexCounters = { }
for streamObj in streamData :
@ -165,6 +166,12 @@ class MediaDescriptor():
subIndex + = 1
return subtitleTracks
def getJellyfin ( self ) :
return self . __jellyfinOrder
def setJellyfinOrder ( self , state ) :
self . __jellyfinOrder = state
def getClearTags ( self ) :
return self . __clearTags
@ -226,25 +233,17 @@ class MediaDescriptor():
return compareResult
def getInputMappingTokens ( self ) :
def getInputMappingTokens ( self , use_sub_index : bool = True ) :
reorderedTrackDescriptors = self . getReorderedTrackDescriptors ( )
inputMappingTokens = [ ]
#subIndexCounter = {}
for rtd in reorderedTrackDescriptors :
trackType = rtd . getType ( )
#if not trackType in subIndexCounter.keys() :
# subIndexCounter[trackType] = 0
#inputMappingTokens += ['-map', f"0:{trackType.indicator()}:{subIndexCounter[trackType]}"]
inputMappingTokens + = [ ' -map ' , f " 0: { trackType. indicator ( ) } : { rtd. get Sub Index( ) } " ]
#subIndexCounter[trackType] += 1
trackType = rtd . getType ( )
if use_sub_index :
inputMappingTokens + = [ ' -map ' , f " 0: { trackType . indicator ( ) } : { rtd . getSubIndex ( ) } " ]
else :
inputMappingTokens + = [ ' -map ' , f " 0: { rtd. get Index( ) } " ]
return inputMappingTokens
# for rtd in reorderedTrackDescriptors:
# trackType = rtd.getType()
# #if not trackType in subIndexCounter.keys():
# # subIndexCounter[trackType] = 0
# #inputMappingTokens += ['-map', f"0:{trackType.indicator()}:{subIndexCounter[trackType]}"]
# inputMappingTokens += ['-map', f"0:{rtd.getIndex()}"]
# #subIndexCounter[trackType] += 1
# return inputMappingTokens