Удлинитель субтитров формата SubRip (.srt)

от автора

Если у человека есть практика общения на иностранном языке и понимания на слух, субтитры для него — всего лишь подспорье, значение которого зависит от разборчивости, нормативности, сложности и скорости речи на экране. Но если человек всего лишь сносно читает на иностранном, субтитры для него — основной источник информации.

К сожалению, во втором случае обычного времени показа титров бывает недостаточно. Удлинить его можно во многих программах (например, в SubtitleEdit) — но иногда это удлинение ограничено разумными пределами, да и запускать для такого простого действия полноценный редактор не всегда удобно.

Поэтому я попробовал написать простые скрипты только под эту нужду и выбрал два принципа удлинения времени.

1. Удлинение в одну сторону: конец показа каждого субтитра удлиняется вплоть до начала следующего субтитра (на одну миллисекунду меньше, чтобы не было нахлёста). Это более простой метод, но он не так эффективен, потому что время распределяется однобоко. С другой стороны, этот способ более привычен.

2. Удлинение в обе стороны: сначала высчитывается время паузы между двумя субтитрами, потом эта пауза делиться пополам — одна половина добавляется к концу текущего субтитра, другая отнимается от начала последующего. Таким образом, каждый субтитр по возможности максимально предваряет свою звуковую реплику и по возможности максимально задерживается на экране после неё. К такому формату нужно немного привыкнуть, зато время распределяется более равномерно и зритель имеет относительную возможность заранее прочитать и понять ключевые фразы.

Скрипты реализованы в двух видах: на JavaScript (сетевая версия) и на Perl (локальная консольная версия).

Сетевая версия представлена страничкой с областью вода исходного текста субтитров и областью вывода удлинённой версии. Она не так удобна (нужно открывать субтитры в текстовом редакторе, копировать текст, изменять его при помощи скрипта, вставлять изменённую версию и пересохранять), но зато проста и общедоступна (проверял работу в последних версиях Chrome, Firefox, Opera и Safari). Страницу можно сохранить на диск, и она будет работать локально.

Консольная версия представлена Perl-скриптом, который принимает аргументом исходный файл (если не указать аргумент, скрипт спросит о нём в интерактивном режиме) и создаёт новый файл с удлинённым временем показа, добавляя к названию хвостик .long.

Объяснять код вряд ли имеет смысл, всё очень просто: оба скрипта превращают исходный текст в массив массивов, анализируют паузы, удлиняют время, потом всё опять соединяют в текст субтитров. Некоторое сомнительное любопытство могут лишь представлять две маленькие функции, преобразовывающие таймкоды SubRip в миллисекунды и обратно, для упрощения рассчётов — но и они довольно очевидны.

Скрипты не проверяют текст на соответствие формату и не исправляют исходных ошибок тайминга (нахлёст таймкодов, отрицательное время показа и т.п.), поэтому в случае сомнительных субтитров все проверки лучше производить предварительно, в полноценных редакторах (например, в том же SubtitleEdit).

Код скриптов более чем любительский, за что прошу прощения. Улучшайте по необходимости на свой вкус (например, можно ограничить время удлинений или выдумать более хитрый алгоритм, зависящий от длины каждого субтитра).

Сетевые версии на JavaScript:

Браузерный удлинитель субтитров (.srt): в одну сторону
Браузерный удлинитель субтитров (.srt): в обе стороны

Локальные версии на Perl:

Консольный удлинитель субтитров (.srt): в одну сторону
Консольный удлинитель субтитров (.srt): в обе стороны

Если вдруг сайт ляжет, все четыре разновидности можно скачать одним архивом.

ссылка на оригинал статьи http://habrahabr.ru/post/178615/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *