123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- from datetime import datetime
- import glob
- import os
- import soundfile as sf
- import re
- import tqdm
- import pysubs2
- root_path = ""
- dir_list = glob.glob(root_path + "*/")
- pattern_1 = r'\(\(\)\)'
- pattern_2 = r'\{(\w*)\}'
- pattern_2_1 = r'\[(\w*)\]'
- pattern_2_2 = r'\((\w*)\)'
- pattern_2_1 = r'[^/]\(([\w|\s]*)\)[^/]'
- pattern_3_1 = r'\(([\w|\s|.]*)\)/\(([\w|\s|.]*)\)'
- pattern_3_2 = r'\(([\w|\s]*)\)'
- pattern_3_3 = r'\{([\w|\s|.]*)\}/\{([\w|\s|.]*)\}'
- pattern_4 = r'[\(\)\{\}]'
- pattern_4_1 = r'&([\w|-]*)&'
- pattern_5 = r"[^\uAC00-\uD7A30-9a-zA-Z\s]"
- pattern_6 = r" {2,}"
- pattern_7 = r"\\N"
- now = datetime.now()
- time_str = now.astimezone().strftime('%Y_%m_%d_%H_%M_%S')
- def postprocess(origin):
- _a = re.sub(pattern=pattern_7, repl=' ', string = origin)
- _a = re.sub(pattern=pattern_1, repl='', string = _a)
- _a = re.sub(pattern=pattern_2, repl=r'\1', string = _a)
- _a = re.sub(pattern=pattern_2_1, repl=r'\1', string = _a)
-
- _a = re.sub(pattern=pattern_5, repl = "", string = _a)
- _a = re.sub(pattern=pattern_6, repl = " ", string = _a)
- _a = _a.strip()
- if len(_a) == 0:
- return None
- else:
- return _a
- def time_convert(time):
- split = re.split(r',|:', time)
- mi = int(split[0])
- mi = mi * 60 + int(split[1])
- mi = mi * 60 + int(split[2]) + float('0.' + split[3])
-
- return mi
-
- for _dir in dir_list:
- post_none_list = []
- not_exist_list = []
-
- if not os.path.isdir(_dir):
- continue
-
- output_dir = os.path.join(_dir, "split")
- os.makedirs(output_dir, exist_ok=True)
-
- srt_list = glob.glob(os.path.join(_dir,'*.srt'))
- for srt in tqdm.tqdm(srt_list):
-
- base_name = srt.rsplit('_', 2)[0]
- folder_name, file_name = base_name.rsplit('/', 1)
-
- if not os.path.isfile(base_name + '.wav'):
- not_exist_list.append(file_name)
- continue
- y, sr = sf.read(base_name + '.wav')
- subs = pysubs2.load(srt, encoding="utf-8")
- for idx, sub in enumerate(subs):
- start = int(sub.start / 1000 * sr)
- end = int(sub.end/1000*sr)
-
- post = postprocess(sub.text)
-
- str_num = str(idx)
- str_num = '_' + ('0' * (3 - len(str_num))) + str_num
- tmp_file_name = file_name + str_num + ".wav"
-
- if post is None:
- post_none_list.append([tmp_file_name, sub.text])
- continue
-
- sp_wav = y[start : end+1]
- sf.write(os.path.join(output_dir, tmp_file_name), sp_wav, sr)
- with open(os.path.join(output_dir, tmp_file_name.replace('wav', 'txt')), 'w+') as f:
- f.write(post + '\n')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if post_none_list:
- print('postprocess none = ', len(post_none_list))
- txt = f'log/post_none_{time_str}.txt'
- with open(txt, 'w+') as f:
- for item in post_none_list:
- f.write("\t".join(item) + "\n")
-
- if not_exist_list:
- print('not exist = ', len(not_exist_list))
- txt = f'log/not_exist_{time_str}.txt'
- for item in post_none_list:
- with open(txt, 'w+') as f:
- f.write("\t".join(item) + "\n")
|