Быстрый способ получить уникальный идентификатор для видеофайлов

Мне нужен уникальный хэш для видеофайлов, который может обрабатывать следующее:
- Изменение имени файла
- Изменение местоположения файла
- Два файла с одинаковым размером файла, но разным содержимым внутри (следует обрабатывать как разные файлы)

Теперь, хотя алгоритмы хэширования, такие как md5, sha1, кажутся хорошими кандидатами, мне нужно что-то, что занимает доли секунды.
Для видеофайла размером 2 ГБ требуется 5 секунд для создания значения контрольной суммы md5.
Я предполагаю, что длительное время обработки является естественным из-за необходимости чтения большого видеофайла.

Есть ли что-то, что я мог бы использовать, что специально использует свойства видеофайлов, возможно, сравнение только с использованием заголовков видеофайлов или чего-то еще. Цель здесь — получить уникальный идентификатор видео за доли секунды.


person Vishal    schedule 30.10.2017    source источник
comment
Сам борюсь с точно такой же проблемой. Вы нашли удовлетворительное решение, которое работает достаточно быстро.   -  person eem    schedule 24.03.2020


Ответы (1)


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

ОБНОВЛЕНИЕ

В качестве альтернативы вы можете использовать утилиту ffprobe (которая поставляется с ffmpeg), чтобы получить заголовки видео и вычислить из них md5. Но запуск его как процесса будет медленным, и кажется, что он не существует как библиотека Python для импорта.

person Aleksandr Borisov    schedule 30.10.2017
comment
Верно. Спасибо за ваши предложения. Думал об этом. Но ищите что-то более элегантное, учитывая, что здесь могут помочь заголовки видео.. (и, следовательно, избежать столкновения с гораздо большей вероятностью). Заголовки видеофайлов не обязательно располагаются в начале видеофайла. - person Vishal; 30.10.2017