Como posso remover recursivamente as informações EXIF de vários milhares de arquivos JPG?
Como posso remover recursivamente as informações EXIF de vários milhares de arquivos JPG?
Respostas:
As outras sugestões do ExifTool são ótimas se você deseja remover ou alterar seções específicas. Mas se você deseja remover todos os metadados completamente, use este (na página de manual):
exiftool -all= dst.jpg
Delete all meta information from an image.
Você também pode usar jhead , com o sinalizador -de:
-de Delete the Exif header entirely. Leaves other metadata
sections intact.
Observe que, nos dois casos, EXIF é apenas um tipo de metadados. Outras seções de metadados podem estar presentes e, dependendo do que você deseja fazer, ambos os programas têm opções diferentes para preservar alguns ou remover tudo. Por exemplo, jhead -purejpg
retira todas as informações não necessárias para renderizar a imagem.
A ferramenta de manipulação EXIF exiv2
possui um comando para excluir dados EXIF:
exiv2 rm image.jpg
remove todos os dados EXIF da imagem.
Para remover dados EXIF de todas as imagens JPEG no diretório atual, use
exiv2 rm *.jpg
Para remover dados EXIF de todas as imagens JPEG no diretório atual e de todos os subdiretórios recursivamente, use:
find . -type f -iname '*.jpg' | xargs exiv2 rm
É uma boa ideia testar o comando antes.
Para ver quais arquivos foram encontrados:
find . -type f -iname '*.jpg' | less
Para ver quais comandos serão executados:
find . -type f -iname '*.jpg' | xargs echo exiv2 rm | less
Observe o echo
inserido antes exiv2
para imprimir o comando, em vez de executá-lo.
Você deve olhar para algumas ferramentas de código- fonte aberto como o exiftool . Há muitas opções (para exif, xmp, iptc).
exiftool -overwrite_original \
-xmp:Creator='votre nom' \
-xmp:WebStatement='http://creativecommons.org/licenses/by-nc-nd/3.0/' \
-xmp:Rights='Copyright votre nom. This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.' \
-iptc:By-line='votre nom' \
-iptc:CopyrightNotice='Copyright votre nom. This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.' \
-exif:Artist='votre nom' \
-exif:Copyright='Copyright votre nom. This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.' \
votre_fichier.jpg
A única coisa que você deve fazer a seguir é escrever um pequeno script que lista seus arquivos (jpg) e faz as coisas. Para remover o conteúdo de um campo, você deverá defini-lo como "^"; como no exemplo a seguir:
-Software= ^
-ModifyDate= ^
-CreatorTool= ^
-MetadataDate= ^
-Rating= ^
-ImageNumber= ^
-WhiteBalance= ^
-Temperature= ^
-Tint= ^
-IncrementalTemperature= ^
-IncrementalTint= ^
-Exposure= ^
-Shadows= ^
-Brightness= ^
-Contrast= ^
-Saturation= ^
-Sharpness= ^
-LuminanceSmoothing= ^
-ColorNoiseReduction= ^
-ChromaticAberrationR= ^
-ChromaticAberrationB= ^
-VignetteAmount= ^
-VignetteMidpoint= ^
-ShadowTint= ^
-RedHue= ^
-RedSaturation= ^-GreenHue= ^
-GreenSaturation= ^
-BlueHue= ^
-BlueSaturation= ^
-FillLight= ^
-Vibrance= ^
-HighlightRecovery= ^
-Clarity= ^
-Defringe= ^
-HueAdjustmentRed= ^
-HueAdjustmentOrange= ^
-HueAdjustmentYellow= ^
-HueAdjustmentGreen= ^
-HueAdjustmentAqua= ^
-HueAdjustmentBlue= ^
-HueAdjustmentPurple= ^
-HueAdjustmentMagenta= ^
-SaturationAdjustmentRed= ^
-SaturationAdjustmentOrange= ^
-SaturationAdjustmentYellow= ^
-SaturationAdjustmentGreen= ^
-SaturationAdjustmentAqua= ^
-SaturationAdjustmentBlue= ^
-SaturationAdjustmentPurple= ^
-SaturationAdjustmentMagenta= ^
-LuminanceAdjustmentRed= ^
-LuminanceAdjustmentOrange= ^
-LuminanceAdjustmentYellow= ^
-LuminanceAdjustmentGreen= ^
-LuminanceAdjustmentAqua= ^
-LuminanceAdjustmentBlue= ^
-LuminanceAdjustmentPurple= ^
-LuminanceAdjustmentMagenta= ^
-SplitToningShadowHue= ^
-SplitToningShadowSaturation= ^
-SplitToningHighlightHue= ^
-SplitToningHighlightSaturation= ^
-SplitToningBalance= ^
-ParametricShadows= ^
-ParametricDarks= ^
-ParametricLights= ^
-ParametricHighlights= ^
-ParametricShadowSplit= ^
-ParametricMidtoneSplit= ^
-ParametricHighlightSplit= ^
-SharpenRadius= ^
-SharpenDetail= ^
-SharpenEdgeMasking= ^
-ConvertToGrayscale= ^
-ToneCurveName= ^
-CameraProfile= ^
-HasSettings= ^
-CropTop= ^
-CropLeft= ^
-CropBottom= ^
-CropRight= ^
-CropAngle= ^
-CropWidth= ^
-CropHeight= ^
-CropUnit= ^
-HasCrop= ^
-AlreadyApplied= ^
-ToneCurve= ^
-CameraProfile= ^
-ApplicationRecordVersion= ^
A sugestão de Vincent de usar o exiftool é boa. Eu sugiro que você escreva um script que aceite um único argumento de um nome de arquivo e execute as funções de tira desejadas. Em seguida, use find
para executar este script no seu conjunto de arquivos. O script seria algo parecido com isto:
#!/bin/sh
exiftool -overwrite_original -ExifFieldName=^ [-MoreExifFieldNames=^] $1
Digamos que você salve isso como /usr/local/bin/strip_exif.sh
, você pode chamá-lo indo para a pasta que possui seus arquivos jpeg assim:
find -type f -iname '*.jpg' -exec strip_exif.sh {} \;
Edit: Depois de ver a resposta do mattdm sobre o argumento de remover todas as tags, acho que você pode pular o script e usar a descoberta da seguinte maneira:
find -type f -iname '*.jpg' -exec exiftool -all= {} \;