Add duplicate audio hash detection
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
"""Targeted content hashing for duplicate candidates."""
|
||||
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
from typing import Iterable
|
||||
|
||||
|
||||
def sha256_file(path: Path, chunk_size: int = 1024 * 1024) -> str:
|
||||
digest = hashlib.sha256()
|
||||
with path.open("rb") as source:
|
||||
for chunk in iter(lambda: source.read(chunk_size), b""):
|
||||
digest.update(chunk)
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def compare_audio_files(paths: Iterable[Path]) -> dict:
|
||||
paths = tuple(paths)
|
||||
if len(paths) < 2:
|
||||
raise ValueError("At least two files are required for comparison")
|
||||
fingerprints = []
|
||||
for path in paths:
|
||||
fingerprints.append(
|
||||
{
|
||||
"path": str(path),
|
||||
"size": path.stat().st_size,
|
||||
"sha256": sha256_file(path),
|
||||
}
|
||||
)
|
||||
identical = len({item["sha256"] for item in fingerprints}) == 1
|
||||
return {
|
||||
"status": "identical" if identical else "different",
|
||||
"files": fingerprints,
|
||||
}
|
||||
Reference in New Issue
Block a user