summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gay <eapoems@riseup.net>2024-01-26 23:57:12 -0500
committerDavid Gay <eapoems@riseup.net>2024-01-26 23:57:12 -0500
commit514037831f82b81571608d63d5094fd08f432780 (patch)
treec857a00b195770af75948980e180a8c02183bf7e
parent818018752f54bb01072b634a7ca3a239f92c18d5 (diff)
PEP 8
-rw-r--r--subsync.py54
1 files changed, 39 insertions, 15 deletions
diff --git a/subsync.py b/subsync.py
index 8473429..9b100e9 100644
--- a/subsync.py
+++ b/subsync.py
@@ -15,21 +15,26 @@ import chardet
os.chdir(os.path.dirname(os.path.realpath(__file__)))
os.chdir('..')
+
class mopen:
def __init__(self, filename, mode='r', **kwargs):
self.real_encoding = chardet.detect(open(filename, 'rb').read())['encoding'].lower()
self.file_o = open(filename, mode, encoding=self.real_encoding)
+
def __getattr__(self, name):
return getattr(self.file_o, name)
+
def __enter__(self):
- return self.file_o
+ return self.file_o
+
def __exit__(self, type, value, traceback):
- self.file_o.close()
+ self.file_o.close()
def get_lib_folder():
return "auto-sub-retimer"
+
def remove_styles(lines, styles):
res = []
for line in lines:
@@ -40,6 +45,7 @@ def remove_styles(lines, styles):
res.append(line)
return res
+
def count_style_occurences(lines, style):
res = 0
for line in lines:
@@ -49,6 +55,7 @@ def count_style_occurences(lines, style):
res += 1
return res
+
def get_example_lines(lines, style, sample=5):
res = []
for line in lines:
@@ -61,6 +68,7 @@ def get_example_lines(lines, style, sample=5):
return res
return res
+
def get_styles(lines):
res = []
for line in lines:
@@ -68,6 +76,7 @@ def get_styles(lines):
res.append(line[7:].split(',')[0])
return res
+
def select_keep_styles(all_styles, lines):
styles_occ = sorted([(s, count_style_occurences(lines, s)) for s in all_styles], key=lambda x: x[1], reverse=True)
for i, s in enumerate(styles_occ):
@@ -79,6 +88,7 @@ def select_keep_styles(all_styles, lines):
return all_styles
return [s[0] for i, s in enumerate(styles_occ) if str(i) in keep_indices]
+
def extract_eng_subs(mkv, index=None):
print("\nExtracting english subtitles, this may take a while...\n")
mkv_json = json.loads(subprocess.check_output([
@@ -120,15 +130,17 @@ def extract_eng_subs(mkv, index=None):
if codec_name == "subrip": codec_name = "srt"
if codec_name not in ("srt", "ssa", "ass", "idx"):
print("\n\n")
- print("#"*20)
+ print("#" * 20)
print("Embedded subtitle stream is an image based subtitle file.")
print("These are not supported by Alass and cannot be used.")
- print("#"*20)
+ print("#" * 20)
sys.exit(1)
extracted = mkv.replace(".mkv", f".EXTRACTED.{codec_name}")
- subprocess.run([os.path.join(get_lib_folder(), "mkvtoolnix\\mkvextract.exe"), "tracks", mkv, f"{index}:{extracted}"])
+ subprocess.run(
+ [os.path.join(get_lib_folder(), "mkvtoolnix\\mkvextract.exe"), "tracks", mkv, f"{index}:{extracted}"])
return index
+
def fix_styling():
extracted_subs = [f for f in os.listdir() if '.EXTRACTED.' in f]
if extracted_subs[0].split('.')[-1] != 'ass':
@@ -144,35 +156,46 @@ def fix_styling():
with open(sub, 'w', encoding="utf-8") as ass:
ass.write('\r\n'.join(lines))
+
def retime_based_on_audio(mkv, srt, conf):
retimed = mkv.replace(".mkv", ".ja.RETIMED.{}".format(conf['ext']))
- subprocess.run([os.path.join(get_lib_folder(), "alass\\alass.bat"), "--split-penalty", conf['split_pen'], mkv, srt, retimed])
+ subprocess.run(
+ [os.path.join(get_lib_folder(), "alass\\alass.bat"), "--split-penalty", conf['split_pen'], mkv, srt, retimed])
os.remove(srt)
os.rename(retimed, mkv.replace(".mkv", ".ja.{}".format(conf['ext'])))
+
def retime(mkv, srt, conf):
retimed = mkv.replace(".mkv", ".ja.RETIMED.{}".format(conf['ext']))
extracted = [f for f in os.listdir() if mkv.replace(".mkv", ".EXTRACTED.") in f][0]
- print([os.path.join(get_lib_folder(), "alass\\alass.bat"), "--split-penalty", conf['split_pen'], extracted, srt, retimed])
- subprocess.run([os.path.join(get_lib_folder(), "alass\\alass.bat"), "--split-penalty", conf['split_pen'], extracted, srt, retimed])
+ print([os.path.join(get_lib_folder(), "alass\\alass.bat"), "--split-penalty", conf['split_pen'], extracted, srt,
+ retimed])
+ subprocess.run(
+ [os.path.join(get_lib_folder(), "alass\\alass.bat"), "--split-penalty", conf['split_pen'], extracted, srt,
+ retimed])
os.remove(srt)
os.rename(retimed, mkv.replace(".mkv", ".ja.{}".format(conf['ext'])))
os.remove(extracted)
+
def fix_common_errors(srt):
lines = mopen(srt, encoding='utf-8').readlines()
- lines = [x for i, x in enumerate(lines) if not (x.strip() == "" and i+1 < len(lines) and not lines[i+1].strip().isdigit())]
+ lines = [x for i, x in enumerate(lines) if
+ not (x.strip() == "" and i + 1 < len(lines) and not lines[i + 1].strip().isdigit())]
with open(srt, 'w', encoding="utf-8") as subfile:
subfile.write(''.join(lines))
+
def tryint(s):
try:
return int(s)
except:
return s
+
def alphanum_key(s):
- return [ tryint(c) for c in re.split('([0-9]+)', s) ]
+ return [tryint(c) for c in re.split('([0-9]+)', s)]
+
if __name__ == '__main__':
# Guess the local mkv/srt pairs that need syncing
@@ -187,7 +210,8 @@ if __name__ == '__main__':
srts = sorted([f for f in files if f.endswith(f".{CONF['ext']}")], key=alphanum_key)
mkvs = [f for f in files if f.endswith(".mkv")]
while len(mkvs) > len(srts):
- print(f"Found more .mkv files than .{CONF['ext']} files. This can occur when OP/ED/extras are in the same folder as episodes.")
+ print(
+ f"Found more .mkv files than .{CONF['ext']} files. This can occur when OP/ED/extras are in the same folder as episodes.")
print("Please enter a pattern to filter out of mkv results. (e.g. OP)")
pattern = input(">>> Pattern: ")
removed = [m for m in mkvs if pattern in m]
@@ -217,15 +241,15 @@ if __name__ == '__main__':
for srt in srts:
fix_common_errors(srt)
if "2" in retime_choice:
- pool.starmap(retime_based_on_audio, zip(mkvs, srts, [CONF]*len(mkvs)))
+ pool.starmap(retime_based_on_audio, zip(mkvs, srts, [CONF] * len(mkvs)))
else:
index = None
for mkv in mkvs:
index = extract_eng_subs(mkv, index)
- #index = extract_eng_subs(mkvs[0])
- #pool.starmap(extract_eng_subs, [(x, index) for x in mkvs])
+ # index = extract_eng_subs(mkvs[0])
+ # pool.starmap(extract_eng_subs, [(x, index) for x in mkvs])
print("English Sub Extraction Complete.")
fix_styling()
- pool.starmap(retime, zip(mkvs, srts, [CONF]*len(mkvs)))
+ pool.starmap(retime, zip(mkvs, srts, [CONF] * len(mkvs)))
print("\nSuccess!\n")
time.sleep(3)