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

Jhead est un programme en ligne de commande pour manipuler les méta-données des fichiers JPEG/Exif que produisent la plupart des appareils photo numériques.

Utilisateurs Windows / Mac : Jhead n'a pas d'interface utilisateur graphique. Cliquer dessus avec la souris sous Windows ou Mac OS-X ne fera rien, il faut l'utiliser dans l'invite de commande.

Fonctionnalités du programme Jhead v3.04 :

Extraction des paramètres de l'appareil photo à partir de fichiers image ExifPossibilité de définir et/ou modifier le champ de l'heure ExifManipulation (extraire, remplacer, régénérer) des vignettes ExifTransplanter l'en-tête d'image Exif d'un JPEG à un autreModifier les champs de commentaire JPEGFaire pivoter automatiquement les images vers le haut (à l'aide de jpegtran) en fonction de la balise “orientation”.Gérer les programmes en cours d'exécution sur de gros lots de Jpegs et restaurer ensuite les informations d'en-tête Exif.Afficher les informations GPS intégrées (le cas échéant)

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

Les fichiers provenant de presque tous les appareils photo numériques sont des fichiers Jpeg avec des données Exif.

Les fichiers Exif sont pour la plupart des fichiers Jpeg, mais contiennent des sections de données supplémentaires avec les paramètres de l'appareil photo, ainsi qu'une vignette d'aperçu dans l'en-tête Exif.

De nombreux navigateurs d'images utilisent cette vignette lors de la navigation, tandis que d'autres navigateurs créent leurs propres vignettes en fonction de l'image dans son ensemble.

Comme je m'intéresse à la photographie, je suis toujours curieux de savoir quels paramètres mon appareil photo numérique entièrement automatique a finalement utilisé.

En 1999, lorsque j'ai créé jhead, je ne trouvais pas de programme qui affiche les paramètres, ni qui pourrait être compilé dans un simple exécutable.

Depuis, j'ai ajouté de nombreuses autres fonctionnalités à jhead, dont beaucoup sont le résultat de suggestions ou de contributions de code.

Bien qu'il existe aujourd'hui de nombreux programmes capables de manipuler les en-têtes Exif, jhead reste l'outil le plus simple et le plus efficace, surtout pour des tâches automatisées ou scriptées.

Pré-requis

Installation

Installez jhead

USER@MACHINE:~$ sudo apt install {jhead,}

Configuration

Options générales sur les métadonnées

-te <name> Transférer l'en-tête Exif de l'image <nom> dans l'image spécifiée.Transférer l'en-tête Exif de l'image <nom> dans l'image spécifiée. Cette option est utile pour modifier les photos tout en conservant l'en-tête Exif. La plupart des programmes de retouche photo effaçant l'en-tête Exif, cette option permet de la rétablir après retouche des photos. Cette fonction propose une intéressante option de “chemin relatif” pour spécifier le nom de la vignette. Si <name> contient les caractères '&i', jhead remplacera le nom de fichier original par ce nom. Cela permet de créer un “nom relatif” pour un lot de fichiers. Par exemple, la phrase suivante : USER@MACHINE:~$ jhead -te "originals\&i" *.jpg transférera l'en-tête Exif de chaque fichier .jpg du même nom dans le répertoire d'origine. Win32 et la plupart des shells UNIX traitent le caractère “&” d'une manière spéciale, de sorte que vous devez mettre des guillemets autour de cette option de ligne de commande pour que le “&” soit transmis au programme. -dc Supprime le champ 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. Les autres sections (IPTC, XMP, commentaires) restent intactes. -di Supprime la section IPTC (si elle existe). Les autres sections restent intactes. -dx Supprime la section XMP (si elle existe). Les autres sections restent intactes. -du Supprime toutes les sections que jhead ne connaît pas. Laisse les sections Exif, XMP, IPTC et les commentaires intacts. -purejpg efface toutes les sections JPEG inutiles pour le rendu de l'image. Supprime les métadonnées que diverses applications ont pu laisser dans l'image. Combinaison des options -de -dc et -du. -mkexif Crée un en-tête Exif minimal. L'en-tête Exif ne contient que la date et l'heure, ainsi que des champs vides pour les vignettes. La date et l'heure sont réglées par défaut sur l'heure du fichier. à utiliser avec l'option -rgt si vous souhaitez que l'en-tête Exif contienne une vignette. A noter que la création d'en-têtes Exif est très limitée actuellement, et qu'aucun autre champ ne peut être ajouté ainsi à l'en-tête Exif. -ce éditer le champ de commentaire de l'en-tête JPEG (ce champ de commentaire est en dehors de la structure Exif et peut faire partie d'images JPEG de style Exif ou non Exif). Un fichier temporaire contenant le commentaire est créé et un éditeur de texte est lancé pour modifier le fichier. La variable d'environnement EDITOR spécifie l'éditeur. Si rien n'est spécifié, notepad ou vi sont utilisés respectivement sous Windows ou UNIX. Après la fermeture de l'éditeur, les données sont renvoyées dans l'image et le fichier temporaire est supprimé. -cs <name> Enregistrer la section des commentaires dans un fichier -ci <name> Remplacer le commentaire par le texte du fichier. -cl <comment> Remplacer le commentaire par le commentaire en ligne de commande.

Manipulation de la date et de l'heure

-ft Fixe l'horodatage système du fichier à celui qui est stocké dans l'en-tête Exif. -dsft Fixe l'horodatage Exif à celui du fichier. Requiert la préexistence d'un en-tête Exif. Utilisez l'option -mkexif pour en créer un si nécessaire. -n[<fmt-string>] Cette option renomme et/ou déplace les fichiers selon le champ “DateTimeOriginal” de l'en-tête Exif. Si le fichier n'est pas de type Exif ou si le champ DateTimeOriginal ne contient pas de valeur valide, c'est la date du fichier qui est utilisée. Si le nom comprend '/' ou '\' (sous Windows), il est interprété comme un nouveau chemin pour le fichier. Si le nouveau chemin n'existe pas, il sera créé. Si la chaîne [fmt-string] est omise, le fichier sera renommé en MMDD-HHMMSS. Si une [chaîne fmt] est fournie, elle sera transmise à la fonction strftime pour le formatage. En outre, si la chaîne de format contient “%f”, elle sera remplacée par le nom original du fichier (sans l'extension). Un numéro de séquence peut également être inclus en incluant “%i” dans la chaîne de format. Des zéros initiaux peuvent être spécifiés. '%03i', par exemple, remplacera les nombres par '001', '002'… Cela fonctionne comme printf en C, mais avec '%i' au lieu de '%d'. Si le nom de la cible existe déjà, il sera complété par “a”, “b”, “c”, etc., sauf si le nom se termine par une lettre, auquel cas il sera complété par “0”, “1”, “2”, etc. Cette fonction 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 selon un schéma basé sur la date, elles apparaîtront automatiquement dans l'ordre de prise de vue lorsqu'elles seront visualisées avec une visionneuse telle que Xnview ou AcdSee, et triées par nom. Vous pouvez également utiliser l'option -ft et afficher les images triées par date. Généralement, l'une des dates de l'appareil photo n'est pas réglée correctement, auquel cas vous devrez peut-être utiliser les options -ta ou -da sur ces fichiers en premier lieu. Les arguments les plus utiles pour strftime sont les suivants : %d Jour du mois sous forme décimale (01 - 31) %H Heure au format 24 heures (00 - 23) %j Jour de l'année sous forme décimale (001 - 366) %m Mois sous forme décimale (01 - 12) %M Minute sous forme décimale (00 - 59) %S Seconde sous forme décimale (00 - 59) %U Semaine de l'année sous forme décimale, avec le dimanche comme premier jour de la semaine (00 - 53) %w Jour de la semaine sous forme décimale (0 - 6 ; dimanche étant 0) %y Année sans le siècle, sous forme décimale (00 - 99) %Y Année avec le siècle, sous forme décimale Exemple: USER@MACHINE:~$ jhead -n%Y%m%d-%H%M%S *.jpg Renommera les fichiers correspondant à *.jpg selon le format AAAAMMJJ-HHMMSS. Note destinée aux utilisateurs de fichiers batch de Windows : '%' sert à délimiter les macros dans les fichiers batch de Windows. Vous devez utiliser \%\% pour qu'un % soit transmis au programme. Ainsi, dans un fichier batch, vous devriez écrire USER@MACHINE:~$ jhead -n%Y%%m%d-%H%%M%%S *.jpg Pour une liste complète des arguments de strftime, consultez la fonction strftime. Notez que certains arguments de la fonction strftime (non répertoriés ici) produisent des chaînes contenant des caractères tels que '/' et ':' qui peuvent ne pas être valides en tant que partie d'un nom de fichier sur certains systèmes. -a (Windows only option) Renommer des fichiers portant le même nom mais avec une extension différente. Cette option permet de renommer les fichiers .AVI en fonction du fichier Exif en .THM, ou de renommer les fichiers d'annotation sonore ou les fichiers bruts avec les fichiers jpeg. À utiliser avec l'option '-n'. -ta<timediff> Ajuste l'heure enregistrée dans l'en-tête Exif par h:mm en avant ou en arrière. Utile si vous avez pris des photos alors que l'appareil n'était pas à la bonne heure, par exemple après un voyage dans un autre fuseau horaire 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 avec la nouvelle valeur. Exemples : Avancer de 1 heure (utilisé si vous avez oublié de régler l'heure d'été sur l'appareil photo) USER@MACHINE:~$ jhead -ta+1:00 *.jpg Reculer l'heure de 23 secondes (pour synchroniser les horodatages de deux caméras après avoir constaté qu'ils n'étaient pas tout à fait alignés). USER@MACHINE:~$ jhead -ta-0:00:23 *.jpg Adjust time forward by 2 days and 1 hour (49 hours) USER@MACHINE:~$ jhead -ta+49 *.jpg -da<date>-<date> fonctionne comme -ta, mais pour spécifier des décalages de date importants, pour corriger des dates provenant d'appareils photo dont la date a été mal réglée, par exemple lorsque la date et l'heure ont été réinitialisées par le retrait de la batterie sur certains appareils photo. Cette fonction permet d'ajuster les dates des photos prises sur une large plage de dates. Pour les photos prises à la même date, l'option “-ds” est souvent plus facile à utiliser. Comme les mois et les années ne comportent pas tous le même nombre de jours, une simple compensation pour les mois, les jours et les années pourrait donner des résultats inattendus. Le décalage temporel est spécifié sous la forme d'une différence entre deux dates, pour permettre à jhead de déterminer exactement le nombre de jours dont l'horodatage doit être ajusté, en tenant compte des années bissextiles et des changements d'heure d'été. Les dates sont spécifiées sous la forme aaaa:mm:jj. Pour les ajustements inférieurs à un jour, l'heure peut également être incluse en spécifiant aaaa:nn:jj/hh:mm ou aaaa:mm:jj/hh:mm:ss. Exemples : L'année de l'appareil photo a été fixée à 2004 au lieu de 2005 pour les photos prises en avril. USER@MACHINE:~$ 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 à 11:21 : USER@MACHINE:~$ 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 de l'en-tête Exif. L'heure doit être spécifiée sous la forme : aaaa:mm:dd-hh:mm:ss -tf <filename> Définit la date stockée dans l'en-tête Exif selon l'heure de modification d'un fichier. Cette option modifie tous les champs de date de l'en-tête Exif. -ds<date-time> Définit la date stockée dans l'en-tête Exif selon ce qui est spécifié sur la ligne de commande. Permet de définir la date, l'année et le mois, ou l'année uniquement. La date est spécifiée comme : aaaa:mm:dd, aaaa:mm , or aaaa

Options de manipulation des miniatures

-dt

Supprime les miniatures de l'en-tête Exif, mais laisse les parties intéressantes intactes.

Cette option tronque la miniatures 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 et 10k.

Cette vignette est utilisée par les appareils photo 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>

Save the built in thumbnail from Jpegs that came from a digital camera. The thumbnail lives inside the Exif header, and is a very low-res JPEG image. Note that making any changes to a photo, except for with some programs, generally wipes out the Exif header and with it the thumbnail.

I implemented this option because I kept getting asked about having such an option. I don't consider the built in thumbnails to be all that useful - too low res. However, now you can see for yourself. I always generate my thumbnails using ImageMagick (see end of this page). Like the '-te' option, this feature has the 'relative path' option for specifying the thumbnail name. Whenever the <name> contains the characters '&i', jhead will substitute the original filename for this name. This allows creating a 'relative name' when doing a whole batch of files. For example, the incantation:

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

would create a thumbnail for each .jpg file in the thumbnails directory by the same name, (provided that the thumbnails directory exists, of course). Both Win32 and most UNIX shells treat the '&' character in a special way, so you have to put quotes around that command line option for the '&' to even be passed to the program.

If a '-' is specified for the output file, the thumbnail is sent to stdout. (UNIX build only) -rt <name> Replace thumbnails from the Exif header. This only works if the Exif header already contains an Exif header a thumbnail. -rgt[size] Regenerate Exif thumbnail. 'size' specifies maximum height or width of thumbnail. I added this option because I had a lot of images that I had rotated with various tools that don't update the Exif header. But newer image browsers such as XnView make use of the Exif thumbnail, and so the thumbnails would be different from the image itself. Note that the rotation tag also needed to be cleared (-norot option). Typically, only images that are shot in portrait orientation are afflicted with this. You can use the -orp option to tell jhead to only operate on images that are upright.

This option relies on 'mogrify' program (from ImageMagick) to regenerate the thumbnail. Linux users often already have this tool pre-installed. Windows users have to go and download it. This option only works if the image already contains a thumbnail. Rotation tag manipulation -autorot Using the 'Orientation' tag of the Exif header, rotate the image so that it is upright. The program 'jpegtran' is used to perform the rotation. This program is present in most Linux distributions. For windows, you need to get a copy of it. After rotation, the orientation tag of the Exif header is set to '1' (normal orientation). The Exif thumbnail is also rotated. Other fields of the Exif header, including dimensions are untouched, but the JPEG height/width are adjusted. This feature is especially useful with newer digital cameras, which set the orientation field in the Exif header automatically using a built in orientation sensor in the camera. -norot Clears the Exif header rotation tag without altering the image. You may find that your images have rotation tags in them from your camera, but you already rotated them with some lossless tool without clearing the rotation tag. Now your friendly browser rotates the images on you again because the image rotation tag still indicates the image should be rotated. Use this option to fix this problem. You may also want to regenerate the thumbnail using the -rgt option. Output verbosity control -h Displays summary of command line options. -v Makes the program even more verbose than it already is. Like DOS programs, and unlike UNIX programs, Jhead gives feedback as to what it is doing, even when nothing goes wrong. Windows user that I am, when something doesn't give me feedback for 20 seconds, I assume its crashed. -q Makes the program not spit out messages on success - more like the “Silence is golden” Unix way. its crashed. -V Print version info and compilation date. -exifmap Show a map of the bytes in the Exif header. Useful when analyzing strange Exif headers, not of much use to non software developers. -se Suppress error messages relating to corrupt Exif header structure. -c Concise output. This causes picture info to be summarized on one line instead of several. Useful for grep-ing through images, as well as importing into spread sheets (data is space delimited with quotes as text qualifier). File matching and selection -model <model> Restricts processing of files to those whose camera model, as indicated by the Exif image information, contains the substring specified in the argument after '-model'. For example, the following command will list only images that are from an S100 camera:

jhead -model S100 *.jpg

I use this option to restrict my JPEG re-compressing to those images that came from my Cannon S100 camera, (see the -cmd option). -quality <nn> Restricts processing of files to those whose estimated quality factor is equal to or higher than the specified number nn. -exonly Skip all files that don't have an Exif header. This skips all files that did not come directly from the digital camera, as most photo editing software does not preserve the Exif header when saving pictures. -cmd<command> Executes the specified command on each Jpeg file to be processed.

The Exif section of each file is read before running the command, and re-inserted after the command finishes.

This is useful for using Jhead's file globbing capability for processing a whole directory tree of files.

It's also useful for restoring the exif header after operations that wipe out the Exif metadata. Most programs today however will keep the Exif metadata intact, so this is less important than it used to be. -orp, -orl Operate only on images with portrait (-orp) or landscape (-orl) aspect ratio. Please note that this is solely based on jpeg width and height values. Some browsers may auto rotate the image on displaying it based on the Exif orientation tag, so that images shot in portrait mode are displayed as portrait. However, the image itself may not be stored in portrait orientation. The -autorot and -norot options are useful for dealing with rotation issues. -r The recursive feature of version 1.0 never worked to my satisfaction, and I replaced it with my recursive file globbing code in the Windows version. See below. Bugs and Shortcomings

After Jhead runs a program to rotate or resize an image, the image dimensions and thumbnail in the Exif header are not adjusted.

Modifying of Exif header data is very limited, as Jhead internally only has a read only implementation of the file system contained in the Exif header. For the most part, Exif can only modify pre-existing fixed-length fields in the header.

Most Canon digital SLR cameras fail to adjust the effective sensor resolution when shooting at less than full resolution, causing Jhead to incorrectly miscalculate the sensor width and 35mm equivalent focal length. The same can result from resizing photos with Photoshop, which will manipulate parts of the Exif header. This is often reported as a bug in Jhead, but Jhead can't do much about incorrect data.

Name globbing and recursive directories under Windows

Name globbing means matching wildcard patterns to actual file names. If you know what this term means, you are probably annoyed at how programs on Windows typically handle this. The Win32 version of this program goes beyond the pattern matching that Windows provides, and allows you to specify fancy UNIX-like patterns such as:

jhead c:\pix\199*\*\*.jpg

This program goes one step beyond beyond that in that "**" as a path component means any level of subdirectories. The invocation

jhead c:\**\*.jpg

will find ALL Jpegs files on the c: drive, including those in the root directory. The ** only works if it is the only part of that path component. For example, the path 'c:\a**\*.jpg' will not recurse. The '**' recursive expansion is ONLY supported on the Windows version. The code is in the module 'myglob.c', if you want to reuse it (I certainly intend to reuse that code for other applications). Under UNIX, the shell's wildcard expansion is pretty decent already, and dealing with the convoluted nature of some UNIX file layouts, doing better would have been much more of a challenge.

Programs I use with Jhead ImageMagick

I use the MOGIRIFY command from ImageMagick to do batch conversions and re-compresses of images. If you use Linux, you probably already have ImageMagick on your system (just type 'mogrify' at the command prompt to see if you have it). For Windows users, you have to download it from: http://www.imagemagick.org

Image Magick is one of those programs that preserves comment and Exif headers, although older versions do not.

JPEGTRAN

If you use Linux you probably also already have this program. For windows, it's hard to find a pre-built binary on the web. The Independent JPEG Group's website only has the source code.

There's a fancier version, with pre-built Windows binaries and a lossless cropping feature added at: http://sylvana.net/jpegcrop.

XnView

XnView is an excellent, small, fast, and free graphical image browser. It makes use of jpeg thumbnails for the thumbnail view. On account of Xnview, I added options to fix or regenerate the thumbnails to jhead, so that I could regenerate the thumbnails for images where the thumbnail had gotten out of sync with the image.
Mac and Linux versions of XnView are also available.

wrjpgcom / rdjpgcom

You can use these programs to write and extract COM markers from JPEG images respectively. Although I always use my jhead program for this feature, the wrjpgcom and rdjpgcom programs are extremely simple and very suitable for use with shell scripts to process lots of images. These programs are part of most Linux distributions as part of the libjpg package (along with jpegtran)

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) Jhead is a command line driven program for manipulating the non-image parts of Exif flavour JPEG files that most digital cameras produce

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.