Пытаюсь написать скрипт для замены английского текста на русский перевод в субтитрах.
Сначала был набросок, но потом с помощью волшебных пенделей и гугля, скрипт стал обретать черты.
Есть файл субтитров srt:
1
00:00:12,753 –> 00:00:14,762
Agreed.
What's your point?
2
00:00:14,950 –> 00:00:18,140
There's no point, I just think
it's a good idea for a T-shirt.
И файл перевода:
Agreed.
Согласен.
What's your point?
А в чем смысл?
There's no point, I just think it's a good idea for a T-shirt.
Нет смысла, я всего лишь подумал, это хорошая идея для футболки.
Результат:
1
00:00:12,753 –> 00:00:14,762
Согласе
смысл?
2
00:00:14,950 –> 00:00:18,140
Нет смысла, я всего лишь
подумал, это хорошая идея для
Ну и сам скрипт.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import textwrap # Создаем словать en2rus = {} # Открываем файл c переводами with open("txt") as f: # Если открывается try: # Обрабаываем в цикле while True: # Первая строка FirstLine = next(f) # Вторая строка SecondLine = next(f) # Заносим первую строку как ключ в словарь, а вторую строку как значение в # словарь # можно заодно любую длину сюда закинуть en2rus[FirstLine] = SecondLine # print(en2rus) # Обрабатываем ошибку except StopIteration: pass # файл кончился # Открываем файл c переводами with open("srt") as b, open("srt-out", "w") as out: # Если открывается try: # Обрабаываем в цикле while True: # Первая строка FirstLine = next(b) # Номер блока субтитров. Просто записываем out.write(FirstLine) # Вторая строка. Время субтитра. Просто записываем SecondLine = next(b) out.write(SecondLine) # Третья строка ThirdLine = next(b) # Убираем знак завершения строки SrtLine = ThirdLine.rstrip('\r\n') # Перебираем все ключи словаря for key in en2rus: # Проверяем входит ли строка в ключи словаря - ключи словаря английский текст if SrtLine in key: # Определяем длину ключа Lenkey = len(key) # Определяем длину строки LenSrtLine = len(SrtLine) # Определяем длину переведенной строки, от которой нужно отрезать текст y = textwrap.wrap(en2rus[key], width=LenSrtLine) # Заменяем английский текст на перевод ReplaceLine = ThirdLine.replace(SrtLine, y[0]) # Записываем замененный текст out.write(ReplaceLine) # Четвертая строка FourthLine = next(b) # Убираем знак завершения строки SrtLine = FourthLine.rstrip('\r\n') # Если длина строки = 2, тогда просто записываем if len(SrtLine) == 2: out.write(FourthLine) else: # Иначе: # Перебираем все ключи словаря for key in en2rus: # Проверяем входит ли строка в ключи словаря - ключи словаря английский текст if SrtLine in key: # Определяем длину ключа Lenkey = len(key) # Определяем длину строки LenFourthLine = len(SrtLine) # Определяем длину переведенной строки, от которой нужно отрезать текст y = textwrap.wrap(en2rus[key], width=LenSrtLine) # Заменяем английский текст на перевод ReplaceLine = FourthLine.replace(SrtLine, y[1]) # Записываем замененный текст out.write(ReplaceLine) # Обрабатываем ошибку except StopIteration: pass # файл кончился
Я понимаю что тут много быдлокода, но я еще учусь. Как лучше написать скрипт для замены английского текста на русский перевод в субтитрах?