ExifTool Version 5 is Here! |
ExifTool versions 4.00 through 4.95 were an evolution of the writing abilities, but with the release of version 5 all of the major planned writing features have now been incorporated!
ExifTool is a Perl module with an included command-line application for reading and writing meta information in image files. It reads EXIF, GPS, IPTC, XMP, GeoTIFF, ICC Profile and Photoshop IRB meta information from JPG, JP2, TIFF, GIF, CRW, THM, CR2, MRW, NEF, PEF, ORF and DNG images. ExifTool also extracts information from the maker notes of many digital cameras by various manufacturers including Canon, Casio, FujiFilm, Kodak, Minolta/Konica-Minolta, Nikon, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Ricoh, Sanyo and Sigma/Foveon.
ExifTool writes EXIF, GPS, IPTC, XMP and MakerNotes meta information to JPEG, TIFF, GIF, CRW, THM, CR2, NEF, PEF and DNG images. When writing, ExifTool preserves the original file by adding "_original" to the file name. You should 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.
Drop me a note if you find ExifTool useful, or if you have any comments or suggestions. My e-mail address is in the README file. Thanks.
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.
Windows users: You will need to install a Perl interpreter to run ExifTool (a good, free Perl interpreter for Windows can be obtained from activeperl.com). Everyone else: Don't worry, you already have everything you need.
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 output can be organized based on these groups using the -g or -G option.
Family Group Names 0 (General Location) Composite, EXIF, ExifTool, File, GPS, GeoTiff, ICC_Profile, IPTC, MakerNotes, Photoshop, PrintIM, XMP 1 (Detailed Location) Canon, CanonCustom, CanonRaw, Casio, Composite, ExifIFD, ExifTool, File, FujiFilm, GPS, GeoTiff, GlobParamIFD, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-view, ICC_Profile, IFD0, IFD1, IPTC, InteropIFD, Jpeg2000, Kodak, KodakBordersIFD, KodakEffectsIFD, MakerUnknown, Minolta, Nikon, NikonPreview, Olympus, Panasonic, Pentax, Photoshop, PrintIM, Ricoh, Sanyo, Sigma, Sony, SubIFD, XMP, XMP-aux, XMP-crs, XMP-dc, XMP-exif, XMP-iptcCore, XMP-pdf, XMP-photoshop, XMP-tiff, XMP-xmp, XMP-xmpBJ, XMP-xmpMM, XMP-xmpRights 2 (Category) 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).
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.