From d15900d1ebe82e0b2ffaee05ebc631cf0127e7a6 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Sun, 26 Jul 2026 20:55:57 +0200 Subject: [PATCH] fix(audio): nur die beste Tonspur pro Sprache verlustfrei kopieren --- docker/worker/ripping.py | 9 +++++---- docker/worker/test_ripping_helpers.py | 11 ++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/docker/worker/ripping.py b/docker/worker/ripping.py index f5c2372..2152f19 100644 --- a/docker/worker/ripping.py +++ b/docker/worker/ripping.py @@ -527,9 +527,9 @@ def build_handbrake_cmd(input_path: str, output_path: str, 3. Wird ein Disc-Typ NICHT komprimiert (4K verlustfrei), bleiben ohnehin alle Sprachen drin — und das ist bei einer verlustfreien Ablage richtig. - `--audio-lang-list` zusammen mit `--all-audio` heißt laut HandBrake-Hilfe: - alle Tonspuren, die zu einer der Sprachen passen. Leere Liste = alles, wie - bisher. + `--audio-lang-list` zusammen mit `--first-audio` heißt: HandBrake pickt pro + Sprache genau die erste (beste) Tonspur heraus. `--audio-codec copy` reicht + diese dann verlustfrei durch, statt sie auf Stereo herunterzurechnen. """ befehl = [ "HandBrakeCLI", @@ -540,7 +540,8 @@ def build_handbrake_cmd(input_path: str, output_path: str, audio = [s for s in (audio_sprachen or []) if s] if audio: befehl += ["--audio-lang-list", ",".join(audio)] - befehl.append("--all-audio") + befehl.append("--first-audio") + befehl += ["--audio-codec", "copy", "--audio-fallback", "av_aac"] untertitel = [s for s in (untertitel_sprachen or []) if s] if untertitel: befehl += ["--subtitle-lang-list", ",".join(untertitel)] diff --git a/docker/worker/test_ripping_helpers.py b/docker/worker/test_ripping_helpers.py index 9f57d45..c8ceda7 100644 --- a/docker/worker/test_ripping_helpers.py +++ b/docker/worker/test_ripping_helpers.py @@ -38,7 +38,8 @@ def test_handbrake_cmd_arbeitet_auf_datei_nicht_geraet(): assert cmd[cmd.index("--input") + 1] == "/app/temp/raw/x/t00.mkv" assert cmd[cmd.index("--output") + 1] == "/app/media/bluray/x/t00.mkv" assert "--preset" in cmd - assert "--all-audio" in cmd # alle Sprachen behalten + assert "--first-audio" in cmd # beste Spur pro Sprache behalten + assert "--audio-codec" in cmd assert "--all-subtitles" in cmd @@ -578,12 +579,12 @@ def test_handbrake_kommando_ohne_auswahl_bleibt_wie_bisher(): cmd = build_handbrake_cmd("/a.mkv", "/b.mkv", "H.265 MKV 1080p30") assert "--audio-lang-list" not in cmd assert "--subtitle-lang-list" not in cmd - assert "--all-audio" in cmd and "--all-subtitles" in cmd + assert "--first-audio" in cmd and "--all-subtitles" in cmd def test_handbrake_kommando_mit_sprachauswahl(): - """--audio-lang-list zusammen mit --all-audio heisst laut HandBrake-Hilfe: - alle Tonspuren, die zu einer der Sprachen passen.""" + """--audio-lang-list zusammen mit --first-audio heisst laut HandBrake-Hilfe: + nur die erste (beste) Tonspur, die zu einer der Sprachen passen.""" from ripping import build_handbrake_cmd cmd = build_handbrake_cmd("/a.mkv", "/b.mkv", "H.265 MKV 1080p30", @@ -591,4 +592,4 @@ def test_handbrake_kommando_mit_sprachauswahl(): untertitel_sprachen=["deu"]) assert cmd[cmd.index("--audio-lang-list") + 1] == "deu,jpn" assert cmd[cmd.index("--subtitle-lang-list") + 1] == "deu" - assert "--all-audio" in cmd and "--all-subtitles" in cmd + assert "--first-audio" in cmd and "--all-subtitles" in cmd