Add dltxt2m3t.py

This commit is contained in:
2025-11-09 23:43:50 +08:00
parent 1c054cdd78
commit 23bc4509bf

89
dltxt2m3t.py Normal file
View File

@@ -0,0 +1,89 @@
import os
def save_m3t(m3t_path, mes):
with open(m3t_path, "w", encoding="utf-8") as f:
for m in mes:
if 'name' in m:
f.write("○ NAME: {}\n\n".format(m["name"]))
f.write("{}\n".format(m["ori"]))
if 'llm' in m:
f.write("{}\n".format(m["llm"]))
if 'dst_name' in m:
f.write("○ NAME: {}\n\n".format(m["dst_name"]))
if m['dst']:
f.write("{}\n".format(m["dst"]))
else:
f.write("\n")
f.write("\n")
def load_dltxt(dltxt_path):
mes = []
name = None
ori = None
line_num = 0
for line in open(dltxt_path, "r", encoding="utf-8"):
if line_num == 0:
line = line.lstrip("\ufeff")
line_num += 1
line = line.strip()
if line.startswith(""):
oris = line[1:].strip().split("", 1)
if len(oris) == 1:
raise ValueError("Invalid format: missing ○ after ○.")
names = oris[0].split("|")
if len(names) != 2:
raise ValueError("Invalid format: expected exactly one | in the name section.")
name = names[1].strip()
if name == "V.O.":
name = None
ori = oris[1].strip()
elif line.startswith(""):
dsts = line[1:].strip().split("", 1)
if len(dsts) == 1:
raise ValueError("Invalid format: missing ● after ●.")
dst_names = dsts[0].split("|")
if len(dst_names) != 2:
raise ValueError("Invalid format: expected exactly one | in the dst section.")
dst_name = dst_names[1].strip()
if dst_name == "V.O.":
dst_name = None
dst = dsts[1].strip()
if ori is None:
raise ValueError(f"Invalid format: found ● before ○ on line {line_num}.")
target = {
"ori": ori,
"dst": dst,
}
if name is not None:
target["name"] = name
if dst_name is not None:
target["dst_name"] = dst_name
name = None
ori = None
mes.append(target)
return mes
def process_recursive(dltxt_path, m3t_path):
for root, dirs, files in os.walk(dltxt_path):
rel_dir = os.path.relpath(root, dltxt_path)
target_dir = os.path.join(m3t_path, rel_dir)
os.makedirs(target_dir, exist_ok=True)
for file in files:
ori = os.path.join(root, file)
print("Processing:", ori)
mes = load_dltxt(ori)
save_m3t(os.path.join(target_dir, os.path.splitext(file)[0] + '.m3t'), mes)
if __name__ == "__main__":
import sys
dltxt_path = sys.argv[1]
m3t_path = sys.argv[2]
if os.path.isdir(dltxt_path):
process_recursive(dltxt_path, m3t_path)
else:
mes = load_dltxt(dltxt_path)
save_m3t(m3t_path, mes)