|
import argparse |
|
import re |
|
from tqdm import tqdm |
|
|
|
def sum_seconds(time, seconds): |
|
|
|
time = time.split(",") |
|
time_milisecons = time[1] |
|
time_milisecons = int(time_milisecons)/1000 |
|
time = time[0].split(":") |
|
time = int(time[0])*3600 + int(time[1])*60 + int(time[2]) |
|
|
|
|
|
seconds, seconds_miliseconds = divmod(seconds, 1) |
|
seconds = int(seconds) |
|
seconds_miliseconds = round(seconds_miliseconds, 3) |
|
|
|
|
|
time = time + seconds |
|
time_milisecons = time_milisecons + seconds_miliseconds |
|
if time_milisecons >= 1: |
|
time = time + 1 |
|
time_milisecons = time_milisecons - 1 |
|
time_milisecons = round(time_milisecons, 3) |
|
|
|
|
|
hours = int(time) // 3600 |
|
minutes = (int(time) % 3600) // 60 |
|
seconds = (int(time) % 3600) % 60 |
|
time_milisecons = str(time_milisecons).split(".")[1] |
|
time = f"{hours:02d}:{minutes:02d}:{seconds:02d},{time_milisecons}" |
|
|
|
return time |
|
|
|
def hmsms_to_seconds(time): |
|
|
|
time = time.split(",") |
|
milisecons = time[1] |
|
time = time[0].split(":") |
|
time = int(time[0])*3600 + int(time[1])*60 + int(time[2]) |
|
time = time + int(milisecons)/1000 |
|
|
|
return time |
|
|
|
def concatenate_transcriptions(chunk_files, seconds): |
|
chunk_folder = "transcriptions" |
|
output_folder = "concatenated_transcriptions" |
|
transcription_extension = "srt" |
|
|
|
|
|
with open(chunk_files, "r") as f: |
|
files = f.read().splitlines() |
|
|
|
|
|
transcription = "" |
|
num_transcriptions = 1 |
|
progress_bar = tqdm(total=len(files), desc='Concatenating transcriptions progress') |
|
for i, file in enumerate(files): |
|
chunk = file |
|
_, file = chunk.split("/") |
|
file, _ = file.split(".") |
|
transcription_chunk_file = f"{chunk_folder}/{file}.{transcription_extension}" |
|
with open(transcription_chunk_file, "r") as f: |
|
transcription_chunk = f.read().splitlines() |
|
for line in transcription_chunk: |
|
|
|
|
|
if re.match(r"\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d", line): |
|
|
|
start, end = line.split(" --> ") |
|
|
|
start = sum_seconds(start, i*seconds) |
|
end = sum_seconds(end, i*seconds) |
|
|
|
transcription += f"{start} --> {end}\n" |
|
|
|
|
|
elif re.match(r"\d+$", line): |
|
transcription += f"{num_transcriptions}\n" |
|
num_transcriptions += 1 |
|
|
|
else: |
|
transcription += f"{line}\n" |
|
progress_bar.update(1) |
|
|
|
|
|
file_split = file.split("_")[:-1] |
|
file = "_".join(file_split) |
|
output_file = f"{output_folder}/{file}.{transcription_extension}" |
|
with open(output_file, "w") as f: |
|
f.write(transcription) |
|
|
|
if __name__ == "__main__": |
|
parser = argparse.ArgumentParser() |
|
parser.add_argument("chunk_files", help="Path to the file containing the paths to the chunk files") |
|
parser.add_argument("seconds", help="Duration of each chunk in seconds") |
|
args = parser.parse_args() |
|
|
|
chunk_files = args.chunk_files |
|
seconds = int(args.seconds) |
|
concatenate_transcriptions(chunk_files, seconds) |
|
|