Русский

Видео и субтитры · Инструментарий субтитров

Что означает «очистка» файла субтитров: теги, коды и случайное форматирование

· Как это работает

субтитры обработка текста форматы файлов

Строка субтитров, содержащая тег угловой скобки и код фигурной скобки над той же строкой, сокращена до простых слов.
Оригинальная векторная иллюстрация ToolAcre

Файлы субтитров содержат мусор: теги типа HTML, коды стилей из других форматов, случайные спецификации и смешанные окончания строк. В этом посте объясняется, что представляет собой каждый вид беспорядка, откуда он берется и как его можно убрать, не затрагивая слов.

В титрах на экране отображаются «{\an8}» и «<i>» — видимые признаки нечистого файла субтитров.

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

Именно поэтому уборка – это настоящая операция, а не косметический уборка. Беспорядок – это не уродливое украшение. Это инструкции, написанные для одного формата, которые другой игрок читает как диалог, и исправление состоит в том, чтобы удалить инструкции, оставив каждое слово нетронутым.

Откуда возникает беспорядок — экспорт из форматов с большим количеством стилей, вывод OCR и редакторы, добавляющие собственную разметку.

Большая часть беспорядка возникает в результате конверсии. Файл, созданный в формате с большим количеством стилей, таком как ASS или SSA, содержит встроенные директивы позиционирования и внешнего вида, а преобразователь, который точно отображает тайминги, часто передает эти директивы в виде текста. Редакторы субтитров добавляют свою собственную разметку для идентификации и выделения говорящего, а оптическое распознавание символов встроенных субтитров вводит случайные знаки препинания и двойные пробелы, которые не вводил ни один автор.

Ни один из этих источников не является искаженным в их собственном мире. Блок переопределения ASS имеет смысл в ASS. Проблема в том, что SRT не имеет эквивалента, поэтому преобразование без потерь создает файл, в котором инструкция сохраняется как символы, а не как поведение.

Теги форматирования — курсив, жирный шрифт и теги шрифта, какие игроки их соблюдают, а какие показывают буквально.

Теги угловых скобок обрабатываются в первую очередь с помощью регулярного выражения, которое удаляет все, что находится между меньшим и следующим большим. Сюда входят теги, выделенные курсивом и полужирным шрифтом, теги классов WebVTT, такие как аннотации классов сигналов, и голосовые теги, обозначающие имя говорящего. Важным свойством является то, что это подстановка текста, а не синтаксический анализатор HTML, и он не пытается сопоставить открывающиеся теги с закрывающимися.

Эта простота имеет свою цену, которую стоит знать. В строке диалога, которая действительно содержит «меньше» и «больше», например, в устном неравенстве, текст между ними будет удален вместе с скобками. Это редко встречается в диалогах и часто встречается в технических заголовках, поэтому стоит просмотреть результаты очистки материала, в котором обсуждается код или математика.

Коды позиционирования и стиля — что означают такие коды, как {\an8} в ASS/SSA и почему они являются шумом в SRT

Коды фигурных скобок удаляются второй заменой, охватывающей все, что находится между открывающей и закрывающей скобкой. В форматах SubStation это блоки переопределения, и чаще всего встречается тот, который перемещает строку в верхнюю часть кадра, чтобы она не конфликтовала со встроенным текстом. Другие устанавливают шрифт, цвет, поворот или время караоке.

В файле SRT ни один из них ничего не означает, поэтому они удалены, а не переведены. Директива позиции не имеет эквивалента SRT для перевода: формат просто не поддерживает размещение. При удалении кода теряется намерение автора, согласно которому строка должна располагаться в верхней части кадра, и эта потеря реальна, но предпочтительнее распечатать код для зрителя.

Невидимый беспорядок — метки порядка байтов, смешанные окончания строк CRLF и LF и конечные пробелы.

Невидимый беспорядок обрабатывается раньше, во время синтаксического анализа, и его стоит отделить, поскольку он вообще не является частью текста. Метка порядка байтов в начале файла удаляется раньше всего, потому что в противном случае она присоединяется к первому индексному номеру и стоит первый сигнал. Возвраты каретки нормализуются, как пара Windows, так и одиночный возврат каретки, поэтому файл, редактируемый на двух платформах, правильно разбивается на блоки.

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

Рабочий пример: очистка экспорта 200-cue — что меняется, что остается и как проверить результат

Очистка большого экспорта меняет меньше, чем кажется. Возьмем файл с двумя сотнями реплик, в котором преобразователь добавил к шестидесяти репликам префикс кода начала кадра и обернул теги выделения вокруг еще сорока. Две замены удаляют код и теги, проход пробелов схлопывает удвоенные пробелы, оставленные удалением, и двести реплик превращаются в двести реплик с теми же словами и одинаковыми таймингами.

Два дальнейших шага имеют значение. Сигнал, все содержимое которого представляло собой случайный код, становится пустым, как только код исчезает, и пустые сигналы удаляются за отдельный проход, а не создаются как пустые блоки, поскольку сигнал с отметкой времени и без текста представляет собой пробел, который некоторые игроки отображают как вспышку. Обратная запись файла меняет нумерацию реплик с одной и сохраняет их непрерывность, поэтому удаления не оставляют дыр в последовательности. Проверьте результат, сравнив количество реплик и выборочно проверив любую строку, которая изначально содержала объект.

Что сюда не входит — переписывание самого текста, орфографии или перевода; слова твои

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

Он также не восстанавливает структуру. Файл, в блоках которого отсутствуют временные метки, имеет проблему синтаксического анализа, а не форматирования, и удаление из него тегов не приведет к появлению сигналов. Ошибки кодирования также выходят за рамки. Файл, декодированный с неправильным набором символов, дает совершенно правильно сформированные сигналы с неправильным текстом, и никакое удаление тегов не обнаруживает этого, потому что в структуре ничего не нарушено.

Вывод: удаляйте разметку, сохраняйте смысл — как шаг очистки Subtitle Toolkit справляется с обычным беспорядком и документирует то, что оставляет в покое.

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

Запустите экспорт с большим количеством тегов через конвертер Subtitle Toolkit и сравните его с оригиналом, а не доверяйте результату с первого взгляда. Убедитесь, что количество реплик не изменилось, за исключением тех случаев, когда реплики были действительно пустыми, проверьте, что любая строка, содержащая объект, все еще содержит его, и просканируйте строки, в которых обсуждается код или математика, на предмет текста, потерянного из-за случайной угловой скобки.