fix(audio): nur die beste Tonspur pro Sprache verlustfrei kopieren
Ampel / ampel (push) Failing after 29s

This commit is contained in:
Hitonabi
2026-07-26 20:55:57 +02:00
parent 4cb1fab416
commit d15900d1eb
2 changed files with 11 additions and 9 deletions
+5 -4
View File
@@ -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 3. Wird ein Disc-Typ NICHT komprimiert (4K verlustfrei), bleiben ohnehin alle
Sprachen drin — und das ist bei einer verlustfreien Ablage richtig. Sprachen drin — und das ist bei einer verlustfreien Ablage richtig.
`--audio-lang-list` zusammen mit `--all-audio` heißt laut HandBrake-Hilfe: `--audio-lang-list` zusammen mit `--first-audio` heißt: HandBrake pickt pro
alle Tonspuren, die zu einer der Sprachen passen. Leere Liste = alles, wie Sprache genau die erste (beste) Tonspur heraus. `--audio-codec copy` reicht
bisher. diese dann verlustfrei durch, statt sie auf Stereo herunterzurechnen.
""" """
befehl = [ befehl = [
"HandBrakeCLI", "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] audio = [s for s in (audio_sprachen or []) if s]
if audio: if audio:
befehl += ["--audio-lang-list", ",".join(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] untertitel = [s for s in (untertitel_sprachen or []) if s]
if untertitel: if untertitel:
befehl += ["--subtitle-lang-list", ",".join(untertitel)] befehl += ["--subtitle-lang-list", ",".join(untertitel)]
+6 -5
View File
@@ -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("--input") + 1] == "/app/temp/raw/x/t00.mkv"
assert cmd[cmd.index("--output") + 1] == "/app/media/bluray/x/t00.mkv" assert cmd[cmd.index("--output") + 1] == "/app/media/bluray/x/t00.mkv"
assert "--preset" in cmd 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 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") cmd = build_handbrake_cmd("/a.mkv", "/b.mkv", "H.265 MKV 1080p30")
assert "--audio-lang-list" not in cmd assert "--audio-lang-list" not in cmd
assert "--subtitle-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(): def test_handbrake_kommando_mit_sprachauswahl():
"""--audio-lang-list zusammen mit --all-audio heisst laut HandBrake-Hilfe: """--audio-lang-list zusammen mit --first-audio heisst laut HandBrake-Hilfe:
alle Tonspuren, die zu einer der Sprachen passen.""" nur die erste (beste) Tonspur, die zu einer der Sprachen passen."""
from ripping import build_handbrake_cmd from ripping import build_handbrake_cmd
cmd = build_handbrake_cmd("/a.mkv", "/b.mkv", "H.265 MKV 1080p30", 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"]) untertitel_sprachen=["deu"])
assert cmd[cmd.index("--audio-lang-list") + 1] == "deu,jpn" assert cmd[cmd.index("--audio-lang-list") + 1] == "deu,jpn"
assert cmd[cmd.index("--subtitle-lang-list") + 1] == "deu" 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