Files
unshackle-SeFree/SeFree-Custom-Script/remove_track.py
2026-03-31 21:39:22 +07:00

91 lines
2.1 KiB
Python

import subprocess
import json
from pathlib import Path
INPUT_DIR = Path("/Entertainment_1/Downloads/USCK/Series/Hokkaido.Gals.Are.Super.Adorable.2024.S01.1080p.CR.WEB-DL.DUAL.AAC2.0.H.264-[SeFree]")
OUTPUT_DIR = INPUT_DIR / "output"
# remove only forced thai
TARGET_LANGS = ["tha"]
REMOVE_FORCED = True
# track types to apply
TRACK_TYPES = ["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 split_tracks(tracks):
keep = {
"video": [],
"audio": [],
"subtitles": [],
}
removed = []
for t in tracks:
track_id = t["id"]
track_type = t["type"]
props = t["properties"]
lang = props.get("language")
forced = props.get("forced_track", False)
should_remove = False
# remove ONLY forced thai subtitles
if (
track_type in TRACK_TYPES
and TARGET_LANGS
and lang in TARGET_LANGS
and REMOVE_FORCED
and forced
):
should_remove = True
if should_remove:
removed.append(track_id)
else:
if track_type in keep:
keep[track_type].append(track_id)
return keep, removed
for mkv_file in INPUT_DIR.glob("*.mkv"):
print(f"Processing: {mkv_file.name}")
tracks = get_tracks(mkv_file)
keep, removed = split_tracks(tracks)
if not removed:
print(" No forced Thai tracks")
continue
output_file = OUTPUT_DIR / mkv_file.name
cmd = ["mkvmerge", "-o", str(output_file)]
if keep["video"]:
cmd.extend(["--video-tracks", ",".join(map(str, keep["video"]))])
if keep["audio"]:
cmd.extend(["--audio-tracks", ",".join(map(str, keep["audio"]))])
if keep["subtitles"]:
cmd.extend(["--subtitle-tracks", ",".join(map(str, keep["subtitles"]))])
cmd.append(str(mkv_file))
subprocess.run(cmd)
print(f" Removed forced Thai tracks: {removed}")
print("Done")