Я бы избежал такого решения. Я практикую, может быть, почти невозможно, чтобы два медиа-файла имели одинаковый размер и одинаковые данные в соответствующих местах для сжатых форматов. Но если вам приходится иметь дело с несжатыми изображениями или волновыми файлами, вероятность того, что небольшие локальные изменения не будут обнаружены, возрастет.
Так что я думаю, вы должны действительно хэшировать весь файл. Хотя это кажется дорогим, это может быть не так, если у вас есть доступ ко всем файлам - например, если вы создаете файловый сервер или что-то в этом роде. Вы можете создавать хэш постепенно.
Если вы видите новый файл с уникальной длиной, просто сохраните длину файла. Если добавлен другой файл с такой же длиной, вычисляйте хэши обоих файлов по блокам, пока они не будут различаться. Сохраните длину файла, хеш и сколько блоков файла включены в хеш. Всякий раз, когда вы обнаруживаете совпадающие длины и хэши файлов и еще не хэшировали весь файл, вы расширяете хеш, добавляя больше блоков.
Несколько мыслей о спектакле. Для небольших файлов шансы одинаковой длины файла довольно высоки - не так много разных небольших длин файлов. Но хэшировать небольшие файлы не дорого.
Для больших файлов шансы на столкновение длин файлов уменьшаются, поскольку существует все больше и больше возможных длин файлов. Для различных мультимедийных файлов очень велики шансы того, что они отличаются непосредственно за заголовком, поэтому вам потребуется хэшировать только короткую часть начала файла.
Наконец, вы обязательно обнаружите разные файлы (кроме коллизий хешей), потому что при необходимости вы хешируете весь файл.
UPDATE
Для фильмов я бы посчитал, что длина файла практически уникальна, но файлы, перекодированные для размещения на данном носителе, вероятно, лишают эту идею смысла - (S) Все фильмы VCD будут иметь небольшой диапазон длин файлов примерно на CD-ROM. .
Но для файлов фильмов в общем случае я бы просто хешировал один блок (возможно, 512 байт) от середины файла. Два разных фильма с одинаковым изображением и звуком в одной позиции? Практически невозможно, кроме того, что вы манипулируете файлами, чтобы не пройти этот тест. Но вы можете легко сгенерировать файлы, чтобы потерпеть неудачу во всех стратегиях детерминированной выборки, поэтому это не должно иметь большого значения.