Сменить цвет субтитров
Или вставьте текст субтитров
Параметры
Выберите цвет, в который окрасится весь файл. Существующие цвета строки заменяются, а не наслаиваются, поэтому один запуск оставляет ровно один цвет на строку; жирный шрифт, курсив, подчёркивание и тайминг караоке не трогаются. Пишется только #rrggbb — единственное написание, которое все девять поддерживаемых форматов несут точно. Не каждый плеер рисует встроенный цвет, и у SRT нет на него стандарта: файл сохранит цвет, но покажет ли его плеер — решать плееру.
Эта страница красит каждую строку субтитров в один цвет: файл читается по содержимому, а не по расширению, и каждый из девяти форматов получает цвет в той записи, которую уже понимает, — <font color="#rrggbb"> в SRT, WebVTT, SBV, SAMI и CSV, блок переопределения в ASS и SSA, <span tts:color="#rrggbb"> в TTML и массив тегов в JSON. Выбранный цвет заменяет прежний, а не ложится поверх: строка, пришедшая частично зелёной, возвращается целиком в новом цвете — один диапазон на всю строку вместо <font> внутри <font>, который один плеер покажет внутренним цветом, а другой проигнорирует.
Жирный, курсив, подчёркивание и караоке-тайминг остаются на местах, а размеченный диапазон по-прежнему покрывает те же символы; пустая строка ничего не получает, потому что красить в ней нечего. Цвет один на весь файл по замыслу: это решение о сдаче, а не редактор, где каждой реплике выбирают свой оттенок; всё выполняется в браузере без отправки на сервер, и страница пишет маркер, а покажет ли его плеер — решает плеер.
Примеры
Два обычных субтитра SRT
Вход
1
00:00:01,000 --> 00:00:02,000
Hello there.
2
00:00:03,000 --> 00:00:04,000
Second line.
Выход
1
00:00:01,000 --> 00:00:02,000
<font color="#ffcc00">Hello there.</font>
2
00:00:03,000 --> 00:00:04,000
<font color="#ffcc00">Second line.</font>
Один <font> на строку, обёрнутый вокруг всей строки, а таймкоды и пустые строки остаются точно такими, какими пришли. Тег — это диапазон по строке, а не свойство субтитра, поэтому реплика из двух жёстко перенесённых строк получает два тега, а не один через разрыв.
Строка, в которой уже есть цвет и курсив
Вход
1
00:00:01,000 --> 00:00:02,000
<i>Hello</i> <font color="#00ff00">there</font>.
Выход
1
00:00:01,000 --> 00:00:02,000
<font color="#ffcc00"><i>Hello</i> there.</font>
Зелёный диапазон удаляется до того, как накладывается новый цвет, поэтому получается один <font> вокруг строки с курсивом внутри, а не <font> внутри <font>, где правила вложенности зависят от плеера и результат тихо различается. То, что было зелёным, теперь того же цвета, что и всё остальное, — честное прочтение панели, которая просит один цвет.
Тот же субтитр в файле ASS
Вход
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize
Style: Default,Arial,20
[Events]
Format: Layer, Start, End, Style, Text
Dialogue: 0,0:00:01.00,0:00:02.00,Default,Hello there
Выход
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize
Style: Default,Arial,20
[Events]
Format: Layer, Start, End, Style, Text
Dialogue: 0,0:00:01.00,0:00:02.00,Default,{\c&H0000CCFF&}Hello there{\c}
В ASS нет <font>: цвет — это код переопределения, который открывается перед текстом и закрывается голым {\c} после него, чтобы остаток строки не окрасился случайно. PrimaryColour в таблице стилей не правится: переопределение на уровне субтитра сильнее и действует только на эту реплику.
Субтитр без текста
Вход
1
00:00:01,000 --> 00:00:02,000
2
00:00:03,000 --> 00:00:04,000
Hi.
Выход
1
00:00:01,000 --> 00:00:02,000
2
00:00:03,000 --> 00:00:04,000
<font color="#ffcc00">Hi.</font>
Пустой субтитр остаётся пустым, а не получает <font> вокруг ничего. Пустая реплика — уже структурная проблема, и её покажут страницы проверки; тег разметки без текста внутри её не исправит, а лишь спрячет от поиска. Субтитр, в котором есть текст, красится обычным образом.
Частые вопросы
В какие форматы страница изменения цвета пишет маркер и как он выглядит в каждом?
В девять: SRT, WebVTT, ASS, SSA, SBV, SAMI, TTML, JSON и CSV. SRT, WebVTT, SBV, SAMI и CSV получают <font color="#rrggbb">, ASS и SSA — переопределение {\c&HBBGGRR&}, закрываемое {\c}, TTML — <span tts:color="#rrggbb">, JSON записывает цвет как диапазон тега по строке. Форматы, в которые встроенный цвет записать некуда, страница не принимает вовсе: у LRC и MicroDVD нет синтаксиса цвета, и запуск там сообщил бы об изменении, не записав ничего.
Почему в выводе ASS стоит &H0000CCFF&, если я выбрал #ffcc00?
Потому что цвет ASS записывается в обратном порядке байтов: &HAABBGGRR, где сначала идёт альфа, затем синий, зелёный и красный. #ffcc00 — это красный 255, зелёный 204, синий 0, то есть альфа 00, синий 00, зелёный CC, красный FF — &H0000CCFF&. Значение остаётся выбранным вами цветом, и плеер покажет тот же жёлтый; цифры выглядят переставленными только потому, что формат хранит их задом наперёд.
Покажет ли новый цвет субтитров каждый видеоплеер?
Нет, и это честная граница страницы. <font color> не входит в спецификацию SRT: это разметка, которую большинство плееров терпит, а некоторые игнорируют; переопределения ASS понимают плееры на libass, такие как VLC и mpv, но не каждая аппаратная приставка. Страница корректно записывает маркер, и результат проверяется по самому файлу; показывать ли его — решение конкретного плеера. Если цвет обязан быть на экране, его нужно вжигать в изображение, а это другая задача.
Что происходит с уже существующими цветами в файле при смене цвета?
Они заменяются, а не наслаиваются. Сначала с каждой строки снимаются все цветовые диапазоны, затем добавляется один на всю строку, поэтому в результате один <font>, а не <font> внутри <font>. Вложенные цветовые теги — как раз случай, где плееры расходятся сильнее всего, поэтому у файла после этой страницы есть один однозначный ответ.
Страница меняет цвет отдельных слов или всего файла?
Весь файл, одним цветом, каждую строку. Отдельного охвата по субтитрам или словам здесь нет и намеренно: на панели одно значение, а запуск, зависящий от того, какие субтитры вы отметили, не воспроизводился бы по файлу. Строка, где нужно выделить одно слово, — это текстовая правка, и целевая часть делается страницами поиска с заменой.
Сохраняются ли жирный, курсив, подчёркивание и караоке при наложении цвета?
Сохраняются, и их диапазоны остаются привязанными к тем же символам. Удаляются и добавляются заново только цветовые диапазоны; остальные четыре вида не тронуты, поэтому курсивное слово внутри строки остаётся курсивом внутри нового цвета. В ASS это значит, что {\i1} и закрывающий {\i0} стоят на прежних местах вокруг текста, а цветовое переопределение открывается до них и закрывается после.