Формат субтитров JSON
Что умеет этот формат
- Оформление текста
- Шрифты, цвет, обводка, тень
- Положение на экране
- Да
- Тайминг караоке
- Да
- Переносы строк внутри реплики
- Да
- Таймлайн
- Начало и конец для каждой реплики
- Точность тайминга
- 1 мс
- Тайминг хранится в номерах кадров
- Нет
- Текст справа налево
- Да
Примеры
Типичный файл JSON и то, что сайт из него читает
Файл
{
"version": 1,
"title": "Fixture: typical",
"fps": 25,
"styles": {
"Default": {
"name": "Default",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#FFFFFF",
"bold": false,
"italic": false
}
},
"generator": "subtitlematrix fixtures",
"cues": [
{
"id": "1",
"start": 0,
"end": 2000,
"lines": [
"Hello world.",
"Second line."
],
"style": "Default",
"position": {
"x": 100,
"y": 200,
"align": "center"
}
},
{
"id": "2",
"start": 2500,
"end": 4000,
"lines": [
"Plain line.",
{
"text": "Styled line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
]
},
{
"id": "3",
"start": 4500,
"end": 6000,
"lines": [
"Roger: I am here."
],
"speaker": "Roger"
}
]
}
Что в нём
3 cues, 5 lines of text
0 ms → 2000 ms
Hello world.
Second line.
[Default; position 100,200 (center)]
2500 ms → 4000 ms
Plain line.
Styled line. [italic ×1]
4500 ms → 6000 ms
Roger: I am here.
[speaker Roger]
Outside the cues:
styles Default
other keys version, title, fps, generator — carried through untouchedПравая колонка — не результат конвертации, а то, что сайт извлекает из левого файла: реплики, интервалы, оформление и всё, что осталось за пределами реплик.
Неаккуратный файл JSON: что всё равно читается
Файл
{
"cues": [
{ "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
{ "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
{ "start": 9000, "end": 8000, "lines": ["End before start."] },
{ "start": "nope", "end": 12000, "lines": ["No readable start."] },
{ "start": 13000, "lines": ["No end at all."] }
],
"generator": "subtitlematrix boundary",
"styles": {},
"title": "Fixture: boundary"
}
Что в нём
3 cues, 4 lines of text
1500 ms → 3000 ms
Unpadded timecode.
4001 ms → 5000 ms
Fractional start.
Second.
9000 ms → 9001 ms
End before start.
Outside the cues:
other keys generator, title — carried through untouched
Reported while reading — repaired or skipped, never silently:
2 × entries with no readable start and end time (they are not cues, so they were skipped)
1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
1 × cues whose end time was not after their start time (they were given a 1ms duration)Второй файл намеренно неаккуратный: BOM, смешанные переводы строк и пустые поля. Сайт всё равно дочитывает его до конца, а пропущенные фрагменты перечисляет в отчёте.
Конвертировать SubtitleMatrix JSON в другой формат
Каждая страница работает целиком в вашем браузере. Подписи говорят, чего стоит это направление, ещё до того, как вы его откроете.
- Оформление
- Позиционирование
- Караоке
- Тайминг
- Оформление
- Позиционирование
- Караоке
- Точность
- Оформление
- Позиционирование
- Караоке
- Частота кадров
- Оформление
- Позиционирование
- Караоке
- Оформление
- Караоке
- Оформление
- Позиционирование
- Караоке
- Тайминг
- Оформление
- Позиционирование
- Караоке
- Переносы строк
- Оформление
- Позиционирование
- Караоке
Конвертация в этот формат
- SubRip (SRT) → SubtitleMatrix JSON
- WebVTT (VTT) → SubtitleMatrix JSON
- Advanced SubStation Alpha (ASS) → SubtitleMatrix JSON
- SubStation Alpha (SSA) → SubtitleMatrix JSON
- YouTube SBV → SubtitleMatrix JSON
- SAMI (SMI) → SubtitleMatrix JSON
- LRC Lyrics → SubtitleMatrix JSON
- MicroDVD → SubtitleMatrix JSON
- TTML (Timed Text) → SubtitleMatrix JSON
- Plain Text (TXT) → SubtitleMatrix JSON
- CSV Spreadsheet → SubtitleMatrix JSON
JSON — внутренний формат сайта, который хранит полную модель субтитров. Внутри файла — объект с версией и массивом cues, где у каждой реплики есть id, start, end и lines; время записывается как "start": 1000, то есть целые миллисекунды в полях start и end.
JSON хранит полную внутреннюю модель: время в миллисекундах, строки, теги, стили, позицию и караоке — больше, чем любой другой формат сайта. Ни один байт субтитров не уходит в сеть, а очередь можно остановить в любой момент.
Частые вопросы
Что хранит JSON помимо текста реплик?
Структура JSON: объект с версией и массивом cues, где у каждой реплики есть id, start, end и lines. Дополнительно: вне реплик — только объект styles и meta. Оформление — все возможности внутренней модели: стили, позиция, караоке и теги в строке.
Как JSON записывает начало и конец реплики?
JSON пишет время как "start": 1000 (целые миллисекунды в полях start и end). Полный интервал выглядит так: "start": 1000, "end": 3500.
Насколько богатое оформление поддерживает JSON?
Оформление JSON — все возможности внутренней модели: стили, позиция, караоке и теги в строке. Сильнее всего это заметно при сравнении с ASS: там есть шрифт, цвет, обводка, тень и караоке, а JSON такие поля либо не хранит, либо записывает упрощённо.
Что теряется при переводе JSON в более простой формат?
При переводе JSON в более простые форматы теряется ровно то, чего целевой формат не умеет: оформление, позиция, караоке или концы реплик.
Можно ли перевести JSON в другие форматы в браузере?
Да: на сайте открыто 11 направлений перевода из JSON — в SRT, VTT, ASS, SSA, SBV, SMI, LRC, MicroDVD, TTML, TXT, CSV. Файл разбирается и записывается в текущей вкладке, не отправляется на сервер, а пакет можно скачать одним архивом.
Как JSON читает повреждённый файл?
JSON требует корректного синтаксиса: битый файл не читается частично, зато нечитаемые поля пропускаются с записью в отчёт, а не подменяются догадками.