Jhead : Outil de manipulation des en-têtes Exif des fichiers Jpeg

Presque tous les appareils photo numériques produisent des fichiers Jpeg avec des métadonnées Exif (paramètres de l'appareil photo, vignette d'aperçu, etc.) dans l'en-tête.

L'outil en ligne de commande Jhead permet de manipuler les métadonnées Exif des fichiers JPEG.

jhead peut extraire d'un fichier jpeg les données Exif suivantes :

Heure et date de prise de vueMarque et modèle de l'appareil photoMiniature Exif basse résolution intégralevitesse d'obturationNuméro F-stop de l'appareilUtilisation du flash (oui/non)Distance de mise au pointDistance focale et calcul de la distance focale équivalente 35 mmRésolution de l'imageInformations GPS, si elles sont enregistrées dans l'imageEn-tête IPTCDonnées XMPjhead peut modifier dans un fichier jpeg les données Exif suivantes :

Cadrage en haut à droite selon le tag rotation en utilisant jpegtranDéfinir ou ajuster les horodatages exif internesCorrection des décalages de date/heure dans de grands lots d'imagesRenommer ou horodater les fichiers selon l'horodatage exifTransférer les en-têtes exif entre les imagesRemplacer les vignettes dans les en-têtes ExifModifier les commentaires jpeg (mais pas les commentaires Exif)Supprimer les sections exif ou commentaires des images jpegCréer un nouvel en-tête exif minimal contenant la date et la vignette

Pré-requis

Installation

Installez jhead

...@...:~$ sudo apt install jhead

Configuration

Utilisation

Options en ligne de commande

Métadonnées générales

-te <name>

Transplante l'en-tête Exif de l'image <name> dans l'image spécifiée.

Option utile pour modifier les photos en conservant l'en-tête Exif sur les photos.

Comme la plupart des programmes de retouche photo effaceront l'en-tête Exif, cette option permet de les retransplanter après avoir modifié les photos.

Cette fonctionnalité dispose d'une option intéressante de “chemin relatif” pour spécifier le nom de la vignette. Chaque fois que <name> contient les caractères '&i', jhead substituera le nom de fichier d'origine à ce nom. Cela permet de créer un “nom relatif” lors de la création d'un lot complet de fichiers. Par exemple, l'appel :

jhead -te "originals\&i" *.jpg

transfére l'en-tête Exif pour chaque fichier .jpg dans le répertoire d'origine sous le même nom. Mettez des guillemets autour de cette option pour que le ' &' soit transmis au programme.

-dc

Supprime le champ de commentaire de l'en-tête JPEG. Notez que le commentaire ne fait pas partie de l'en-tête Exif.

-de

Supprime entièrement l'en-tête Exif en laissant intactes les autres sections (IPTC, XMP, commentaire)

-di

Supprime la section IPTC (le cas échéant) en laissant intactes les autres sections.

-dx

Supprime la section XMP (si présente) en laissant intactes les autres sections.

-du

Supprime toutes les sections que jhead ne connaît pas. Laisse intactes Exif, XMP, IPTC et les sections de commentaires.

-purejpg

Supprime toutes les sections JPEG non nécessaires au rendu de l'image. Supprime toutes les métadonnées que diverses applications peuvent avoir laissées dans l'image. Une combinaison des options -de -dc et -du.

-mkexif

Crée une en-tête Exif minimale. L'en-tête Exif contient uniquement la date/l'heure et des champs de miniatures vides. Date/heure réglée sur l'heure du fichier par défaut. Utilisez avec l'option -rgt si vous souhaitez que l'en-tête Exif contienne une vignette. Notez que la création d'en-tête Exif est très limitée pour le moment et qu'aucun autre champ ne peut être ajouté à l'en-tête Exif de cette manière.

-ce

Modifiez le champ de commentaire de l'en-tête JPEG (notez que ce champ de commentaire se trouve en dehors de la structure Exif et peut faire partie d'images JPEG de style Exif et non Exif).

Un fichier temporaire contenant le commentaire est créé et un éditeur de texte est lancé pour éditer le fichier. L'éditeur est spécifié dans la variable d'environnement EDITOR. Si aucun n'est spécifié, le bloc-notes est utilisé sous Windows, ou vi sous UNIX. Après la fermeture de l'éditeur, les données sont retransférées dans l'image et le fichier temporaire supprimé.

-cs <name>

Enregistre la section des commentaires dans un fichier

-ci <name>

Remplace le commentaire par le texte du fichier.

-cl <comment>

Remplace le commentaire par le commentaire de la ligne de commande.

Manipulation de date/heure

-ft

Définit l'horodatage système du fichier d'après celui stocké dans l'en-tête Exif.

-dsft

Définit l'horodatage Exif d'après celui du fichier. Nécessite un en-tête Exif préexistant. Utilisez l'option -mkexif pour en créer un si nécessaire.

-n[<fmt-string>]

Cette option entraîne le changement de nom et/ou le déplacement des fichiers en fonction du champ “DateTimeOriginal” de l'en-tête Exif. Si le fichier n'est pas un fichier Exif ou si DateTimeOriginal ne contient pas de valeur valide, la date du fichier est utilisée.

Si le nom inclut '/' ou '\' (sous Windows), c'est interprété comme un nouveau chemin pour le fichier. Si le nouveau chemin n'existe pas, il sera créé.

Si [fmt-string] est omis, le fichier sera renommé en MMDD-HHMMSS.

Si [fmt-string] est fournie, la fmt-string sera transmise à la fonction strftime pour le formatage. De plus, si la chaîne de format contient '%f', cela sera remplacé par le nom d'origine du fichier (moins l'extension).

Un numéro de séquence peut également être inclus en incluant '%i' dans la chaîne de format. Des zéros non significatifs peuvent être spécifiés. '%03i' par exemple remplira les nombres de '001', '002'... cela fonctionne exactement comme printf en C, mais avec '%i' au lieu de '%d'

Si le nom de la cible existe déjà, il sera ajouté “a”, “b”, “c”, etc. au nom, sauf si le nom se termine par une lettre, auquel cas il sera ajouté “0”, “1” , “2”, etc.

Cette fonctionnalité est particulièrement utile si plusieurs appareils photo numériques ont été utilisés pour prendre des photos d'un événement. En les renommant en un schéma en fonction de la date, ils apparaîtront automatiquement dans l'ordre de prise lorsqu'ils seront visualisés avec une sorte de visionneuse comme Xnview ou AcdSee, et triés par nom. Ou vous pouvez utiliser l'option -ft et afficher les images triées par date. En règle générale, l'une des dates de la caméra ne sera pas tout à fait correcte, auquel cas vous devrez peut-être d'abord utiliser les options -ta ou -da sur ces fichiers.

Les arguments les plus utiles pour strftime sont :

%d

Jour du mois en nombre décimal (01 – 31)

%H

Heure au format 24 heures (00 – 23)

%j

Jour de l'année en nombre décimal (001 – 366)

%m

Mois en nombre décimal (01 – 12)

%M

Minute en nombre décimal (00 – 59)

%S

Seconde en nombre décimal (00 – 59)

%U

Semaine de l'année en nombre décimal, avec le dimanche comme premier jour de la semaine (00 – 53)

%w

Jour de la semaine en nombre décimal (0 – 6; Le dimanche est 0)

%y

Année sans siècle, en nombre décimal (00 – 99)

%Y

Année avec siècle, en nombre décimal

Exemple :

jhead -n%Y%m%d-%H%M%S *.jpg

Cela renommera les fichiers *.jpg selon YYYYMMDD-HHMMSS

Remarque à l'intention des utilisateurs de fichiers de commandes Windows : '%' est utilisé pour délimiter les macros dans les fichiers de commandes Windows. Vous devez utiliser pour obtenir un % transmis au programme. Donc, pour un fichier batch, vous devriez écrire "jhead -nYmd-HM%%S *.jpg“

Pour une liste complète des arguments strftime, recherchez la fonction strftime. Notez que certains arguments de la fonction strftime (non répertoriés ici) produisent des chaînes avec des caractères tels que '/' et ':' qui peuvent ne pas être valides dans le cadre d'un nom de fichier sur divers systèmes.

-a

(Option Windows uniquement). Renommez également les fichiers portant le même nom mais avec une extension différente. Ceci est utile pour renommer des fichiers .AVI basés sur un fichier Exif en .THM, ou pour renommer des fichiers d'annotation sonore ou des fichiers bruts avec des fichiers jpeg. À utiliser avec l'option '-n'.

-ta<timediff>

Ajustez l'heure stockée dans l'en-tête Exif par h:mm en avant ou en arrière. Utile lorsque vous avez pris des photos avec la mauvaise heure réglée sur l'appareil photo, par exemple après avoir traversé des fuseaux horaires ou lorsque l'heure d'été a changé. Cette option utilise l'heure du champ “DateTimeOriginal” (balise 0x9003), mais définit tous les champs d'heure de l'en-tête Exif sur la nouvelle valeur.

Exemples :

Avancer l'heure d'une heure (vous l'utiliserez après avoir oublié de régler l'heure d'été sur l'appareil photo) :

jhead -ta+1:00 *.jpg

Reculer l'heure de 23 secondes (pour synchroniser les horodatages de deux caméras après avoir constaté qu'elles ne s'alignaient pas tout à fait):

jhead -ta-0:00:23 *.jpg

Avancer l'heure de 2 jours et 1 heure (49 heures) :

jhead -ta+49 *.jpg

-da<date>-<date>

Fonctionne comme -ta, mais pour spécifier de grands décalages de date, à utiliser lors de la fixation des dates des caméras où la date a été définie de manière incorrecte, comme la réinitialisation de la date et de l'heure par le retrait de la batterie sur certaines caméras. Cette fonctionnalité est idéale pour ajuster les dates sur les photos prises sur une large plage de dates. Pour des photos toutes prises à la même date, l'option ”-ds“ est souvent plus simple à utiliser.

Parce que différents mois et années ont des nombres de jours différents, un simple décalage pour des mois, des jours, des années conduirait parfois à des résultats inattendus. Le décalage horaire est donc spécifié comme une différence entre deux dates, de sorte que jhead puisse déterminer exactement de combien de jours l'horodatage doit être ajusté, y compris les années bissextiles et les changements d'heure d'été. Les dates sont spécifiées sous la forme aaaa:mm:jj. Pour les ajustements sous-journaliers, une heure de la journée peut également être incluse, en spécifiant aaaa:nn:jj/hh:mm ou aaaa:mm:jj/hh:mm:ss

Exemples :

L'année sur l'appareil photo a été fixée à 2004 au lieu de 2005 pour les photos prises en avril :

jhead -da2005:03:01-2004:03:01

La date par défaut de l'appareil photo est 2002:01:01 et la date a été réinitialisée le 2005:05:29 à 11h21 :

jhead -da2005:05:29/11:21-2002:01:01

-ts<date-time>

Définit la date et l'heure stockées dans l'en-tête Exif selon ce qui est spécifié sur la ligne de commande. Cette option modifie tous les champs de date dans l'en-tête Exif. L'heure doit être spécifiée comme suit : aaaa:mm:jj-hh:mm:ss

-tf <filename>

Définit la date stockée dans l'en-tête Exif à l'heure de modification du fichier. Cette option modifie tous les champs de date dans l'en-tête Exif.

-ds<date-time>

Définit la date stockée dans l'en-tête Exif sur ce qui est spécifié sur la ligne de commande. Peut être utilisé pour définir la date, uniquement l'année et le mois, ou uniquement l'année. La date est spécifiée sous la forme : aaaa:mm:jj, aaaa:mm ou aaaa

Manipulation des miniatures

-dt

Supprime les vignettes de l'en-tête Exif, mais laisse intactes les parties intéressantes. Cette option tronque la vignette de l'en-tête Exif, à condition que la vignette soit la dernière partie de l'en-tête Exif (ce qui, à ma connaissance, est toujours le cas). Les en-têtes Exif ont une vignette intégrée, qui mesure généralement 240×160 avec une taille de 10k. Cette miniature est utilisée par les appareils photos numériques. Windows XP, ainsi que divers logiciels de visualisation de photos, peuvent également utiliser cette vignette si elle est présente, mais fonctionnent très bien si ce n'est pas le cas.

-st <name>

Enregistrez la vignette intégrée des Jpegs provenant d'un appareil photo numérique. La vignette se trouve à l'intérieur de l'en-tête Exif et est une image JPEG à très basse résolution. Notez que toute modification apportée à une photo, à l'exception de certains programmes, efface généralement l'en-tête Exif et avec lui la vignette.

Comme l'option '-te', cette fonctionnalité a l'option 'chemin relatif' pour spécifier le nom de la vignette. Chaque fois que le <nom> contient les caractères '&i', jhead substituera le nom de fichier d'origine à ce nom. Cela permet de créer un “nom relatif” lors de la création d'un lot complet de fichiers. Par exemple, l'appel :

jhead -st "thumbnails\&i" *.jpg

créerait une vignette pour chaque fichier .jpg dans le répertoire des vignettes du même nom (à condition que le répertoire des vignettes existe, bien sûr). Win32 et la plupart des shells UNIX traitent le caractère '&' d'une manière spéciale, vous devez donc mettre des guillemets autour de cette option de ligne de commande pour que le '&' soit même transmis au programme.

Si un '-' est spécifié pour le fichier de sortie, la vignette est envoyée à stdout. (version UNIX uniquement)

-rt <name>

Remplace les vignettes à partir de l'en-tête Exif. Cela ne fonctionne que si l'en-tête Exif contient déjà un en-tête Exif et une vignette.

-rgt[size]

Régénére la miniature Exif. 'size' spécifie la hauteur ou la largeur maximum de la vignette. J'ai ajouté cette option car j'avais beaucoup d'images que j'avais fait pivoter avec divers outils qui ne mettent pas à jour l'en-tête Exif. Mais les nouveaux navigateurs d'images tels que XnView utilisent la vignette Exif, et donc les vignettes seraient différentes de l'image elle-même. Notez que la balise de rotation devait également être effacée (option -norot).

En règle générale, seules les images prises en orientation portrait en sont affectées. Vous pouvez utiliser l'option -orp pour dire à jhead de n'opérer que sur les images qui sont droites.

Cette option s'appuie sur le programme 'mogrify' (de ImageMagick) pour régénérer la vignette. Les utilisateurs de Linux ont souvent déjà cet outil préinstallé. Les utilisateurs de Windows doivent aller le télécharger. Cette option ne fonctionne que si l'image contient déjà une vignette.

Manipulation des balises de rotation

-autorot

À l'aide de la balise “Orientation” de l'en-tête Exif, fait pivoter l'image pour qu'elle soit droite. Le programme 'jpegtran' est utilisé pour effectuer la rotation. Ce programme est présent dans la plupart des distributions Linux. Pour Windows, vous devez en obtenir une copie. Après la rotation, la balise d'orientation de l'en-tête Exif est définie sur '1' (orientation normale). La vignette Exif est également pivotée. Les autres champs de l'en-tête Exif, y compris les dimensions, ne sont pas modifiés, mais la hauteur/largeur JPEG est ajustée.

Cette fonctionnalité est particulièrement utile avec les nouveaux appareils photo numériques, qui définissent automatiquement le champ d'orientation dans l'en-tête Exif à l'aide d'un capteur d'orientation intégré à l'appareil photo.

-norot

Efface la balise de rotation d'en-tête Exif sans altérer l'image. Vous constaterez peut-être que vos images contiennent des balises de rotation provenant de votre appareil photo, mais vous les avez déjà fait pivoter avec un outil sans perte sans effacer la balise de rotation. Maintenant, votre navigateur fait pivoter à nouveau les images car la balise de rotation d'image indique toujours que l'image doit être pivotée.Utilisez cette option pour résoudre ce problème. Vous pouvez également régénérer la vignette à l'aide de l'option -rgt.

Contrôle de la verbosité de la sortie

-h

Affiche le résumé des options de ligne de commande.

-v

Rend le programme encore plus verbeux qu'il ne l'est déjà. Comme les programmes DOS, et contrairement aux programmes UNIX, Jhead donne des informations sur ce qu'il fait, même lorsque tout va bien. Utilisateur Windows que je suis, quand quelque chose ne me donne pas de retour pendant 20 secondes, je suppose qu'il a planté.

-q

Empêche le programme de cracher des messages en cas de succès - plus comme la méthode Unix “Le silence est d'or”. il s'est planté.

-V

Imprimer les informations de version et la date de compilation.

-exifmap

Afficher une carte des octets dans l'en-tête Exif. Utile lors de l'analyse d'en-têtes Exif étranges, pas d'une grande utilité pour les non-développeurs de logiciels.

-se

Supprimez les messages d'erreur liés à la structure d'en-tête Exif corrompue.

-c

Sortie concise. Cette image permet de résumer les informations sur une seule ligne au lieu de plusieurs. Utile pour parcourir des images, ainsi que pour importer dans des feuilles de calcul (les données sont délimitées par des espaces avec des guillemets comme qualificatif de texte).

Correspondance et sélection de fichiers

-model <model>

Restreint le traitement des fichiers à ceux dont le modèle d'appareil photo, comme indiqué par les informations d'image Exif, contient la sous-chaîne spécifiée dans l'argument après '-model'. Par exemple, la commande suivante répertorie uniquement les images provenant d'un appareil photo S100 :

jhead -model S100 *.jpg

J'utilise cette option pour limiter ma recompression JPEG aux images provenant de mon appareil photo Cannon S100 (voir l'option -cmd).

-quality <nn>

Limite le traitement des fichiers à ceux dont le facteur de qualité estimé est égal ou supérieur au nombre spécifié nn.

-exonly

Ignorez tous les fichiers qui n'ont pas d'en-tête Exif. Cela ignore tous les fichiers qui ne proviennent pas directement de l'appareil photo numérique, car la plupart des logiciels de retouche photo ne conservent pas l'en-tête Exif lors de l'enregistrement des images.

-cmd<command>

Exécute la commande spécifiée sur chaque fichier Jpeg à traiter.

La section Exif de chaque fichier est lue avant l'exécution de la commande et réinsérée une fois la commande terminée.

Ceci est utile pour utiliser la capacité de globalisation de fichiers de Jhead pour traiter toute une arborescence de répertoires de fichiers.

Il est également utile pour restaurer l'en-tête exif après des opérations qui effacent les métadonnées Exif. Cependant, la plupart des programmes d'aujourd'hui conserveront les métadonnées Exif intactes, c'est donc moins important qu'auparavant.

-orp, -orl

Fonctionne uniquement sur des images au format portrait (-orp) ou paysage (-orl).

Veuillez noter que ceci est uniquement basé sur les valeurs de largeur et de hauteur jpeg. Certains navigateurs peuvent faire pivoter automatiquement l'image lors de son affichage en fonction de la balise d'orientation Exif, de sorte que les images prises en mode portrait s'affichent en mode portrait. Cependant, l'image elle-même peut ne pas être stockée en orientation portrait. Les options -autorot et -norot sont utiles pour traiter les problèmes de rotation.

-r

La fonctionnalité récursive de la version 1.0 n'a jamais fonctionné à ma satisfaction, et je l'ai remplacée par mon code récursif de globalisation de fichiers dans la version Windows. Voir ci-dessous.

Exemple de sortie jhead :

...@...:~$ jhead 0805-153933.jpg
File name : 0805-153933.jpg
File size : 463023 bytes
File date : 2001:08:12 21:02:04
Camera make : Canon
Camera model : Canon PowerShot S100
Date/Time : 2001:08:05 15:39:33
Resolution : 1600 x 1200
Flash used : No
Focal length : 5.4mm (35mm equivalent: 36mm)
CCD Width : 5.23mm
Exposure time: 0.100 s (1/10)
Aperture : f/2.8
Focus Dist. : 1.18m
Metering Mode: center weight
Jpeg process : Baseline

Le programme dispose de nombreuses options en ligne de commande pour manipuler les fichiers Exif, telles que des options pour manipuler la date dans l'en-tête, renommer les fichiers image ou coordonner l'exécution de Jpegtran et Mogrify pour manipuler des arborescences entières de répertoires d'images.

Désinstallation

Problèmes connus

Voir aussi

(en) https://www.sentex.ca/~mwandel/jhead/(en) https://www.sentex.ca/~mwandel/jhead/usage.html

Basé sur << Jhead is a command line driven program for manipulating the non-image parts of Exif flavour JPEG files that most digital cameras produce >> par sentex.ca/~mwandel.