JSON-субтитры и транскрипты

ОткрытьСохранитьТранскриптыРаспознавание речи

Не один формат, а много: JSON — способ, которым движки распознавания речи, видеосайты и сайты субтитров передают субтитры и транскрипты, каждый в своем виде. Subtitld сохраняет свой JSON в виде, который пишет Whisper, со всем, что есть у субтитра, и открывает то, что пишут десятки других инструментов.

Коротко

Расширение.json
Тип медиаapplication/json
СпецификацияСам JSON: RFC 8259 и ECMA-404. У каждого инструмента свой вид.
Точность времениSubtitld: секунды, до миллисекунды. Другие: миллисекунды, секунды, тики по 100 наносекунд или текст вида "1.400s".
Кодировка текстаUTF-8
ОформлениеSubtitld: теги, которые сохраняет текст. YouTube: полужирный, курсив, подчеркивание и цвета. Остальные: нет.
РасположениеSubtitld: в тексте, как {\an8}. YouTube: окна. Bilibili: положение.
Говорящиеspeaker в Subtitld; сервисы распознавания речи помечают своих
В контейнерахНет

Анатомия JSON в Subtitld

Что Subtitld сохраняет для одного субтитра:

{
  "language": "en-us",
  "segments": [
    {
      "id": 0,
      "start": 23.0,
      "end": 24.5,
      "text": "You're a jerk, Thom.",
      "speaker": "Celia"
    }
  ],
  "text": "You're a jerk, Thom."
}
Часть Что это
"language" Язык проекта, как его называет Subtitld (en-us)
"segments" Субтитры, по порядку
"id" Его номер, с 0, как их нумерует Whisper
"start", "end" Секунды
"text" Его текст с тегами (<i>, {\an8}) и переносами строк (\n)
"speaker", "translations" … Все остальное, что есть у субтитра: говорящий, его переводы по языкам, его озвучка
"text" в конце Весь текст в одну строку, для инструментов, которым нужен только он. Не читается обратно.

Вид Whisper, намеренно. Это тот вид, который пишет Whisper от OpenAI, поэтому инструменты, читающие сегменты Whisper, читают файлы Subtitld, а Subtitld открывает файлы Whisper, не учитывая статистику его декодирования и времена отдельных слов.

Что открывает Subtitld

Каждый JSON инструмента сообщает, какой он, по своим ключам. Subtitld открывает такие:

Инструмент Что Subtitld берет из него
Subtitld, OpenAI Whisper Все поля (Subtitld); текст и язык (Whisper)
whisper.cpp Его сегменты и говорящих, когда он различает два канала
WhisperX Его сегменты и говорящих
YouTube (.json3, как его сохраняет yt-dlp) Текст, полужирный, курсив, подчеркивание, цвета и место
Bilibili (.bcc) Текст и место
AssemblyAI, Deepgram, AWS Transcribe, Rev.ai, Google Speech-to-Text, Azure Speech, Speechmatics Слова, говорящих и язык, превращенные в субтитры
Amara Текст, курсив, полужирный, подчеркивание, а также субтитры вверху

JSON-файл, который не относится ни к одному из них, так и сообщает. Тот, что не является допустимым JSON, указывает, где он ломается, по строке и столбцу.

Транскрипты в субтитры

Сервисы распознавания речи передают слова с их временами или длинные реплики. Subtitld делает из них субтитры, в пределах, которые позволяет панель Проверка качества: символы в строке, строки и секунды. Субтитр заканчивается:

  • там, где меняется говорящий или речь делает паузу больше секунды;
  • в конце предложения, когда следующее перенесло бы его за одну строку;
  • когда он заполнен: на последнем знаке препинания, который оставляет его достаточно заполненным, иначе между двумя словами.

Реплика без времени слов делится так же: ее время распределяется по длине частей.

Сначала задайте пределы. Субтитры создаются при открытии файла: измените пределы в Проверка качества до открытия транскрипта, чтобы получить более длинные или короткие субтитры.

Говорящие и языки

Сервисы нумеруют говорящих: 0, spk_1, SPEAKER_02, S3. Subtitld называет их A, B, C … в порядке, в котором они впервые заговорили, как сама называет говорящих; говорящий, которому файл дает имя, как может Rev.ai, сохраняет его.

Язык проекта берется из файла как код (en_us, pt) или название (English, как Whisper его хранит, если его об этом попросить), либо из имени файла: video.en.json3. Файл на языке проекта сохраняет страну проекта: pt в проекте pt-br остается pt-br.

JSON3 YouTube

То, что читает плеер YouTube и что yt-dlp сохраняет как .json3: события текста в миллисекундах, с перьями для полужирного, курсива, подчеркивания и цветов и окнами для места. Автоматические субтитры прокручиваются: строка за строкой, каждая показана до появления следующей. Subtitld делает каждую строку субтитром до начала следующей.

BCC Bilibili

То, что читает плеер Bilibili, и единственный другой JSON, который сохраняет Subtitld.

{
  "font_size": 0.4,
  "font_color": "#FFFFFF",
  "background_alpha": 0.5,
  "background_color": "#9C27B0",
  "Stroke": "none",
  "body": [
    {
      "from": 23.0,
      "to": 24.5,
      "location": 2,
      "content": "You're a jerk, Thom."
    }
  ]
}

Времена в секундах; content — простой текст, строки которого разделены \n. Вид сверху — тот, что несут собственные файлы Bilibili и что также пишет Subtitle Edit.

По одному субтитру за раз. Субтитры, показанные в один момент, становятся одной записью, их тексты — по строке на каждый, поэтому на таймлайне нет наложений. location всегда равен 2, нижнему центру: плеер Bilibili, насколько известно, не использует его, чтобы ставить субтитры в другом месте.

JSON в Subtitld

Сохраняется в JSON Subtitld
  • Текст, оформление и место каждого субтитра
  • Говорящие, переводы и озвучка
  • Начало и конец, до миллисекунды
  • Язык проекта
Некуда деть
  • Времена слов и то, насколько уверен был сервис в каждом
  • Статистика декодирования Whisper
  • Шрифты, размеры, обводки и фоны YouTube
  • В BCC: оформление, место и переводы рядом с оригиналом

Сохраните проект .usfx, чтобы сохранить то, что принадлежит Subtitld.

Экспорт

Диалог экспорта Subtitld с выбранным BCC, исходный текст и имена говорящих перед ним

Экспорт, затем Субтитры, предлагает оба варианта:

  • JSONJSON Subtitld: проект как есть, каждый субтитр и каждое поле.
  • BCCBilibili: оригинал, перевод или оба, перевод ниже; имена говорящих опущены или перед текстом; времена сдвинуты, если вы выберете.

Любопытное

UTF-8

Стандарт JSON, RFC 8259 от 2017 года, требует, чтобы JSON, передаваемый между системами, был в UTF-8.

10,000,000

Тиков в секунду в транскриптах Azure: там время считается сотнями наносекунд.

5

Секунд, в течение которых плеер YouTube показывает json3-субтитр, не сообщающий, как долго он длится.

Похожие форматы

Нужно исправить файл .json?

Откройте его в Subtitld вместе с видео и поправьте тайминг по осциллограмме.

Скачать Subtitld