Рип субтитров из видеофайлов с помощью SubRip (новое)


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

Откройте видеофайл, нажав кнопку, обведенную на рисунке красным, либо выберите пункт «Open Hard Subbed Video files» из меню «File»:



SubRip откроет любой файл, который поддерживает AviSynth, хотя частоту кадров определяет только для .avi. Если открывается другой тип файла, SubRip попросит вас указать ее:



Имейте в виду, что помимо AviSynth, в системе также должны быть установлены соответствующие кодеки и фильтры. Например, для работы с DVD нужен DGMPGDec. SubRip создает в своем каталоге временный файл «temp.avs». Существует золотое правило: если файл не воспроизводится в медиаплеере, то и SubRip также не сможет его открыть. Кроме того, некоторые кодеки и фильтры не предоставляют возможности перехода к произвольному кадру. Обычно SubRip воспроизводит кадры последовательно, однако иногда после изменения параметров распознавания возникает необходимость позиционирования на первый кадр субтитра. Кажется, AviSynth реализует буферизацию только между предыдущим и следующим ключевыми кадрами. Если вы заметили, что на некотором файле позиционирование производится неточно, лучше всего будет сконвертировать его в .avi.

Открывается окно «Video file viewer». При помощи ползунка или текстового поля, которые на рисунке обведены красным, перейдите к кадру, на котором видны субтитры. Или же нажмите кнопку «Play» и, дождавшись, пока появится первый субтитр (желательно из 2-3 строк), нажмите «Pause».



Нажав правую кнопку мыши, очертите прямоугольник вокруг области, в которой содержатся субтитры. Ее размер должен быть достаточно большим, чтобы все отображаемые в файле субтитры в нее вошли, так что можно даже сделать небольшой запас. Затем окно можно уменьшить, чтобы в нем отображалась только эта область (как показано на следующем рисунке). Учтите, что некоторые субтитры включают несколько строк. Если в процессе обработки выяснилось, что они выходят за пределы очерченной области, нужно остановить обработку и определить ее заново (правой кнопкой).



Выделенная на рисунке выше красным область определяет цвета контура и текста. Три цветных прямоугольника в каждой группе соответствуют темному, распознанному и светлому цветам. Передвиньте указатель мыши в один из прямоугольников (указатель превращается в перекрестие). Щелкните левой кнопкой мыши ВНУТРИ символа субтитра (это белая область), чтобы SubRip мог определить цвет и ширину субтитра. Взгляните в область, обведенную на предыдущем рисунке красным: опрнделившиеся цвета должны соответствовать тем, которые присутствуют в окне видео. Если это не так, повторите операцию, щелкнув другой символ. Лучше всего для этого подходят вертикальные линии (например, в буквах «L», «l», «d», «h» и т.п.). В поле «Width» обычно содержится значение от 1 до 5 пикселов. Значение больше пяти обычно свидетельствует о том, что определение прошло неуспешно. Эти значения используются для проверки, а также ограничивают глубину просмотра соседних пикселов на схожие цвета. Эти цвета можно также установить вручную, щелкнув внутри среднего (большего) прямоугольника в области, обведенной на предыдущем рисунке красным.

Если после нескольких попыток определение не получается, нажмите кнопку, обведенную красным на следующем рисунке. При этом открывается панель «Advanced Color Options». Попробуйте уменьшить значения в полях «Text Color Tolerance» (цвет контура может оказаться слишком похожим на цвет текста). Толерантность можно изменять индивидуально для каждого из каналов, либо синхронно (если стоит отметка в правом столбце). Например, если субтитры белые, а контуры синие, можно увеличить цветовую толерантность для синего канала, что позволит скомпенсировать вызванное сжатием размытие. Поле «Outline Color» позволяет ограничить неверные предположения: за текст будут приниматься только те пикселы цвета «Text Color», которые достаточно схожи с пикселами цвета «Outline Color». Размер окна анализа определяет значение в поле «Outline Width». Если субтитры не имеют контура, просто сбросьте флажок «Use outline color» и вручную установите значение «Text Width», проверив, что цвет текста в цветном прямоугольнике выглядят корректно.



В главном окне размер отображается прямоугольник размера, соответствующего выделенной области, в которой содержатся белые субтитры с красным контуром, как показано на следующем рисунке. Если субтитры не имеют контура, добавляется фиктивный красный контур, который определяется на основании близости к белым областям. Если субтитры правильно не отобразились (слишком тонкий или нечеткий шрифт), попробуйте покрутить значения в полях «Text Width» и «Outline Width» или увеличить значение «Text Color Tolerance». В идеале в главном окне даже на ярком фоне должен отображаться только текст белым цветом. Если белым также отображаются большие яркие области, попробуйте установить флажки «Fill open» и «Fill large». Открытые («open») области — это те, которые соприкасаются с ограничивающим прямоугольником, показаны на рисунке зеленым цветом. Крупные («large») области — это те, которые выше или шире размера символа (десятикратного значения поля «Text Width»), показаны на рисунке серым цветом. Обратите внимание, что крупные области в левой части все равно показаны белым, поскольку недостаточно велики. Чтобы избавиться от этого эффекта, можно уменьшить значение в поле «Text Width».



Если во всем видеоролике субтитры всегда появляются на одном и том же месте, нажмите кнопку, обведенную красным на рисунке ниже, открыв панель «Inter-line Options». Включите флажок «Draw lines on top». Пока оставьте флажок «Fill sides» сброшенным.



В поле «Line Count» укажите, сколько строк текста содержится в субтитре. Затем настройте поле «Top line offset» таким образом, чтобы верхняя синяя строка почти соприкасалась с верхним краем верхней строки. Если включен флажок «Fill open areas», области, которые соприкасаются с синими линиями, также считаются открытыми, и поэтому будут закрашены зеленым, поэтому нужно установить значение поля «Top line offset» так, чтобы все символы отображались белым. Это позволит избежать фиктивных предположений, когда под субтитрами находится белый фон. Далее, настройте высоту строки в поле «Height», чтобы вторая синяя линия почти соприкасалась с нижним краем первой строки текста. Наконец, установите значение поля «Space» таким образом, чтобы нижний край второй синей линии почти соприкасался с верхним символом второй строки текста. Результат должен выглядеть как на приведенном ниже рисунке. Обратите внимание, что теперь крупные области слева стали зелеными, так как теперь они рассматриваются как открытые, соприкасаясь с синей линией между строками субтитров. Кроме того, значение в поле «Line Height» будет использоваться в подпрограмме, заполняющей крупные области.



Наконец, можно попробовать включить флажок «Fill sides» в панели «Inter-line options». Выберите значение для «Text Alignment». Этот параметр заставляет «SubRip» начинать обработку слева, справа или от центра. При этом области, где не найдены белые пикселы, достаточно близко расположенные к другому белому тексту, заполняются сиреневым. Окончательный результат должен выглядеть как на приведенном ниже рисунке:



Приведенный в качестве примера кадр является очень сложным случаем, поскольку позади текста находятся белые объекты. Предыдущее изображение было получено без использования значения «Outline Color» (флажок «Use outline color» не был установлен). На следующем рисунке показано, что произойдет с этим кадром, если включить его. Обратите внимание на белые области, не являющиеся частью текста.



Иногда эту проблему можно разрешить, уменьшив значения полей «Text Color Tolerance», однако это может привести к тому, что символы станут слишком тонкими или нечеткими, как на следующем рисунке. Это нежелательно, поскольку тонкие символы часто вызывают фрагментирование или не учитываются при распознавании, если значения в окне Options > Advanced OCR Setup > Character Setup слишком малы. А нечеткие («изъеденные») символы потребуют значительно большего объема ввода при распознавании.



Вместо этого можно, оставив значения «Text Color Tolerance» большими (>50), также увеличить «Text Width» (>5). При этом весь фон будет интерпретироваться как текст, но станет более крупным и будет закрашен серым, как показано ниже. Цвет не «просачивается» на буквы из-за контура, однако это не всегда помогает. Кроме того, при увеличении значения «Text Width» значительно замедляется обработка, поскольку анализируемое окно становится больше, поэтому такой комбинацией настроек рекомендуется пользоваться только в крайнем случае.



Другой способом избавиться от тонких и нечетких символов — воспользоваться функцией «Fatten text». Результат ее работы показан на следующем рисунке. Обратите внимание, что символы стали значительно толще. Это также позволяет снизить число запросов символов в окне «New character(s)». Процесс управляется значениями «Fatten Color Tolerance» в панели «Advanced Color Options». Значения для каждого из цветовых каналов являются относительными по отношению к темному и светлому цветам «Text Colors». Они определяют для цветового канала максимальное отличие цвета пиксела от цвета «Text Color», до которого цвет является кандидатом на утолщение. Светлый и темный цвета «Fatten Colors» отображаются как цветные прямоугольники под светлым и темным цветов «Text Colors». Если субтитры имеют контур, эту толерантность нужно увеличить для цветовых каналов, в которых больше разница между цветами «Text Color» и «Outline Color».



Целью всех этих телодвижений является выделить только текст, показанный на рисунке белым. Тогда несколько кадров будут аккумулированы в черно-белое изображение, а все остальные цвета — отброшены. Значение «Same sub tolerance» указывает SubRip, изменение скольких пикселов белого цвета между кадрами будет принято за смену субтитра. Значение «Min. pixels» указывает SubRip, какое минимальное число белых пикселов вызовет начало обработки. Изображение, передаваемое на вход распознавания, выглядит так:



Когда параметры распознавания доведены до ума, нажмите кнопку «Rew.», чтобы вернуться в начало видеоролика, а затем кнопку «Run», чтобы начать процесс распознавания. Далее все происходит так же, как и при извлечении субтитров с DVD. Комбинация клавиш Ctrl+Enter позволяет заполнить «Best Guess», а клавиша Enter — принять нужный вариант. Кнопка «Use» выполняет оба шага за один раз. Клавиши Ctrl+Left и Ctrl+Right увеличивают или уменьшают выделение текста (символы в красном прямоугольнике), позволяя избавиться от фрагментированных символов — например, когда символ «O» разбивается на два — «(» и «)». Нажатие клавиши Enter выделяет белые пятна — фоновые области, распознанные как субтитры — как, например, показано в красном прямоугольники на рисунке. Таким образом можно указать SubRip игнорировать похожие белые пятна.



Если с некоторого момента субтитры перестали правильно распознаваться, может потребоваться повторная настройка параметров. Нажмите кнопку «Pause/Abort» в главном окне, настройте параметры, а затем нажмите «Continue» — точно так же, как при обработке DVD. Можно также нажать кнопку «Prev.», чтобы вернуться к первому кадру последнего субтитра видеофайла. При этом последний субтитр исчезнет из окна текста, после чего распознавание начнется с новыми параметрами.

Если один и тот же субтитр появляется несколько раз, можно просто продолжить распознавание (полные дубликаты будут объединены автоматически) или нажать кнопку «Same As Last», чтобы перейти к следующему субтитру. Если один и тот же субтитр повторяется много раз, может потребоваться изменение параметров: либо увеличьте значение «Same sub tolerance», либо подстройте значения полей «Text», «Outline» и «Fatten Tolerance».

Если субтитры появляются плавно, установите значение «Skip first» в какое нибудь число больше 0, чтобы пропустить несколько кадров, прежде чем начать накопление кадров. После того, как аккумулировано число кадров, определенных полем «Min. duration», все последующие кадры просто сравниваются с суммарным изображением. Это ускоряет процесс распознавания. Значение поля «Update every» указывает «SubRip» повторять процесс аккумулирования через определенное число кадров. В режиме «accumulate» белые пикселы из различных кадров складываются (то есть объединяются логической операцией OR) а в режиме «compare» — вычитаются (логической операцией AND). Сравнение работает быстрее, чем аккумуляция, поскольку помимо сравнения с пороговыми значениями, никакая обработка не выполняется, однако это может привести к нераспознаванию субтитров на полностью белом фоне. Если в видео часто встречается эта ситуация, установите поле «Update every» в значение «1+Min. duration», чтобы режим «compare» гарантированно не использовался. Это замедлит распознавание, поэтому используйте этот способ только в крайнем случае. Во всех остальных случаях оставьте в поле «Update every» значение в районе 30 кадров.

Если включить флажок «Save», для каждого кадра будет сохраняться черно-белое битовое изображение (.pgm файл), содержащее только распознаваемые символы. Пропущенные области (по нажатию Enter в окне «New character(s)» для символа NULL) не помечаются: обратите внимание, что белые пятна в левой части предыдущего рисунка отсутствуют на приведенном ниже. Впоследствии битовые изображения и индексный файл могут быть использованы для удаления субтитров.



Автор: ai4spam
Перевод статьи: ssgen

Обсуждение на форуме (35)