В следующем сценарии:
У меня есть проект с каталогом в настоящее время около десяти тысяч видеофайлов, число которых резко возрастет.
Однако многие из них являются дубликатами. С каждым видео файлом у меня есть связанная семантическая и описательная информация, которую я хочу объединить дубликаты для достижения лучших результатов для каждого.
Теперь мне нужна какая-то процедура, где я индексирую метаданные в базе данных, и всякий раз, когда новое видео входит в каталог, в базе данных рассчитываются и сопоставляются одни и те же данные.
Проблема заключается в том, что видео не являются точными дубликатами. Они могут иметь разное качество, подрезанные, водяные знаки или сиквел/приквел. Или отрезаны в начале и/или конце.
К сожалению, чем лучше сравнение, тем больше процессор и интенсивность памяти он получает, поэтому я планирую реализовать несколько уровней сравнения, которые начинаются с очень грациозного, но быстрого сравнения (maby video lengh с допуском 10%) и заканчиваются окончательным сравнением который решает, действительно ли это дубликат (это будет голосование сообщества).
Так как у меня есть сообщество для проверки результатов, достаточно доставить "хорошие догадки" с низким коэффициентом пропускания.
Итак, теперь мой вопрос: какие слои вы можете подумать или у вас есть лучший подход?
Мне не нужны усилия по созданию метаданных, у меня достаточно рабов для этого. Просто сравнение должно быть быстрым. Поэтому, если это помогает, я могу конвертировать видео 100 раз, а...
Вот мои текущие идеи:
-
длина видео (в секундах)
-
анализ изображения первого и последнего кадров
Я бы пересчитал изображение до размера эскиза и получил средние значения rgb, а затем сериализовал пиксель за пикселем, если цвет в этом пикселе больше/меньше среднего, представляемого 0 или 1. Поэтому я получаю двоичную строку, которую я может храниться в mysql и выполнять логическую битовую сумму (поддерживаемую mysql внутри) и подсчитывать оставшиеся uneval биты (также поддерживаемые внутри, что тогда было бы расстоянием Левенштейна строк бианри)
- разработка битрейта с течением времени с помощью того же кодека vbr
Я бы перекодировал видео в видеофайл vbr с теми же настройками. то я бы посмотрел на битрейт в определенные моменты времени (процентное количество видеороликов или абсолютные секунды... тогда мы бы только проанализировали часть видео). такой же вещь как с изображением. Если битрейт больше среднего, его 1 еще его 0. мы создаем двоичную строку и сохраняем ее в db и вычисляем расстояние Левенштейна позже
-
аудиоанализ (изменение битрейта и децибел с течением времени, так же как и битрейт видео)
-
анализ ключевых кадров
Image comarision, как и первый и последний кадры, но на ключевых кадрах? Мы использовали бы те же исходные файлы, которые мы использовали для вычисления битрейта, потому что ключевые кадры тяжелы зависят от кодека и настроек.
- разработка цвета с течением времени
Возможно, возьмите одну или несколько областей/пикселей внутри изображения и посмотрите, как они развиваются с течением времени. Кроме того, изменение abov/ниже среднего. черных/белых хватит, я думаю.
- представить предложения для пользователя для окончательного утверждения...
Или я иду совершенно неправильно? Я думаю, что я не могу быть первым, у кого есть эта проблема, но мне не удавалось найти решения.