Алгоритм нечеткого сопоставления / фрагментации

Фон: у меня есть видеоклипы и аудиодорожки, которые я хочу синхронизировать с указанными видео.

Из видеоклипов я извлечу эталонную аудиодорожку . У меня также есть еще один трек, который я хочу синхронизировать с опорным треком. Рассинхронизация происходит из-за редактирования, которое изменяет интервалы для каждой кат-сцены.

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

Пример:

     0         1         2         
     012345678901234567890123
ref: --part1------part2------
syn: -----part1----part2-----
# (let `-` denote silence)

Вывод:

[(2,6), (5,9) # part1
 (13, 17), (14, 18)] # part2 

Моя идея, начиная с самого начала:

Fingerprint 2 large chunks* of audio and see if they match:
    If yes: move on to the next chunk
    If not:
        Go down both tracks looking for the first non-silent portion of each
        Offset the target to match the original
        Go back to the beginning of the loop

# * chunk size determined by heuristics and modifiable

Основная проблема здесь заключается в согласовании звука и снятии отпечатков пальцев - это нечеткие и относительно дорогие операции.

В идеале я хочу их как можно реже. Идеи?

5
задан Confluence 25 February 2011 в 20:55
поделиться