Files
unshackle-SeFree/SeFree-Custom-Script/shift_track.py
2026-03-31 12:57:14 +07:00

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")