pf png tracks

dev
Maveno 10 months ago
parent 12c8ad3782
commit cfb2df8d66

@ -181,7 +181,8 @@ def unmux(ctx,
else: else:
ctx.obj['logger'].info(f"\nUnmuxing file {fp.getFilename()}\n") ctx.obj['logger'].info(f"\nUnmuxing file {fp.getFilename()}\n")
for trackDescriptor in sourceMediaDescriptor.getAllTrackDescriptors(): # for trackDescriptor in sourceMediaDescriptor.getAllTrackDescriptors():
for trackDescriptor in sourceMediaDescriptor.getTrackDescriptors():
if trackDescriptor.getType() == TrackType.SUBTITLE or not subtitles_only: if trackDescriptor.getType() == TrackType.SUBTITLE or not subtitles_only:
@ -626,12 +627,14 @@ def convert(ctx,
showSeason, showSeason,
showEpisode) showEpisode)
ctx.obj['logger'].debug(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()]}") # ctx.obj['logger'].debug(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()]}")
ctx.obj['logger'].debug(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getTrackDescriptors()]}")
if cliOverrides: if cliOverrides:
targetMediaDescriptor.applyOverrides(cliOverrides) targetMediaDescriptor.applyOverrides(cliOverrides)
ctx.obj['logger'].debug(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()]}") # ctx.obj['logger'].debug(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()]}")
ctx.obj['logger'].debug(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getTrackDescriptors()]}")
ctx.obj['logger'].debug(f"Input mapping tokens (2nd pass): {targetMediaDescriptor.getInputMappingTokens()}") ctx.obj['logger'].debug(f"Input mapping tokens (2nd pass): {targetMediaDescriptor.getInputMappingTokens()}")

@ -5,6 +5,7 @@ from ffx.media_descriptor_change_set import MediaDescriptorChangeSet
from ffx.media_descriptor import MediaDescriptor from ffx.media_descriptor import MediaDescriptor
from ffx.audio_layout import AudioLayout from ffx.audio_layout import AudioLayout
from ffx.track_type import TrackType from ffx.track_type import TrackType
from ffx.track_codec import TrackCodec
from ffx.video_encoder import VideoEncoder from ffx.video_encoder import VideoEncoder
from ffx.process import executeProcess from ffx.process import executeProcess
@ -81,6 +82,10 @@ class FfxController():
'-auto-alt-ref', '1', '-auto-alt-ref', '1',
'-lag-in-frames', '25'] '-lag-in-frames', '25']
def generateVideoCopyTokens(self, subIndex):
return [f"-c:v:{int(subIndex)}",
'copy']
def generateCropTokens(self): def generateCropTokens(self):
@ -107,7 +112,8 @@ class FfxController():
audioTokens = [] audioTokens = []
targetAudioTrackDescriptors = [td for td in self.__targetMediaDescriptor.getAllTrackDescriptors() if td.getType() == TrackType.AUDIO] # targetAudioTrackDescriptors = [td for td in self.__targetMediaDescriptor.getAllTrackDescriptors() if td.getType() == TrackType.AUDIO]
targetAudioTrackDescriptors = self.__targetMediaDescriptor.getTrackDescriptors(trackType=TrackType.AUDIO)
trackSubIndex = 0 trackSubIndex = 0
for trackDescriptor in targetAudioTrackDescriptors: for trackDescriptor in targetAudioTrackDescriptors:
@ -180,9 +186,14 @@ class FfxController():
commandSequence += self.__mdcs.generateMetadataTokens() commandSequence += self.__mdcs.generateMetadataTokens()
commandSequence += denoiseTokens commandSequence += denoiseTokens
commandSequence += (self.generateAudioEncodingTokens() for td in self.__targetMediaDescriptor.getTrackDescriptors(trackType=TrackType.VIDEO):
+ self.generateAV1Tokens(int(quality), int(preset)) if td.getCodec == TrackCodec.PNG:
+ self.generateAudioEncodingTokens()) # commandSequence += self.generateVideoCopyTokens(td.getSubIndex())
pass
else:
commandSequence += self.generateAV1Tokens(int(quality), int(preset))
commandSequence += self.generateAudioEncodingTokens()
if self.__context['perform_crop']: if self.__context['perform_crop']:
commandSequence += FfxController.generateCropTokens() commandSequence += FfxController.generateCropTokens()
@ -208,6 +219,11 @@ class FfxController():
# Confirm or find better filter settings for 2-pass # Confirm or find better filter settings for 2-pass
# commandSequence1 += self.__context['denoiser'].generateDenoiseTokens() # commandSequence1 += self.__context['denoiser'].generateDenoiseTokens()
for td in self.__targetMediaDescriptor.getTrackDescriptors(trackType=TrackType.VIDEO):
if td.getCodec == TrackCodec.PNG:
# commandSequence1 += self.generateVideoCopyTokens(td.getSubIndex())
pass
else:
commandSequence1 += self.generateVP9Pass1Tokens(int(quality)) commandSequence1 += self.generateVP9Pass1Tokens(int(quality))
if self.__context['perform_crop']: if self.__context['perform_crop']:
@ -232,7 +248,14 @@ class FfxController():
commandSequence2 += self.__mdcs.generateMetadataTokens() commandSequence2 += self.__mdcs.generateMetadataTokens()
commandSequence2 += denoiseTokens commandSequence2 += denoiseTokens
commandSequence2 += self.generateVP9Pass2Tokens(int(quality)) + self.generateAudioEncodingTokens() for td in self.__targetMediaDescriptor.getTrackDescriptors(trackType=TrackType.VIDEO):
if td.getCodec == TrackCodec.PNG:
# commandSequence2 += self.generateVideoCopyTokens(td.getSubIndex())
pass
else:
commandSequence2 += self.generateVP9Pass2Tokens(int(quality))
commandSequence2 += self.generateAudioEncodingTokens()
if self.__context['perform_crop']: if self.__context['perform_crop']:
commandSequence2 += self.generateCropTokens() commandSequence2 += self.generateCropTokens()

@ -32,7 +32,8 @@ class MediaController():
for mediaTagKey, mediaTagValue in mediaDescriptor.getTags(): for mediaTagKey, mediaTagValue in mediaDescriptor.getTags():
self.__tac.updateMediaTag(pid, mediaTagKey, mediaTagValue) self.__tac.updateMediaTag(pid, mediaTagKey, mediaTagValue)
for trackDescriptor in mediaDescriptor.getAllTrackDescriptors(): # for trackDescriptor in mediaDescriptor.getAllTrackDescriptors():
for trackDescriptor in mediaDescriptor.getTrackDescriptors():
self.__tc.addTrack(trackDescriptor, patternId = pid) self.__tc.addTrack(trackDescriptor, patternId = pid)
s.commit() s.commit()

@ -105,14 +105,16 @@ class MediaDescriptor:
def setDefaultSubTrack(self, trackType: TrackType, subIndex: int): def setDefaultSubTrack(self, trackType: TrackType, subIndex: int):
for t in self.getAllTrackDescriptors(): # for t in self.getAllTrackDescriptors():
for t in self.getTrackDescriptors():
if t.getType() == trackType: if t.getType() == trackType:
t.setDispositionFlag( t.setDispositionFlag(
TrackDisposition.DEFAULT, t.getSubIndex() == int(subIndex) TrackDisposition.DEFAULT, t.getSubIndex() == int(subIndex)
) )
def setForcedSubTrack(self, trackType: TrackType, subIndex: int): def setForcedSubTrack(self, trackType: TrackType, subIndex: int):
for t in self.getAllTrackDescriptors(): # for t in self.getAllTrackDescriptors():
for t in self.getTrackDescriptors():
if t.getType() == trackType: if t.getType() == trackType:
t.setDispositionFlag( t.setDispositionFlag(
TrackDisposition.FORCED, t.getSubIndex() == int(subIndex) TrackDisposition.FORCED, t.getSubIndex() == int(subIndex)
@ -188,7 +190,8 @@ class MediaDescriptor:
def applySourceIndices(self, sourceMediaDescriptor: Self): def applySourceIndices(self, sourceMediaDescriptor: Self):
sourceTrackDescriptors = sourceMediaDescriptor.getAllTrackDescriptors() # sourceTrackDescriptors = sourceMediaDescriptor.getAllTrackDescriptors()
sourceTrackDescriptors = sourceMediaDescriptor.getTrackDescriptors()
numTrackDescriptors = len(self.__trackDescriptors) numTrackDescriptors = len(self.__trackDescriptors)
if len(sourceTrackDescriptors) != numTrackDescriptors: if len(sourceTrackDescriptors) != numTrackDescriptors:
@ -283,9 +286,9 @@ class MediaDescriptor:
tdList[trackIndex].setIndex(trackIndex) tdList[trackIndex].setIndex(trackIndex)
def getAllTrackDescriptors(self): # def getAllTrackDescriptors(self):
"""Returns all track descriptors sorted by type: video, audio then subtitles""" # """Returns all track descriptors sorted by type: video, audio then subtitles"""
return self.getVideoTracks() + self.getAudioTracks() + self.getSubtitleTracks() # return self.getVideoTracks() + self.getAudioTracks() + self.getSubtitleTracks()
def getTrackDescriptors(self, def getTrackDescriptors(self,
@ -345,16 +348,23 @@ class MediaDescriptor:
inputMappingTokens = [] inputMappingTokens = []
sortedTrackDescriptors = sorted(self.__trackDescriptors, key=lambda d: d.getIndex())
# raise click.ClickException(' '.join([f"\nindex={td.getIndex()} subIndex={td.getSubIndex()} srcIndex={td.getSourceIndex()} type={td.getType().label()}" for td in self.__trackDescriptors]))
filePointer = 1 filePointer = 1
for trackIndex in range(len(self.__trackDescriptors)): for trackIndex in range(len(sortedTrackDescriptors)):
td: TrackDescriptor = sortedTrackDescriptors[trackIndex]
td: TrackDescriptor = self.__trackDescriptors[trackIndex] if td.getCodec() != TrackCodec.PNG:
stdi = self.__trackDescriptors[td.getSourceIndex()].getIndex() stdi = sortedTrackDescriptors[td.getSourceIndex()].getIndex()
stdsi = self.__trackDescriptors[td.getSourceIndex()].getSubIndex() stdsi = sortedTrackDescriptors[td.getSourceIndex()].getSubIndex()
trackType = td.getType() trackType = td.getType()
# if ((trackType == TrackType.VIDEO and td.getCodec() != TrackCodec.PNG) or not only_video):
if (trackType == TrackType.VIDEO or not only_video): if (trackType == TrackType.VIDEO or not only_video):
importedFilePath = td.getExternalSourceFilePath() importedFilePath = td.getExternalSourceFilePath()
@ -463,7 +473,8 @@ class MediaDescriptor:
def getConfiguration(self, label: str = ''): def getConfiguration(self, label: str = ''):
yield f"--- {label if label else 'MediaDescriptor '+str(id(self))} {' '.join([str(k)+'='+str(v) for k,v in self.__mediaTags.items()])}" yield f"--- {label if label else 'MediaDescriptor '+str(id(self))} {' '.join([str(k)+'='+str(v) for k,v in self.__mediaTags.items()])}"
for td in self.getAllTrackDescriptors(): # for td in self.getAllTrackDescriptors():
for td in self.getTrackDescriptors():
yield (f"{td.getIndex()}:{td.getType().indicator()}:{td.getSubIndex()} " yield (f"{td.getIndex()}:{td.getType().indicator()}:{td.getSubIndex()} "
+ '|'.join([d.indicator() for d in td.getDispositionSet()]) + '|'.join([d.indicator() for d in td.getDispositionSet()])
+ ' ' + ' '.join([str(k)+'='+str(v) for k,v in td.getTags().items()])) + ' ' + ' '.join([str(k)+'='+str(v) for k,v in td.getTags().items()]))

@ -373,7 +373,8 @@ class MediaDetailsScreen(Screen):
self.tracksTable.clear() self.tracksTable.clear()
trackDescriptorList = self.__sourceMediaDescriptor.getAllTrackDescriptors() # trackDescriptorList = self.__sourceMediaDescriptor.getAllTrackDescriptors()
trackDescriptorList = self.__sourceMediaDescriptor.getTrackDescriptors()
typeCounter = {} typeCounter = {}
@ -611,7 +612,8 @@ class MediaDetailsScreen(Screen):
if tagKey not in self.__ignoreGlobalKeys and not tagKey in self.__removeGlobalKeys: if tagKey not in self.__ignoreGlobalKeys and not tagKey in self.__removeGlobalKeys:
self.__tac.updateMediaTag(patternId, tagKey, tagValue) self.__tac.updateMediaTag(patternId, tagKey, tagValue)
for trackDescriptor in self.__sourceMediaDescriptor.getAllTrackDescriptors(): # for trackDescriptor in self.__sourceMediaDescriptor.getAllTrackDescriptors():
for trackDescriptor in self.__sourceMediaDescriptor.getTrackDescriptors():
self.__tc.addTrack(trackDescriptor, patternId = patternId) self.__tc.addTrack(trackDescriptor, patternId = patternId)

@ -164,7 +164,8 @@ def createMediaTestFile(mediaDescriptor: MediaDescriptor,
subIndexCounter = {} subIndexCounter = {}
for trackDescriptor in mediaDescriptor.getAllTrackDescriptors(): # for trackDescriptor in mediaDescriptor.getAllTrackDescriptors():
for trackDescriptor in mediaDescriptor.getTrackDescriptors():
trackType = trackDescriptor.getType() trackType = trackDescriptor.getType()

@ -122,7 +122,8 @@ class Scenario2(Scenario):
resultFileProperties = FileProperties(testContext, resultFile) resultFileProperties = FileProperties(testContext, resultFile)
resultMediaDescriptor = resultFileProperties.getMediaDescriptor() resultMediaDescriptor = resultFileProperties.getMediaDescriptor()
resultMediaTracks = resultMediaDescriptor.getAllTrackDescriptors() # resultMediaTracks = resultMediaDescriptor.getAllTrackDescriptors()
resultMediaTracks = resultMediaDescriptor.getTrackDescriptors()
for assertIndex in range(len(assertSelectorList)): for assertIndex in range(len(assertSelectorList)):

@ -223,7 +223,8 @@ class Scenario4(Scenario):
self._logger.debug(f"{variantLabel}: Result file properties: {rfp.getFilename()} season={rfp.getSeason()} episode={rfp.getEpisode()}") self._logger.debug(f"{variantLabel}: Result file properties: {rfp.getFilename()} season={rfp.getSeason()} episode={rfp.getEpisode()}")
rmd = rfp.getMediaDescriptor() rmd = rfp.getMediaDescriptor()
rmt = rmd.getAllTrackDescriptors() # rmt = rmd.getAllTrackDescriptors()
rmt = rmd.getTrackDescriptors()
for l in rmd.getConfiguration(label = 'resultMediaDescriptor'): for l in rmd.getConfiguration(label = 'resultMediaDescriptor'):
self._logger.debug(l) self._logger.debug(l)

Loading…
Cancel
Save