From e8c0c3d646b05abcdeead2025a8e3b1bef73eb33 Mon Sep 17 00:00:00 2001 From: Maveno Date: Sun, 24 Nov 2024 12:56:31 +0100 Subject: [PATCH] fix unchanged tracks for external files --- src/ffx/media_descriptor.py | 6 ++---- src/ffx/media_descriptor_change_set.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ffx/media_descriptor.py b/src/ffx/media_descriptor.py index e3bec9f..b580bf6 100644 --- a/src/ffx/media_descriptor.py +++ b/src/ffx/media_descriptor.py @@ -317,6 +317,7 @@ class MediaDescriptor: def getImportFileTokens(self, use_sub_index: bool = True): + """Generate ffmpeg import options for external stream files""" importFileTokens = [] @@ -347,14 +348,11 @@ class MediaDescriptor: filePointer = 1 for trackIndex in range(len(self.__trackDescriptors)): - td = self.__trackDescriptors[trackIndex] + td: TrackDescriptor = self.__trackDescriptors[trackIndex] stdi = self.__trackDescriptors[td.getSourceIndex()].getIndex() stdsi = self.__trackDescriptors[td.getSourceIndex()].getSubIndex() - # sti = self.__trackDescriptors[trackIndex].getSourceIndex() - # sotd = sourceOrderTrackDescriptors[sti] - trackType = td.getType() if (trackType == TrackType.VIDEO or not only_video): diff --git a/src/ffx/media_descriptor_change_set.py b/src/ffx/media_descriptor_change_set.py index 7c59074..46ea26b 100644 --- a/src/ffx/media_descriptor_change_set.py +++ b/src/ffx/media_descriptor_change_set.py @@ -269,6 +269,7 @@ class MediaDescriptorChangeSet(): addedTrackTags = tagsDiffObj[DIFF_ADDED_KEY] if DIFF_ADDED_KEY in tagsDiffObj.keys() else {} changedTrackTags = tagsDiffObj[DIFF_CHANGED_KEY] if DIFF_CHANGED_KEY in tagsDiffObj.keys() else {} + unchangedTrackTags = tagsDiffObj[DIFF_UNCHANGED_KEY] if DIFF_UNCHANGED_KEY in tagsDiffObj.keys() else {} removedTrackTags = tagsDiffObj[DIFF_REMOVED_KEY] if DIFF_REMOVED_KEY in tagsDiffObj.keys() else {} outputTrackTags = addedTrackTags | changedTrackTags @@ -284,6 +285,15 @@ class MediaDescriptorChangeSet(): metadataTokens += [f"-metadata:s:{trackDescriptor.getType().indicator()}" + f":{trackDescriptor.getSubIndex()}", f"{removeKey}="] + + #HINT: In case of loading a track from an external file + # no tags from source are present for the track so + # the unchanged tracks are passed to the output file as well + if trackDescriptor.getExternalSourceFilePath(): + for tagKey, tagValue in unchangedTrackTags.items(): + metadataTokens += [f"-metadata:s:{trackDescriptor.getType().indicator()}" + + f":{trackDescriptor.getSubIndex()}", + f"{tagKey}={tagValue}"] return metadataTokens