67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
import subprocess
|
|
import json
|
|
from pathlib import Path
|
|
|
|
INPUT_DIR = Path("/Entertainment_1/Downloads/USCK/Series/Release.that.Witch.2026.S01.1080p.CR.WEB-DL.AAC2.0.H.264-[SeFree]")
|
|
OUTPUT_DIR = Path.joinpath(INPUT_DIR,"output")
|
|
SHIFT_MS = 28500 # +15 sec (negative = backward)
|
|
|
|
# choose one mode
|
|
TARGET_TRACK_IDS = None # example: [1,2]
|
|
TARGET_LANGS = ["tha","eng"] # example: ["eng", "jpn", "tha"]
|
|
|
|
# track types to shift
|
|
TRACK_TYPES = ["subtitles"] # ["audio", "subtitles"]
|
|
|
|
OUTPUT_DIR.mkdir(exist_ok=True)
|
|
|
|
|
|
def get_tracks(file):
|
|
cmd = ["mkvmerge", "-J", str(file)]
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
return json.loads(result.stdout)["tracks"]
|
|
|
|
|
|
def select_tracks(tracks):
|
|
selected = []
|
|
|
|
for t in tracks:
|
|
if t["type"] not in TRACK_TYPES:
|
|
continue
|
|
|
|
track_id = t["id"]
|
|
lang = t["properties"].get("language")
|
|
|
|
if TARGET_TRACK_IDS:
|
|
if track_id in TARGET_TRACK_IDS:
|
|
selected.append(track_id)
|
|
|
|
elif TARGET_LANGS:
|
|
if lang in TARGET_LANGS:
|
|
selected.append(track_id)
|
|
|
|
return selected
|
|
|
|
|
|
for mkv_file in INPUT_DIR.glob("*.mkv"):
|
|
print(f"Processing: {mkv_file.name}")
|
|
|
|
tracks = get_tracks(mkv_file)
|
|
selected_ids = select_tracks(tracks)
|
|
|
|
if not selected_ids:
|
|
print(" No matching tracks")
|
|
continue
|
|
|
|
output_file = OUTPUT_DIR / mkv_file.name
|
|
|
|
cmd = ["mkvmerge", "-o", str(output_file)]
|
|
|
|
for track_id in selected_ids:
|
|
cmd.extend(["--sync", f"{track_id}:{SHIFT_MS}"])
|
|
|
|
cmd.append(str(mkv_file))
|
|
|
|
subprocess.run(cmd)
|
|
|
|
print("Done") |