import re import sys import argparse def offset_timestamp(timestamp, offset): hours, minutes, seconds, microseconds = map(float, re.split('[:.]', timestamp)) total_seconds = hours * 3600 \ + minutes * 60 \ + seconds \ + (microseconds * 0.001) \ + offset new_hours = int(total_seconds // 3600) new_minutes = int((total_seconds % 3600) // 60) new_seconds = total_seconds % 60 return f"{new_hours:02}:{new_minutes:02}:{new_seconds:.3f}" def update_webvtt(file_path, offset): with open(file_path, 'r', encoding='utf-8') as file: lines = file.readlines() updated_lines = [] for line in lines: ts = line[:line.find("align")] if '-->' in ts: start, end = ts.split(' --> ') updated_start = offset_timestamp(start.strip(), offset) updated_end = offset_timestamp(end.strip(), offset) updated_lines.append(f"{updated_start} --> {updated_end}\n") else: updated_lines.append(line) with open('updated_' + file_path, 'w', encoding='utf-8') as file: file.writelines(updated_lines) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('input_file', type=str, help='The input file name') parser.add_argument('time_offset', type=str, help='The output file name') args = parser.parse_args() vtt = args.input_file t = args.time_offset minutes, seconds = map(float, re.split('[:.]', t)) offset = minutes * 60 + seconds print("bumping timestamps in file %s by %f seconds" % (vtt, offset)) update_webvtt(vtt, -offset) # Use -40 to offset back by 40 seconds