Fixes remove stream tags per list

This commit is contained in:
Javanaut
2026-04-11 17:31:10 +02:00
parent 9611930949
commit ebdc23c3ce
3 changed files with 110 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
from __future__ import annotations
import json
from pathlib import Path
import tempfile
import unittest
@@ -39,6 +40,11 @@ class SubtrackMappingBundleTests(unittest.TestCase):
def tearDown(self):
self.tempdir.cleanup()
def write_config(self, data: dict) -> None:
config_dir = self.home_dir / ".local" / "etc"
config_dir.mkdir(parents=True, exist_ok=True)
(config_dir / "ffx.json").write_text(json.dumps(data), encoding="utf-8")
def assertCompleted(self, completed):
if completed.returncode != 0:
self.fail(
@@ -218,6 +224,15 @@ class SubtrackMappingBundleTests(unittest.TestCase):
def test_external_subtitle_file_replaces_payload_and_overrides_metadata(self):
source_filename = "substitute_s01e01.mkv"
self.write_config(
{
"metadata": {
"streams": {
"remove": ["BPS"],
}
}
}
)
source_path = create_source_fixture(
self.workdir,
source_filename,
@@ -229,6 +244,7 @@ class SubtrackMappingBundleTests(unittest.TestCase):
identity="embedded-subtitle",
language="eng",
title="Embedded Title",
extra_tags={"BPS": "remove-me", "EXTERNAL_KEEP": "keep-me"},
subtitle_lines=("embedded subtitle payload",),
),
],
@@ -273,6 +289,8 @@ class SubtrackMappingBundleTests(unittest.TestCase):
self.assertEqual(get_tag(subtitle_stream, "language"), "deu")
self.assertEqual(get_tag(subtitle_stream, "title"), "Embedded Title")
self.assertEqual(get_tag(subtitle_stream, "THIS_IS"), "embedded-subtitle")
self.assertEqual(get_tag(subtitle_stream, "EXTERNAL_KEEP"), "keep-me")
self.assertIsNone(get_tag(subtitle_stream, "BPS"))
extracted_subtitle = extract_first_subtitle_text(self.workdir, output_path)
self.assertIn("external subtitle payload", extracted_subtitle)

View File

@@ -0,0 +1,84 @@
from __future__ import annotations
from pathlib import Path
import sys
import unittest
SRC_ROOT = Path(__file__).resolve().parents[2] / "src"
if str(SRC_ROOT) not in sys.path:
sys.path.insert(0, str(SRC_ROOT))
from ffx.media_descriptor import MediaDescriptor # noqa: E402
from ffx.media_descriptor_change_set import MediaDescriptorChangeSet # noqa: E402
from ffx.track_descriptor import TrackDescriptor # noqa: E402
from ffx.track_type import TrackType # noqa: E402
from ffx.logging_utils import get_ffx_logger # noqa: E402
class StaticConfig:
def __init__(self, data: dict):
self._data = data
def getData(self):
return self._data
class MediaDescriptorChangeSetTests(unittest.TestCase):
def test_external_subtitle_preserves_source_only_tags_except_removed_keys(self):
context = {
"logger": get_ffx_logger(),
"config": StaticConfig(
{
"metadata": {
"streams": {
"remove": ["BPS"],
}
}
}
),
}
source_track = TrackDescriptor(
index=0,
source_index=0,
sub_index=0,
track_type=TrackType.SUBTITLE,
tags={
"language": "eng",
"title": "Embedded Title",
"THIS_IS": "embedded-subtitle",
"EXTERNAL_KEEP": "keep-me",
"BPS": "remove-me",
},
)
target_track = TrackDescriptor(
index=0,
source_index=0,
sub_index=0,
track_type=TrackType.SUBTITLE,
tags={"language": "deu"},
external_source_file="/tmp/external-subtitle.vtt",
)
change_set = MediaDescriptorChangeSet(
context,
MediaDescriptor(track_descriptors=[target_track]),
MediaDescriptor(track_descriptors=[source_track]),
)
metadata_tokens = change_set.generateMetadataTokens()
self.assertIn("-metadata:s:s:0", metadata_tokens)
self.assertIn("language=deu", metadata_tokens)
self.assertIn("title=Embedded Title", metadata_tokens)
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)
if __name__ == "__main__":
unittest.main()