@ -8,7 +8,7 @@ class MediaDescriptor():
""" This class represents the structural content of a media file including streams and metadata """
TAGS_KEY = ' tags '
TRACK_DESCRIPTOR S_KEY = ' track_descriptors '
TRACK_DESCRIPTOR _LI ST _KEY = ' track_descriptors '
CLEAR_TAGS_KEY = ' clear_tags '
FFPROBE_DISPOSITION_KEY = ' disposition '
@ -25,18 +25,18 @@ class MediaDescriptor():
else :
self . __mediaTags = { }
if MediaDescriptor . TRACK_DESCRIPTOR S_KEY in kwargs . keys ( ) :
if MediaDescriptor . TRACK_DESCRIPTOR _LI ST _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 S_KEY] ) is not dic t: # Use List typehint for TrackDescriptor as well if it works
raise TypeError ( f " MediaDescriptor.__init__(): Argument { MediaDescriptor . TRACK_DESCRIPTOR S_KEY} is required to be of type dic t" )
# for d in kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY] :
# if type(d) is not TrackDescriptor:
# raise TypeError(f"TrackDesciptor.__init__(): All elements of argument set {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type TrackDescriptor" )
self . __trackDescriptors = kwargs [ MediaDescriptor . TRACK_DESCRIPTOR S_KEY]
if type ( kwargs [ MediaDescriptor . TRACK_DESCRIPTOR _LI ST _KEY] ) is not lis t: # 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 lis t" )
for d in kwargs [ MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY ] :
if type ( d ) is not TrackDescriptor :
raise TypeError ( f " TrackDesciptor.__init__(): All elements of argument list { MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY } are required to be of type TrackDescriptor " )
self . __trackDescriptors = kwargs [ MediaDescriptor . TRACK_DESCRIPTOR _LI ST _KEY]
else :
self . __trackDescriptors = set ( )
self . __trackDescriptors = [ ]
if MediaDescriptor . CLEAR_TAGS_KEY in kwargs . keys ( ) :
if type ( kwargs [ MediaDescriptor . CLEAR_TAGS_KEY ] ) is not bool :
@ -49,23 +49,31 @@ class MediaDescriptor():
@classmethod
def fromFfprobe ( cls , formatData , streamData ) :
trackDescriptors = { }
#trackDescriptors = {}
kwargs = { }
if MediaDescriptor . FFPROBE_TAGS_KEY in formatData . keys ( ) :
kwargs [ MediaDescriptor . TAGS_KEY ] = formatData [ MediaDescriptor . FFPROBE_TAGS_KEY ]
kwargs [ MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY ] = [ ]
for streamObj in streamData :
trackType = TrackType . fromLabel ( streamObj [ MediaDescriptor . FFPROBE_CODEC_TYPE_KEY ] )
#trackType = TrackType.fromLabel(streamObj[MediaDescriptor.FFPROBE_CODEC_TYPE_KEY] )
if trackType != TrackType . UNKNOWN :
# if trackType != TrackType.UNKNOWN:
#
# if trackType.label() not in trackDescriptors.keys():
# trackDescriptors[trackType.label()] = []
#
# trackDescriptors[trackType.label()].append(TrackDescriptor.fromFfprobe(streamObj))
if trackType . label ( ) not in trackDescriptors . keys ( ) :
trackDescriptors [ trackType . label ( ) ] = [ ]
if TrackType . fromLabel ( streamObj [ MediaDescriptor . FFPROBE_CODEC_TYPE_KEY ] ) != TrackType . UNKNOWN :
kwargs [ MediaDescriptor . TRACK_DESCRIPTOR_LIST_KEY ] . append ( TrackDescriptor . fromFfprobe ( streamObj ) )
trackDescriptors [ trackType . label ( ) ] . append ( TrackDescriptor . fromFfprobe ( streamObj ) )
kwargs = { }
if MediaDescriptor . FFPROBE_TAGS_KEY in formatData . keys ( ) :
kwargs [ MediaDescriptor . TAGS_KEY ] = formatData [ MediaDescriptor . FFPROBE_TAGS_KEY ]
kwargs [ MediaDescriptor . TRACK_DESCRIPTORS_KEY ] = trackDescriptors
# kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] = trackDescriptors
return cls ( * * kwargs )
@ -75,7 +83,9 @@ class MediaDescriptor():
def getAudioTracks ( self ) - > List [ TrackDescriptor ] :
return self . __trackDescriptors [ TrackType . AUDIO . label ( ) ] if TrackType . AUDIO . label ( ) in self . __trackDescriptors . keys ( ) else [ ]
#return self.__trackDescriptors[TrackType.AUDIO.label()] if TrackType.AUDIO.label() in self.__trackDescriptors.keys() else []
return [ d for d in self . __trackDescriptors if d . getType ( ) == TrackType . AUDIO ]
def getSubtitleTracks ( self ) - > List [ TrackDescriptor ] :
return self . __trackDescriptors [ TrackType . SUBTITLE . label ( ) ] if TrackType . SUBTITLE . label ( ) in self . __trackDescriptors . keys ( ) else [ ]
#return self.__trackDescriptors[TrackType.SUBTITLE.label()] if TrackType.SUBTITLE.label() in self.__trackDescriptors.keys() else []
return [ d for d in self . __trackDescriptors if d . getType ( ) == TrackType . SUBTITLE ]