@ -176,21 +176,25 @@ class FfxController():
# for subStreamIndex in range(len(subDescriptor)):
# for subStreamIndex in range(len(subDescriptor)):
for trackDescriptor in targetTrackDescriptors :
for trackDescriptor in targetTrackDescriptors :
# Calculate source sub index. This applies only if a source media descriptor is defined.
#HINT: No dispositions for pgs subtitle tracks that have no external file source
if sourceTrackDescriptors :
if ( trackDescriptor . getExternalSourceFilePath ( )
changedTargetTrackDescriptor : TrackDescriptor = targetTrackDescriptors [ trackDescriptor . getIndex ( ) ]
or trackDescriptor . getCodec ( ) != TrackDescriptor . CODEC_PGS ) :
changedTargetTrackSourceIndex = changedTargetTrackDescriptor . getSourceIndex ( )
subIndex = sourceTrackDescriptors [ changedTargetTrackSourceIndex ] . getSubIndex ( )
else :
subIndex = trackDescriptor . getSubIndex ( )
streamIndicator = trackDescriptor . getType ( ) . indicator ( )
# Calculate source sub index. This applies only if a source media descriptor is defined.
dispositionSet = trackDescriptor . getDispositionSet ( )
if sourceTrackDescriptors :
changedTargetTrackDescriptor : TrackDescriptor = targetTrackDescriptors [ trackDescriptor . getIndex ( ) ]
changedTargetTrackSourceIndex = changedTargetTrackDescriptor . getSourceIndex ( )
subIndex = sourceTrackDescriptors [ changedTargetTrackSourceIndex ] . getSubIndex ( )
else :
subIndex = trackDescriptor . getSubIndex ( )
if dispositionSet :
streamIndicator = trackDescriptor . getType ( ) . indicator ( )
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' + ' . join ( [ d . label ( ) for d in dispositionSet ] ) ]
dispositionSet = trackDescriptor . getDispositionSet ( )
else :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' 0 ' ]
if dispositionSet :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' + ' . join ( [ d . label ( ) for d in dispositionSet ] ) ]
else :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' 0 ' ]
return dispositionTokens
return dispositionTokens
@ -198,7 +202,7 @@ class FfxController():
def generateMetadataTokens ( self ) :
def generateMetadataTokens ( self ) :
""" Source media descriptor is mandatory """
""" Source media descriptor is mandatory """
m apping Tokens = [ ]
m etadat aTokens = [ ]
# click.echo(f"source media descriptor: track indices={[d.getIndex() for d in sourceMediaDescriptor.getAllTrackDescriptors()]}")
# 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()]}")
# click.echo(f"target media descriptor: track indices={[d.getIndex() for d in targetMediaDescriptor.getAllTrackDescriptors()]}")
@ -215,15 +219,15 @@ class FfxController():
sourceTags = self . __sourceMediaDescriptor . getTags ( )
sourceTags = self . __sourceMediaDescriptor . getTags ( )
targetTags = self . __targetMediaDescriptor . getTags ( )
targetTags = self . __targetMediaDescriptor . getTags ( )
#TODO: Warum erscheint nur -1 im output?
if DIFF_REMOVED_KEY in mediaDifferences [ MediaDescriptor . TAGS_KEY ] . keys ( ) :
if DIFF_REMOVED_KEY in mediaDifferences [ MediaDescriptor . TAGS_KEY ] . keys ( ) :
# for removedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]:
# for removedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]:
# row = (f"removed media tag: key='{removedTagKey}' value='{sourceTags[removedTagKey]}'",)
# row = (f"removed media tag: key='{removedTagKey}' value='{sourceTags[removedTagKey]}'",)
# self.differencesTable.add_row(*map(str, row))
# self.differencesTable.add_row(*map(str, row))
m apping Tokens + = [ f " -map_metadata:g " , " -1 " ]
m etadat aTokens + = [ f " -map_metadata:g " , " -1 " ]
for targetMediaTagKey in targetTags :
for targetMediaTagKey in targetTags :
m apping Tokens + = [ f " -metadata:g " , f " { targetMediaTagKey } = { targetTags [ targetMediaTagKey ] } " ]
m etadat aTokens + = [ f " -metadata:g " , f " { targetMediaTagKey } = { targetTags [ targetMediaTagKey ] } " ]
else :
else :
@ -233,7 +237,7 @@ class FfxController():
click . echo ( f " added metadata key= ' { addedTagKey } ' value= ' { targetTags [ addedTagKey ] } ' -> ' { targetTags [ addedTagKey ] } ' " )
click . echo ( f " added metadata key= ' { addedTagKey } ' value= ' { targetTags [ addedTagKey ] } ' -> ' { targetTags [ addedTagKey ] } ' " )
# self.differencesTable.add_row(*map(str, row))
# self.differencesTable.add_row(*map(str, row))
#pass
#pass
m apping Tokens + = [ f " -metadata:g " , f " { addedTagKey } = { targetTags [ addedTagKey ] } " ]
m etadat aTokens + = [ f " -metadata:g " , f " { addedTagKey } = { targetTags [ addedTagKey ] } " ]
@ -243,7 +247,7 @@ class FfxController():
click . echo ( f " changed metadata 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))
# self.differencesTable.add_row(*map(str, row))
#pass
#pass
m apping Tokens + = [ f " -metadata:g " , f " { changedTagKey } = { targetTags [ changedTagKey ] } " ]
m etadat aTokens + = [ f " -metadata:g " , f " { changedTagKey } = { targetTags [ changedTagKey ] } " ]
if MediaDescriptor . TRACKS_KEY in mediaDifferences . keys ( ) :
if MediaDescriptor . TRACKS_KEY in mediaDifferences . keys ( ) :
@ -289,10 +293,10 @@ class FfxController():
#addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey]
#addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey]
m apping Tokens + = [ f " -map_metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " , " -1 " ]
m etadat aTokens + = [ f " -map_metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " , " -1 " ]
for targetTrackTagKey , targetTrackTagValue in changedTargetTrackDescriptor . getTags ( ) :
for targetTrackTagKey , targetTrackTagValue in changedTargetTrackDescriptor . getTags ( ) :
m apping Tokens + = [ f " -metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " ,
m etadat aTokens + = [ f " -metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " ,
f " { targetTrackTagKey } = { targetTrackTagValue } " ]
f " { targetTrackTagKey } = { targetTrackTagValue } " ]
else :
else :
@ -310,7 +314,7 @@ class FfxController():
# 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"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}")
# click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
m apping Tokens + = [ f " -metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " ,
m etadat aTokens + = [ f " -metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " ,
f " { addedTagKey } = { addedTagValue } " ]
f " { addedTagKey } = { addedTagValue } " ]
# media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
# media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}}
@ -326,7 +330,7 @@ class FfxController():
# 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"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}")
# click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}")
m apping Tokens + = [ f " -metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " ,
m etadat aTokens + = [ f " -metadata:s: { changedTargetTrackDescriptor . getType ( ) . indicator ( ) } : { changedTargetSourceSubIndex } " ,
f " { changedTagKey } = { changedTagValue } " ]
f " { changedTagKey } = { changedTagValue } " ]
# if TrackDescriptor.DISPOSITION_SET_KEY in changedTrackDiff.keys():
# if TrackDescriptor.DISPOSITION_SET_KEY in changedTrackDiff.keys():
@ -343,7 +347,7 @@ class FfxController():
# # self.differencesTable.add_row(*map(str, row))
# # self.differencesTable.add_row(*map(str, row))
# pass
# pass
return m apping Tokens
return m etadat aTokens
def runJob ( self ,
def runJob ( self ,
@ -390,11 +394,11 @@ class FfxController():
if videoEncoder == VideoEncoder . VP9 :
if videoEncoder == VideoEncoder . VP9 :
commandSequence1 = ( commandTokens
commandSequence1 = ( commandTokens
+ self . __targetMediaDescriptor . getInputMappingTokens ( )
+ self . __targetMediaDescriptor . getInputMappingTokens ( only_video = True )
+ self . generateVP9Pass1Tokens ( int ( quality ) ) )
+ self . generateVP9Pass1Tokens ( int ( quality ) ) )
if self . __context [ ' perform_crop ' ] :
if self . __context [ ' perform_crop ' ] :
commandSequence1 + = FfxController . generateCropTokens ( )
commandSequence1 + = self . generateCropTokens ( )
commandSequence1 + = FfxController . NULL_TOKENS
commandSequence1 + = FfxController . NULL_TOKENS
@ -420,7 +424,7 @@ class FfxController():
commandSequence2 + = self . generateVP9Pass2Tokens ( int ( quality ) ) + self . generateAudioEncodingTokens ( )
commandSequence2 + = self . generateVP9Pass2Tokens ( int ( quality ) ) + self . generateAudioEncodingTokens ( )
if self . __context [ ' perform_crop ' ] :
if self . __context [ ' perform_crop ' ] :
commandSequence2 + = FfxController . generateCropTokens ( )
commandSequence2 + = self . generateCropTokens ( )
commandSequence2 + = self . generateOutputTokens ( targetPath ,
commandSequence2 + = self . generateOutputTokens ( targetPath ,
FfxController . DEFAULT_FILE_FORMAT ,
FfxController . DEFAULT_FILE_FORMAT ,
@ -429,4 +433,6 @@ class FfxController():
click . echo ( f " Command 2: { ' ' . join ( commandSequence2 ) } " )
click . echo ( f " Command 2: { ' ' . join ( commandSequence2 ) } " )
if not self . __context [ ' dry_run ' ] :
if not self . __context [ ' dry_run ' ] :
executeProcess ( commandSequence2 )
out , err , rc = executeProcess ( commandSequence2 )
if rc :
raise click . ClickException ( f " Command resulted in error: rc= { rc } error= { err } " )