Проблема в том, что если закинуть в Google Translate содержимое SRT файла, то после перевода Гугол изломает таймстампы, из-за чего субтитры перестанут восприниматься плеерами и другими приложениями.

Я запилил небольшой скрипт, который починяет таймстампы обратно в нормальный вид.

А ломает Гугол следующее:

  1. После двоеточий добавляет пробел;
  2. Запятую, разделитель миллисекунд, заменяет на точку;
  3. Разделитель начала и конца титра сокращает на один дефис.

Вот так выглядит нормальный:

00:57:15,600 --> 00:57:21,840

А вот так выглядит изломанный Гуголом:

00: 57: 15,600 -> 00: 57: 21.840

Для исправления этого я использовал поиск по регулярному выражению с заменой найденных поломанных таймстампов на нормальные. Некоторая сложность была в том, чтобы не просто выцепить из текста таймстампы, а исправить их. Так я открыл для себя, что функция JavaScript replace() вторым аргументом может принимать другую функцию, которая может выполнять действия с найденными фрагментами.

Так и сделаем:

function fixSubsAfterGoogle ()
{
	// вот тут идёт починка всех трёх пунктов, которые Гугол ломает после перевода
	function fixTime(match) {
	    return match.replace(/: /g, ":").replace("->", "--\>").replace(/\./g, ",");
	}
	// предположим, в resultsOfGoogleTranslations лежит результат перевода
	var fixedSRT = resultsOfGoogleTranslations.replace(
	    // или можно задать выражение сразу так: /\d{2}: \d{2}: \d{2}.\d{3} -> \d{2}: \d{2}: \d{2}.\d{3}/g
	    new RegExp(
	        "\d{2}: \d{2}: \d{2}.\d{3} -> \d{2}: \d{2}: \d{2}.\d{3}",
	        "g"
	        ),
	    fixTime // вот этот второй аргумент, здесь вызывает функция, которая повыше
	    );
}

В виде функции это ни сильно интересно и пригодно к использованию, потому я запилил страницу, на которой всё это можно проделать более-менее удобно и красиво.

Страница исправления таймстампов в SRT 🌐