Advertisement
Guest User

Subsmerge.py

a guest
Apr 8th, 2023
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. import os
  2. from tkinter import filedialog, Tk, Button
  3. import re
  4. from datetime import datetime, timedelta
  5.  
  6. def merge_subtitles(file_path):
  7. with open(file_path, "r", encoding="utf-8") as file:
  8. content = file.read()
  9. blocks = re.split(r"\n\n", content.strip())
  10. subtitles = []
  11.  
  12. for block in blocks:
  13. parts = block.split("\n")
  14. index = int(parts[0].strip())
  15. start_time, end_time = re.findall(r"(\d{2}:\d{2}:\d{2},\d{3})", parts[1])
  16. text = "\n".join(parts[2:])
  17.  
  18. subtitles.append({
  19. "index": index,
  20. "start_time": datetime.strptime(start_time, "%H:%M:%S,%f"),
  21. "end_time": datetime.strptime(end_time, "%H:%M:%S,%f"),
  22. "text": text
  23. })
  24.  
  25. merged_subtitles = [subtitles[0]]
  26. for i in range(1, len(subtitles)):
  27. time_diff = (subtitles[i]["start_time"] - merged_subtitles[-1]["end_time"]).total_seconds() * 1000
  28.  
  29. if time_diff <= 250:
  30. merged_subtitles[-1]["end_time"] = subtitles[i]["end_time"]
  31. merged_subtitles[-1]["text"] += " " + subtitles[i]["text"]
  32. else:
  33. merged_subtitles.append(subtitles[i])
  34.  
  35. output_file_path = os.path.splitext(file_path)[0] + "_merged.srt"
  36. with open(output_file_path, "w", encoding="utf-8") as output_file:
  37. for i, subtitle in enumerate(merged_subtitles):
  38. output_file.write(f"{i + 1}\n")
  39. start_time = subtitle["start_time"].strftime("%H:%M:%S,%f")[:-3]
  40. end_time = subtitle["end_time"].strftime("%H:%M:%S,%f")[:-3]
  41. output_file.write(f"{start_time} --> {end_time}\n")
  42. output_file.write(f"{subtitle['text']}\n\n")
  43.  
  44. def process_files():
  45. file_paths = filedialog.askopenfilenames(filetypes=[("SRT files", "*.srt")])
  46. for file_path in file_paths:
  47. merge_subtitles(file_path)
  48.  
  49. root = Tk()
  50. root.title("Subtitle Merger")
  51. root.geometry("300x100")
  52.  
  53. select_button = Button(root, text="Select and Process SRT Files", command=process_files)
  54. select_button.pack(expand=True, fill="both")
  55.  
  56. root.mainloop()
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement