Конвертер SRT в SMI
Или вставьте текст субтитров
Что меняет эта конвертация
В этом направлении ничего не теряется — у каждой возможности исходного формата есть куда перейти в целевом.
Этот список выведен из матрицы возможностей этих двух форматов, а не из загруженного файла. Конкретный файл может потерять больше, если использует возможности, которые формат допускает, а матрица не моделирует.
Перевод SRT в SMI меняет не содержание, а способ записи: SRT — самый распространённый формат субтитров, который читают почти все плееры и видеоредакторы, SMI — формат Microsoft на разметке, где каждая реплика начинается тегом SYNC. SRT записывает интервал (00:00:01,000 → 00:00:03,500), а SMI ставит только <SYNC Start=1000>: конец реплики задаёт следующий тег SYNC. Обе шкалы миллисекундные, поэтому значения времени переносятся без округления.
В этом направлении ничего не теряется: позиционирования в SRT нет, караоке в исходнике отсутствует, полный интервал и многострочный текст SMI хранит, а SRT не содержит ничего, чего SMI не умел бы.
Обработка идёт на вашем устройстве, без регистрации и без передачи файлов: пакет из нескольких серий обрабатывается по очереди.
Примеры
Обычный файл SRT, переведённый в SMI
Вход
1
00:00:01,000 --> 00:00:03,500
Hello there.
2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.
3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.
Выход
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello there.
<SYNC Start=3500>
<P>
<SYNC Start=3500>
<P><i>Whispering</i> now.<br>And a second line.
<SYNC Start=6000>
<P>
<SYNC Start=6000>
<P><b>Bold</b> statement.
<SYNC Start=9250>
<P>
</BODY>
</SAMI>
Сравните две стороны: SRT хранит полный интервал, а SMI ставит только <SYNC Start=1000>; конец реплики задаёт следующий блок, текст сохраняется.
Тот же перевод на неаккуратном файле SRT
Вход
1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.
2
00:00:03,500 --> 00:00:06,000
3
00:00:08,000 --> 00:00:09,000
Last one.
Выход
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P><b>Bold</b> and <i>italic</i>.
<SYNC Start=3500>
<P>
<SYNC Start=3500>
<SYNC Start=6000>
<P>
<SYNC Start=8000>
<P>Last one.
<SYNC Start=9000>
<P>
</BODY>
</SAMI>
Второй файл намеренно неровный: BOM, переводы строк CRLF, лишние пустые строки. SRT читает его без падения, а SMI записывается заново, поэтому часть дефектов исчезает, но пропущенные блоки не возвращаются.
Частые вопросы
Сохранится ли точность таймкода SRT в файле SMI?
SRT записывает интервал (00:00:01,000 → 00:00:03,500), а SMI ставит только <SYNC Start=1000>: конец реплики задаёт следующий тег SYNC. Обе шкалы миллисекундные, поэтому значения времени переносятся без округления.
Что именно теряется при конвертации SRT в SMI?
Ничего: позиционирования в SRT нет, караоке в исходнике отсутствует, полный интервал и многострочный текст SMI хранит, а SRT не содержит ничего, чего SMI не умел бы. Текст, интервалы и порядок реплик переносятся один в один, а различие остаётся только в синтаксисе SRT и SMI.
Что будет с тегами курсива и жирного при переводе SRT в SMI?
SRT не имеет официальных стилей, но на практике хранит жирный, курсив и подчёркивание, а сайт дополнительно пишет цвет и позицию. SMI сохраняет жирный и курсив, но цвет и позицию не переносит.
Сохранятся ли переносы строк и порядок реплик при переводе SRT в SMI?
Оба формата хранят жёсткий перенос внутри реплики, поэтому две строки SRT останутся двумя строками в SMI; порядок реплик не меняется.
В какой кодировке сохраняется SMI и какое у него расширение при переводе из SRT?
Файл SMI записывается в UTF-8 без BOM с переводами строк LF и расширением .smi; при чтении SRT сайт сам определяет BOM и стиль переводов строк и нормализует их. Кириллица и другие алфавиты сохраняются без замены символов.
Почему в SMI после каждой реплики появляется очищающий блок при переводе SRT в SMI?
SMI не хранит конец реплики: она длится до следующего тега SYNC. Поэтому при переводе SRT в SMI сайт ставит SYNC Start с миллисекундами и добавляет очищающий блок в момент окончания реплики, иначе текст висел бы до следующей.