Fix streamtags remove list

This commit is contained in:
Javanaut
2026-04-11 20:50:09 +02:00
parent 5eee7e1161
commit 9a980b5766
3 changed files with 117 additions and 1 deletions

View File

@@ -298,8 +298,25 @@ class MediaDescriptorChangeSet():
for tagKey, tagValue in self.__context.get('encoding_metadata_tags', {}).items():
metadataTokens += [f"-metadata:g", f"{tagKey}={tagValue}"]
metadataTokens += self.generateConfiguredRemovalMetadataTokens()
return metadataTokens
def getChangeSetObj(self):
return self.__changeSetObj
def generateConfiguredRemovalMetadataTokens(self):
metadataTokens = []
for removeKey in self.__removeGlobalKeys:
metadataTokens += ["-metadata:g", f"{removeKey}="]
for trackDescriptor in self.__targetTrackDescriptors:
for removeKey in self.__removeTrackKeys:
metadataTokens += [
f"-metadata:s:{trackDescriptor.getType().indicator()}:{trackDescriptor.getSubIndex()}",
f"{removeKey}=",
]
return metadataTokens

View File

@@ -184,6 +184,64 @@ class SubtrackMappingBundleTests(unittest.TestCase):
["video-0", "audio-2", "audio-1", "subtitle-3"],
)
def test_no_pattern_stream_remove_list_clears_copied_stream_metadata(self):
source_filename = "remove_tags_s01e01.mkv"
self.write_config(
{
"metadata": {
"streams": {
"remove": ["BPS"],
}
}
}
)
source_path = create_source_fixture(
self.workdir,
source_filename,
[
SourceTrackSpec(
TrackType.VIDEO,
identity="video-0",
extra_tags={"BPS": "remove-me", "KEEP_ME": "video-keep"},
),
SourceTrackSpec(
TrackType.AUDIO,
identity="audio-1",
language="eng",
title="Main Audio",
extra_tags={"BPS": "remove-me", "KEEP_ME": "audio-keep"},
),
],
)
completed = run_ffx_convert(
self.workdir,
self.home_dir,
self.database_path,
"--video-encoder",
"copy",
"--no-pattern",
"--no-tmdb",
"--no-prompt",
"--no-signature",
str(source_path),
)
self.assertCompleted(completed)
output_path = expected_output_path(self.workdir, source_filename)
streams = ffprobe_json(output_path)["streams"]
self.assertEqual(
[stream["codec_type"] for stream in streams],
["video", "audio"],
)
self.assertEqual(get_tag(streams[0], "THIS_IS"), "video-0")
self.assertEqual(get_tag(streams[0], "KEEP_ME"), "video-keep")
self.assertIsNone(get_tag(streams[0], "BPS"))
self.assertEqual(get_tag(streams[1], "THIS_IS"), "audio-1")
self.assertEqual(get_tag(streams[1], "KEEP_ME"), "audio-keep")
self.assertIsNone(get_tag(streams[1], "BPS"))
def test_pattern_validation_fails_for_nonexistent_source_track_reference(self):
source_filename = "invalid_s01e01.mkv"
source_path = create_source_fixture(

View File

@@ -77,7 +77,48 @@ class MediaDescriptorChangeSetTests(unittest.TestCase):
self.assertIn("THIS_IS=embedded-subtitle", metadata_tokens)
self.assertIn("EXTERNAL_KEEP=keep-me", metadata_tokens)
self.assertNotIn("BPS=remove-me", metadata_tokens)
self.assertNotIn("BPS=", metadata_tokens)
self.assertIn("BPS=", metadata_tokens)
def test_target_only_tracks_still_emit_remove_tokens_for_configured_stream_keys(self):
context = {
"logger": get_ffx_logger(),
"config": StaticConfig(
{
"metadata": {
"remove": ["creation_time"],
"streams": {
"remove": ["BPS"],
}
}
}
),
}
target_track = TrackDescriptor(
index=0,
source_index=0,
sub_index=0,
track_type=TrackType.AUDIO,
tags={
"language": "eng",
"title": "Main Audio",
"BPS": "remove-me",
"KEEP_ME": "keep-me",
},
)
change_set = MediaDescriptorChangeSet(
context,
MediaDescriptor(tags={"creation_time": "remove-me"}, track_descriptors=[target_track]),
)
metadata_tokens = change_set.generateMetadataTokens()
self.assertIn("-metadata:g", metadata_tokens)
self.assertIn("creation_time=", metadata_tokens)
self.assertIn("-metadata:s:a:0", metadata_tokens)
self.assertIn("BPS=", metadata_tokens)
self.assertIn("KEEP_ME=keep-me", metadata_tokens)
if __name__ == "__main__":