ExifTool is a Perl module with an included command-line application for reading and writing meta information in image files. It recognizes EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB and ID3 meta information as well as the maker notes of many digital cameras including Canon, Casio, FujiFilm, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Nikon, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Ricoh, Sanyo and Sigma/Foveon.
When writing information, ExifTool preserves the original file by adding "_original" to the file name. Be sure to keep a copy of the original, or thoroughly validate the new file before erasing the original. Read here for some ramblings on the subject of writing meta information.
File Type Read/Write Description ACR R American College of Radiology ACR-NEMA (DICOM-like) AI R Adobe Illustrator (PS or PDF) AVI R Windows Audio/Video BMP, DIB R Windows BitMaP / Device Independent Bitmap CR2 R/W Canon RAW 2 format (TIFF-like) CRW R/W Canon RAW format DCM, DC3, DIC, DICM R DICOM - Digital Imaging and Communications in Medicine DNG R/W Digital Negative (TIFF-like) GIF R/W Compuserve Graphics Interchange Format JP2, JPX R JPEG 2000 file JPEG, JPG R/W Joint Photographic Experts Group MIFF, MIF R Magick Image File Format MOS R/W Creo Leaf Mosaic (TIFF-like) MOV R Apple QuickTime Movie MP3 R MPEG Layer 3 audio (uses ID3 information) MP4 R Motion Picture Experts Group video format 4 MRW R/W Minolta RAW format NEF R/W Nikon (RAW) Electronic Format (TIFF-like) ORF R Olympus RAW format R Adobe Portable Document Format PEF R/W Pentax (RAW) Electronic Format (TIFF-like) PICT, PCT R Apple Picture file PNG, JNG, MNG R/W Portable/JPEG/Multiple-image Network Graphics PPM, PBM, PGM R/W Portable Pixel/Bit/Gray Map PS, EPS, EPSF R [Encapsulated] PostScript Format PSD R PhotoShop Drawing QTIF, QTI, QIF R QuickTime Image File RAF R FujiFilm RAW Format SRF R Sony RAW Format (TIFF-like) THM R/W Canon Thumbnail (JPG) TIFF, TIF R/W Tagged Image File Format WAV R WAVeform (Windows digital audio format) X3F R Sigma/Foveon RAW format XMP R/W Extensible Metadata Platform data file
Windows users: You can get a good, free Perl interpreter from
activeperl.com.
Everyone else: Don't worry, you should already have Perl installed.
Many command-line options are available to give control over the output formatting and to allow reading or writing of specific information. Run exiftool with no arguments for a description of exiftool, complete list of available options, and examples.
Note: Windows users should type "perl exiftool" instead of just "exiftool" to run exiftool. Alternately, you can rename exiftool to exiftool.pl then type "exiftool.pl" to run it.
File Name 113_1366.JPG Camera Model Name Canon EOS DIGITAL REBEL Shooting Date/Time 2003:10:31 15:44:19 Shooting Mode Program AE Tv(Shutter Speed) 1/60 Av(Aperture Value) 5.6 Metering Mode Evaluative Exposure Compensation 0 ISO Speed 100 Lens 18.0 - 55.0mm Focal Length 55.0mm Image Size 2048x3072 Quality Normal Flash On Flash Type Built-In Flash Flash Exposure Compensation 0 Red Eye Reduction Off Shutter Curtain Sync 1st-curtain sync White Balance Auto Focus Mode AI Focus AF Contrast +1 Sharpness +1 Saturation +1 Color Tone Normal File Size 811KB Image Number 113-1366 Drive Mode Continuous shooting Owner's Name Phil Harvey Camera Body No. 0560012345
ie) "exiftool -filename -imagesize -exif:fnumber -xmp:all image.jpg"
A complete list of ExifTool Tag Names accompanies this documentation. As well, current lists of available tag names and writable tag names may be obtained using the exiftool -list and -listw options. But perhaps the easiest way to determine a tag name is to use the -S option to print the tag names instead of descriptions for all information in a file. It may also be helpful to use the -G option to display the group names, and the -H or -D option to print the numerical tag ID's for reference.
Notes:
ExifTool defines a few shortcut tags in the Image::ExifTool::Shortcuts module, and allows users to define their own shortcuts by adding a definition to the .ExifTool_config file in their home directory. Here is a simple example that defines two shortcuts:
In this example, MyShortcut is a shortcut for the CreateDate, ExposureTime and Aperture tags, and MyAlias is a shortcut for FocalLengthIn35mmFormat.
%Image::ExifTool::Shortcuts::UserDefined = ( MyShortcut => ['createdate','exposuretime','aperture'], MyAlias => 'FocalLengthIn35mmFormat', );
The current shortcuts may be listed with the -list option.
The ~/.ExifTool_config file may also be used to define new tags. For more information, see the sample configuration file included with the ExifTool distribution.
The exiftool output can be organized based on these groups using the -g or -G option.
Family Group Names 0 (General Location) APP12, BMP, Canon, Composite, DICOM, EXIF, ExifTool, File, GPS, GeoTiff, ICC_Profile, ID3, IPTC, JFIF, Jpeg2000, Leaf, MIFF, MNG, MakerNotes, Meta, PDF, PICT, PNG, Pentax, Photoshop, PostScript, PrintIM, QuickTime, SigmaRaw, WAV, XMP 1 (Specific Location) APP12, BMP, Canon, CanonCustom, CanonRaw, Casio, Composite, DICOM, ExifIFD, ExifTool, File, FujiFilm, GPS, GeoTiff, GlobParamIFD, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-view, ICC_Profile, ID3, ID3v1, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, InteropIFD, JFIF, JVC, Jpeg2000, Kodak, KodakBordersIFD, KodakEffectsIFD, Leaf, LeafSubIFD, MIFF, MNG, MakerUnknown, MetaIFD, Minolta, Nikon, NikonCapture, NikonPreview, Olympus, PDF, PICT, PNG, Panasonic, Pentax, Photoshop, PostScript, PrintIM, QuickTime, Ricoh, SRF#, Sanyo, Sigma, SigmaRaw, Sony, SubIFD, Track#, WAV, XMP, XMP-PixelLive, XMP-aux, XMP-cc, XMP-crs, XMP-dc, XMP-dex, XMP-exif, XMP-iptcCore, XMP-pdf, XMP-photoshop, XMP-tiff, XMP-xmp, XMP-xmpBJ, XMP-xmpMM, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg 2 (Category) Audio, Author, Camera, ExifTool, Image, Location, Other, Printing, Time, Unknown
ExifTool writes five different types of meta information:
1) EXIF 2) GPS 3) IPTC 4) XMP 5) MakerNotesMany tag names are valid for more than one of these groups. If a specific group is not given then new information is added only to the highest priority group for which the tag name is valid (but the information is changed in all groups where the tag already existed). The priority of the groups is given by the list above. Information is added preferentially to the EXIF or GPS group (there are no common tag names between these two groups). If the tag isn't valid in either of these two groups, the information is added to the IPTC group, or finally the XMP group. The Makernotes group is special, see the note below.
Alternatively, information may be written to a specific group only, bypassing these priorities, by providing a group name for the tag. The section below gives the syntax rules for exiftool command-line arguments to do this. Any family 0 or 1 group name may be used when writing information, although not all groups are writable.
Note: Information in the MakerNotes may be edited, but not added or deleted. The reason for this is to avoid confusing manufacturer-specific software which may be very inflexible about the information it expects in the maker notes. The exception is the JpgFromRaw image, which may be added or deleted from Canon CRW files. This has been tested and doesn't cause problems for me with the Canon software or Photoshop, however it does confuse Capture One somewhat if this image is missing, so beware.
Tag values are writen rather than being extracted if the tag name ends with a '=' symbol. The '=' may be prefixed by '+', '-' or '<' to add a value, remove a value or set a value from file. The following table outlines the different write syntaxes:
Syntax Result -TAG= Deletes all occurrances of TAG -all= Deletes all meta information! -GROUP:TAG= Deletes TAG only in specified group -GROUP:all= Deletes all information in specified group -[GROUP:]TAG=VALUE Sets value of TAG (only in GROUP if specified) -[GROUP:]TAG+=VALUE Adds value to a tag list (only valid for List type tags) -[GROUP:]TAG-=VALUE Deletes TAG only if it has the specified value -[GROUP:]TAG<=FILE Sets tag value from contents of specified file
Note that quotes are required around VALUE if it contains spaces, and around the whole argument if the '<=' syntax is used (to prevent shell redirection).
This option may also be used to transfer information between different tags within a single image or between different images. See the exiftool application documentation for more details.
Or say you just forgot to set your camera clock back 1 hour at the end of daylight savings time in the fall:
exiftool -DateTimeOriginal+='5:10:2 10:48:0' DIR
The examples above change only the DateTimeOriginal tag, but any writable date or time tag can be shifted. See Image::ExifTool::Shift.pl for details about the syntax of the time shift string.
exiftool -DateTimeOriginal-=1 DIR
Note that some tag values may be returned as SCALAR references indicating binary data. The simple script above does not handle this case.
#!/usr/bin/perl -w use Image::ExifTool 'ImageInfo'; my $file = shift or die "Please specify filename"; my $info = ImageInfo($file); foreach (keys %$info) { print "$_ : $info->{$_}\n"; }
See the Image::ExifTool Documentation for more details.
Feel free to drop me a note if you find ExifTool useful, or if you have any comments, suggestions or questions. My e-mail address is in the README file.