Add script to extract source scripts
This commit is contained in:
parent
6fa57bf596
commit
33d8dd908e
68
tools/extract.py
Normal file
68
tools/extract.py
Normal file
@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# $1: source ep number
|
||||
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
this_dir = Path(__file__).parent
|
||||
src_dir = this_dir.parent / "[Chyuu-PAS] Shoujo☆Kageki Revue Starlight [WEB 1080p EAC3]"
|
||||
target_dir_template = this_dir.parent / "Folge {ep_num:02d}" / "english"
|
||||
sub_template = target_dir_template / "[Chyuu-PAS] SKRS - {ep_num:02d}.ass"
|
||||
font_dir_template = target_dir_template / "cpas_fonts"
|
||||
chapters_template = target_dir_template.parent / "chapters.xml"
|
||||
|
||||
|
||||
# def mkv(prog, *args, **kwargs):
|
||||
# cmd = [f'mkv{prog}', *args]
|
||||
# print("running", cmd)
|
||||
# return subprocess.run(cmd, check=True, capture_output=True, text=True, **kwargs)
|
||||
|
||||
|
||||
def mkvidentify(path):
|
||||
cmd = ['mkvmerge', "-J", str(path)]
|
||||
result = subprocess.run(cmd, check=True, capture_output=True, text=True)
|
||||
return json.loads(result.stdout)
|
||||
|
||||
|
||||
def mkvextract(path, *args):
|
||||
cmd = ['mkvextract', str(path), *args]
|
||||
print("\n[CMD]", cmd)
|
||||
return subprocess.run(cmd, check=True, stdout=sys.stdout, stderr=sys.stderr)
|
||||
|
||||
|
||||
def main():
|
||||
for ep_num in map(int, sys.argv[1:]):
|
||||
src_path = next(src_dir.glob(f"* - {ep_num:02d}*"))
|
||||
print("[SRC]", src_path)
|
||||
identify = mkvidentify(src_path)
|
||||
|
||||
# extract subs, chapters, attachments
|
||||
for track in identify['tracks']:
|
||||
if track['codec'] == 'SubStationAlpha':
|
||||
subs_id = track['id']
|
||||
os.makedirs(str(target_dir_template).format(ep_num=ep_num), exist_ok=True)
|
||||
mkvextract(src_path, 'tracks',
|
||||
f"{subs_id}:{str(sub_template).format(ep_num=ep_num)}")
|
||||
break
|
||||
else:
|
||||
print("No subtitle track found")
|
||||
|
||||
font_dir = str(font_dir_template).format(ep_num=ep_num)
|
||||
os.makedirs(font_dir, exist_ok=True)
|
||||
attach_args = [
|
||||
f"{attach['id']}:{str(font_dir_template / attach['file_name']).format(ep_num=ep_num)}"
|
||||
for attach in identify['attachments']
|
||||
]
|
||||
mkvextract(src_path, 'attachments', *attach_args)
|
||||
|
||||
mkvextract(src_path, 'chapters', str(chapters_template).format(ep_num=ep_num))
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
Loading…
Reference in New Issue
Block a user