Synchronized Accessible Media Interchange
Субтитры Microsoft для Windows Media Player с 1998 года: HTML с меткой синхронизации перед каждым субтитром и таблицей стилей, где классы — это языки, так что один файл может содержать несколько языков. Редко встречается в других местах, но в Корее по-прежнему остаётся обычным файлом субтитров.
Коротко
| Расширение | .smi |
|---|---|
| Тип медиа | Не зарегистрирован |
| Спецификация | Microsoft, Understanding SAMI 1.0 (2001, обновлена в 2003). Открытая, без лицензионных отчислений. |
| Точность времени | Миллисекунды |
| Кодировка текста | Не указывается. Старые корейские файлы в основном в CP949, новые — в UTF-8; Subtitld определяет любую из них. |
| Оформление | Встроенные теги HTML и CSS: курсив, полужирный, подчёркивание, зачёркивание, цвет, шрифты |
| Положение | На картинке не задаётся: субтитры показываются в собственной области |
| Говорящие | Строка Source (ID=Source), показываемая над субтитром |
| Языки | Несколько в одном файле, по одному CSS-классу на каждый |
| В контейнерах | Нет. Отдельный файл рядом с видео, с тем же именем. |
Строение файла
HTML-документ: таблица стилей, где названы языки, а затем метка синхронизации для каждого момента, когда меняются субтитры.
<SAMI><HEAD><STYLE><!-- .KRCC {lang:ko-KR;} .ENCC {lang:en-US;} --></STYLE></HEAD><BODY> <SYNC Start=23000> <P Class=KRCC>넌 정말 못됐어. <P Class=ENCC>You're a jerk. <SYNC Start=24500> <P Class=KRCC> <P Class=ENCC>
- 1 · Заголовок
Таблица стилей: класс для каждого языка с его
langиName, который показывают плееры. Первый класс — язык, с которого начинают плееры. - 2 · Синхронизация
Момент в миллисекундах от начала видео.
- 3 · Субтитры
Абзац для каждого языка. Он остаётся на экране до следующей синхронизации, в которой есть абзац того же класса;
его очищает.
Тайминг
У синхронизации есть только начало. Субтитр заканчивается, когда начинается следующий субтитр на том же языке или пустой, поэтому каждая пауза требует собственной синхронизации.
Закрывающие теги необязательны. В собственном примере Microsoft не закрыты ни <P>, ни <SYNC>, и плееры читают его в любом случае. Windows Media Player может требовать теги заглавными буквами, как в примере.
Стили
Текст SAMI — это HTML, таблица стилей — CSS. Субтитр берёт стиль P, затем стиль своего класса, затем собственный атрибут style, затем теги внутри него.
| Запись | Эффект | В Subtitld |
|---|---|---|
<I>, <EM> |
Курсив | Сохраняется |
<B>, <STRONG> |
Полужирный | Сохраняется |
<U>, <S>, <STRIKE> |
Подчёркивание, зачёркивание | Сохраняется |
<FONT color="#FFD700"> |
Цвет текста | Сохраняется |
color, font-style, font-weight, text-decoration |
То же, из таблицы стилей или style |
Сохраняется |
<BR> |
Перенос строки | Сохраняется |
<FONT face>, font-size, margin |
Шрифт, размер, интервал | Не сохраняется |
<RUBY>…<RT> |
Чтение над текстом | Текст сохраняется, чтение — нет |
Языки
Каждый класс — это язык. Плееры предлагают их по Name, показывают первый определённый, пока не сказано иное, и показывают абзац без класса на любом языке. Корейский файл может содержать английский рядом с корейским, а выбирает зритель.
Когда Subtitld открывает файл с несколькими языками, первый язык становится языком субтитров, а каждый другой — переводом, у того субтитра, с которым он больше всего совпадает по времени. При экспорте оригинала и перевода они записываются обратно как два языка, а субтитры перевода — только там, где они есть.
Говорящие
<SYNC Start=23000>
<P Class=ENCC ID=Source>Celia
<P Class=ENCC>You're a jerk.
Абзац с ID=Source — не субтитр. Он называет говорящего строкой над субтитром и остаётся, пока его не заменит другой. Subtitld читает его как говорящего каждого субтитра, над которым он стоит, и записывает говорящих так, когда это запрошено.
Плееры здесь различаются. FFmpeg и построенные на нём плееры показывают строку Source курсивом над субтитром. MPlayer вписывает её в первую строку субтитра. Имена перед текстом (Celia: …) читаются одинаково везде.
SAMI в Subtitld
- Текст каждого субтитра и переносы строк
- Курсив, полужирный, подчёркивание, зачёркивание и цвет
- Переводы как отдельные языки
- Говорящие, как строки Source
- Начало и конец с точностью до миллисекунды, по порядку
- Где стоит субтитр: в SAMI нет места на картинке
- Шрифты, размеры и поля
- Чтения руби
- Озвучка, лица и цвета говорящих
Сохраните проект .usfx, чтобы сохранить то, что относится к Subtitld.
Открытие файла SAMI
Subtitld открывает .smi и .sami, и:
- читает SAMI так, как браузеры читают HTML: теги заглавными или строчными, закрытыми или нет, атрибуты в кавычках или без, синхронизации не по порядку, текст вне абзаца;
- берёт каждый язык: первый — как язык субтитров, остальные — как переводы;
- сохраняет курсив, полужирный, подчёркивание, зачёркивание и цвет из тегов и таблицы стилей;
- принимает строки Source за говорящих, готовых к озвучке;
- заканчивает последний субтитр там, где по
Metricsфайла заканчивается видео, или через четыре секунды; - декодирует любую кодировку, в том числе CP949.
Экспорт SAMI
Экспорт, затем Субтитры и SAMI, предлагает:
- ТекстОригинал, перевод или оба варианта как два языка.
- Имена говорящихНе выводятся, ставятся перед текстом (Thom: …) или записываются как строки Source, собственным способом SAMI.
- ОформлениеСохраняется или удаляется.
- Сдвиг времениВсе субтитры смещаются раньше или позже на одну и ту же величину.
- КодировкаUTF-8 с меткой порядка байтов или без неё, UTF-16, Windows-1252 или CP949 для старых корейских плееров.
- Окончания строкLinux и macOS или Windows.
Файл — SAMI 1.0 в том виде, как его пишет пример Microsoft: теги заглавными, класс для каждого языка, синхронизация там, где начинается субтитр, и пустая там, где он заканчивается, а оформление — как <I>, <B>, <U>, <S> и <FONT color>.
Назовите файл, как видео: tears-of-steel.smi рядом с tears-of-steel.mp4. Windows Media Player находит .smi именно так (.sami — нет), и большинство плееров тоже.
Интересные факты
Microsoft выпустила SAMI летом 1998 года в рамках работы над доступностью: субтитры на ПК для глухих и слабослышащих.
Спецификация Microsoft очищает субтитр неразрывным пробелом. FFmpeg отбрасывает любую синхронизацию, которая его содержит, поэтому там, где продолжается другой язык, Subtitld записывает пустой абзац.
Многие корейские файлы называют класс по стране, а не по языку: KRCC, тогда как в примерах Microsoft стоит ENUSCC.
Похожие форматы
Откройте его в Subtitld вместе с видео и поправьте тайминг по осциллограмме.