[ EDIT # 1 da OP: Acontece que esta pergunta é muito bem respondida pelo criador / mantenedor do exiftool Phil Harvey em um thread duplicado no fórum ExifTool ]
[ EDIT # 2 by OP: do ExifTool Perguntas frequentes : O ExifTool não garante a remoção completa de metadados de um arquivo ao tentar excluir todos os metadados. Consulte 'Limitações do gravador'.]
Gostaria de procurar nos meus discos rígidos antigos fotos que não estão na minha unidade de backup atual. Os formatos incluem jpg, png, tif, etc ..., bem como vários formatos brutos (diferentes modelos e fabricantes de câmeras).
Estou interessado apenas na exclusividade da imagem em si e não na exclusividade devido a diferenças, por exemplo, nos valores das tags exif, na presença / ausência de uma determinada tag exif, nas miniaturas incorporadas, etc.
Mesmo que eu não espere encontrar qualquer corrupção / roteamento de dados entre cópias diferentes de imagens idênticas, gostaria de detectar isso, bem como diferenças devido ao redimensionamento e alterações de cores.
[ Edit # 3 by OP: Para esclarecimento: Uma pequena porcentagem de falsos positivos é tolerável (um arquivo é considerado único quando não é) e os falsos negativos são altamente indesejáveis (um arquivo é incorretamente concluído como duplicado). ]
Meu plano é identificar a exclusividade com base no md5sums após remover todos e quaisquer metadados.
Como posso retirar os metadados?
Será exiftool -all= <filename>
suficiente?
fonte
file
falharão em descobrir os formatos de imagem RAW efind
só irá funcionar em extensões (pode ser útil para descrever melhor o que você tem)find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"
where<...>
significa um monte de outros sufixos.convert image.jpg - | md5sum
(ImageMagick) fornecem somas MD5 apropriadas.Respostas:
jhead
tem a capacidade de remover metadados que não são de imagem de arquivos JPEG. A página do manual diz:fonte
Eu iria com o ImageMagick para a maioria das imagens. Isso ocorre porque implementações de bibliotecas diferentes produzirão resultados compactados diferentes, o ImageMagick pode executar uma unificação de compactação.
Tipos comuns são fáceis porque o sistema operacional possui bibliotecas para lê-los e gravá-los. Então:
Isso garantirá que você tenha as imagens gravadas da mesma maneira. E então você pode executar:
Para os formatos RAW, acredito que a única maneira é fazer o que Phil diz e, portanto:
E então a soma de verificação seria a mesma. Você só precisa pensar que os formatos de imagem mais exóticos podem ser criados com uma única implementação (ou ter um formato de arquivo rígido).
Isenção de responsabilidade : Isso funcionará para comparar as somas de verificação entre si. Se você armazenar as somas de verificação e, em seguida, execute novamente a
-strip
após uma atualizaçãozlib
oulibjpeg
poderá terminar com somas de verificação completamente diferentes. Você precisa criar as somas de verificação para todas as imagens sempre. Dadas as preocupações com a qualidade da imagem, é aconselhável executar isso apenas uma vez .fonte
-quality
), todas as apostas serão desativadas.-strip
. Para ver isso, execute osexiftool -a -G1 -s <filename>
arquivos criados commogrify -strip
eexiftool -all=
. Para confirmar, executeexiftool -a -G1 -s <original-filename> | grep JFIF
. As execuções futuras do script precisariam, de alguma forma, levar isso em conta se a versão do JFIF fosse diferente.Com o
imagemagick
pacote e não apenas para JPEGs, você pode simplesmente:Do manual :
Muito mais informações e advertências aqui .
Nota: Isso é semelhante ao @grochmal, mas muito mais direto e simples.
fonte
exiftool -all= *.jpg
dados jpg.Uma possível solução que veio à mente. Isso evita a questão dos metadados. Ele pressupõe que os arquivos terminem com a própria imagem, que todos os metadados estejam no início do arquivo.
Vamos nos referir à unidade de backup atual como a unidade de ouro.
Para imagens na unidade gold:
Para imagens nas unidades antigas :
A classe P conterá imagens que estão na unidade gold, mas têm exifdata diferentes ou têm corrupção / rotatividade de dados nos bytes iniciais da imagem.
Quando terminar, examine a CLASSE P de forma interativa, comparando-os com seus companheiros na unidade de ouro.
Veja EDIT # 3 a OP.
A atribuição nas CLASSES U e D deve ser 100% precisa.
O tamanho da CLASSE P depende do tamanho do bloco M, pois os primeiros bytes M + N de um arquivo quase certamente contêm alguns dados de imagem (e todos os metadados)
fonte
Se as unidades antigas contiverem principalmente duplicatas (incluindo metadados), use duas etapas para encontrar os únicos, conforme definido no OP (que considera dois arquivos duplicados, mesmo que sejam diferentes em metadados):
Use md5sums de arquivos não removidos intactos para identificar quais arquivos nas unidades antigas são únicos (nesse sentido alternativo) para a unidade de backup atual, atribuindo-os à CLASS uU (sem remoção exclusiva) ou à CLASSE D (upilcate). A CLASSE D será 100% precisa. CLASS uU deve ser pequeno (pela suposição acima) e conter uma mistura de duplicatas verdadeiras (no OP Sense) e únicas verdadeiras.
Trabalhando com o pequeno, ou seja, gerenciável, conjunto de arquivos no CLASS uU, use md5sums e várias técnicas de remoção para projetar um método de comparação de arquivos que seja útil para os fins descritos no OP.
fonte
Isso é um pouco antigo, mas sim, o exiftool funciona muito bem.
Mostrar metadados de
Mostrar metedados para todos os arquivos * .jpg
Nota: A extensão diferencia maiúsculas de minúsculas .
O mesmo que acima, mas inclui subdiretórios.
Remova todos os metadados
Remova todos os metadados de todos os arquivos * .jpg no diretório atual
O mesmo que acima, mas inclui subdiretórios.
Remova todos os metadados GPS de arquivos * .jpg no diretório atual
fonte