yurikhan: (Default)
[personal profile] yurikhan

Дано: видеофайл с вшитыми субтитрами.

Требуется: определить точки, где происходит смена субтитров.

Инструменты:

  • AviSynth 2.5
  • VirtualDubMod, любой версии
  • Текстовый редактор
  • Microsoft Excel
  • Инструмент для подсматривания цвета пиксела в шестнадцатеричном виде

Ход работы

  1. Для начала нам нужно загрузить файл. Если субтитры не по всей длине, то оставим ту часть, где они есть и нам нужны. Удалим звук — это ускорит обработку.
    DirectShowSource("Revolutionary Girl Utena - 05.avi", fps=23.976)
    s = Trim(21578, 28310).KillAudio()
  2. Выделим те области, которые близки к цвету букв субтитров.
    bin = s.ConvertToRGB32() \
           .ColorKeyMask($288028, 30) \
           .ShowAlpha()

    (цвет и tolerance подбираются опытным путём).

  3. Теперь у нас есть клип, в котором белый цвет соответствует фону, чёрный — буквам. Когда субтитры сменяются, будет большая разница между соседними кадрами. Выведем в файл среднюю разность яркости.
    comma = ","
    WriteFile(bin.ConvertToYV12(), "05.log", \
              "current_frame", "comma", \
              "YDifferenceToNext()")
  4. Теперь берём лог в Excel и начинаем анализировать. Эксперимент показывает, что на всех реальных точках смены титров значение больше 0.64. Но этого условия недостаточно — существуют точки, где разность больше 0.64, но смены титров нет. Смотрим на разницу кадров, видим, что много одиночных меняющихся пикселов на краях букв, и чем больше букв, тем больше и общая разность.
  5. Тут у нас есть выбор. Мы можем пустить какой-нибудь шумодавящий фильтр. Или мы можем сказать, что, когда смены титра нет, значение разности в соседних кадрах примерно такое же, а когда есть, то на одном кадре наблюдается ярко выраженный максимум.
    ABCD
    10.641.1
    2FrameDiffYDiffY'Flag
    300.000003
    410.000003=2*B4-B3-B5=IF(AND($B4>=$B$1,$C4>=$C$1),1,0)
    26230.000003-1.4500160
    27241.4500192.6476721
    28250.252363-1.0807420
    629462910.7164550.6972070
    629562920.7207320.0142570
    629662930.7107520.0434870
  6. Перевод номеров кадров в часы:минуты:секунды.сотые доли тривиален и оставляется читателю в качестве упражнения.
(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-07-18 10:50
Powered by Dreamwidth Studios