Skip to content

Commit 518e9d2

Browse files
author
exiftool
committed
Update to 13.03
1 parent 2218b03 commit 518e9d2

44 files changed

Lines changed: 6530 additions & 5995 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Changes

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,25 @@ RSS feed: https://exiftool.org/rss.xml
77
Note: The most recent production release is Version 13.00. (Other versions are
88
considered development releases, and are not uploaded to MetaCPAN.)
99

10+
Nov. 12, 2024 - Version 13.03
11+
12+
- Added ability to include or exclude tags from CSV and JSON imports
13+
(-csv=CSVFILE and -json=JSONFILE) by adding -TAG or --TAG options
14+
- Added read/delete support for SEAL metadata in JPG, TIFF, XMP, PNG, WEBP,
15+
HEIC, PPM, MOV and MP4 files, and read support in PDF, MKV and WAV files
16+
- Added support for user-defined application extensions in GIF images
17+
- Added print conversion for QuickTime VideoFullRangeFlag
18+
- Apply API LimitLongValues option to hex field in -j output
19+
- Avoid extracting some large AES-encrypted data from PDF files for
20+
performance reasons unless the -m option is used (current limits are 100 kB
21+
for XMP and 10 kB for everything else)
22+
- Fixed WindowsLongPath option to support wide characters (thanks Frank B)
23+
- Fixed problem writing ICC_Profile to a GIF image which already had one
24+
- Fixed problem writing Apple:FocusDistanceRange
25+
- API Changes:
26+
- Enchanced GlobalTimeShift option to allow the base tag to be specified,
27+
otherwise use the first specified source date/time tag when copying tags
28+
1029
Nov. 5, 2024 - Version 13.02
1130

1231
- Enhanced -j -l output to add optional "fmt" and "hex" fields
@@ -20,11 +39,12 @@ Nov. 5, 2024 - Version 13.02
2039
- Patched to avoid using Encode module in Windows because it can hang if run
2140
from a working directory with a long path name
2241
- Patched to use -csv output if -j also used
23-
- Fixed problem setting FileCreateDate on MacOS Sequoia if the date/time
24-
contains a time zone
42+
- Fixed a few problems with the new WindowsLongPath option
43+
- Fixed problem setting FileCreateDate with Xcode 16 command line tools if the
44+
date/time contains a time zone
2545
- Fixed problem in -csv output when combined with -g
2646
- API Changes:
27-
- Added BinVal option
47+
- Added SaveBin option
2848

2949
Nov. 1, 2024 - Version 13.01
3050

META.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@
5050
}
5151
},
5252
"release_status" : "stable",
53-
"version" : "13.02"
53+
"version" : "13.03"
5454
}

META.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ recommends:
3131
Time::HiRes: '0'
3232
requires:
3333
perl: '5.004'
34-
version: '13.02'
34+
version: '13.03'

README

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109109
terminal window to extract and run ExifTool:
110110

111111
cd ~/Desktop
112-
gzip -dc Image-ExifTool-13.02.tar.gz | tar -xf -
113-
cd Image-ExifTool-13.02
112+
gzip -dc Image-ExifTool-13.03.tar.gz | tar -xf -
113+
cd Image-ExifTool-13.03
114114
./exiftool t/images/ExifTool.jpg
115115

116116
Note: These commands extract meta information from one of the test images.

exiftool

Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use strict;
1111
use warnings;
1212
require 5.004;
1313

14-
my $version = '13.02';
14+
my $version = '13.03';
1515

1616
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
1717
my $exePath;
@@ -1777,7 +1777,7 @@ if ($isWriting) {
17771777
if (defined $diff) {
17781778
Error "Can't use -diff option when writing tags\n";
17791779
next;
1780-
} elsif (@tags and not $outOpt) {
1780+
} elsif (@tags and not $outOpt and not $csv) {
17811781
my ($tg, $s) = @tags > 1 ? ("$tags[0] ...", 's') : ($tags[0], '');
17821782
Warn "Ignored superfluous tag name$s or invalid option$s: -$tg\n";
17831783
}
@@ -2852,8 +2852,16 @@ TAG: foreach $tag (@foundTags) {
28522852
$$val{num} = $num if defined $num and not IsEqual($num, $$val{val});
28532853
}
28542854
my $ex = $$et{TAG_EXTRA}{$tag};
2855-
$$val{'hex'} = join ' ', unpack '(H2)*', $$ex{BinVal} if defined $$ex{BinVal};
28562855
$$val{'fmt'} = $$ex{G6} if defined $$ex{G6};
2856+
if (defined $$ex{BinVal}) {
2857+
my $max = ($$et{OPTIONS}{LimitLongValues} - 5) / 3;
2858+
if ($max >= 0 and length($$ex{BinVal}) > int($max)) {
2859+
$max = int $max;
2860+
$$val{'hex'} = join ' ', unpack("(H2)$max", $$ex{BinVal}), '[...]';
2861+
} else {
2862+
$$val{'hex'} = join ' ', unpack '(H2)*', $$ex{BinVal};
2863+
}
2864+
}
28572865
}
28582866
}
28592867
FormatJSON($fp, $val, $ind, $quote);
@@ -3148,9 +3156,15 @@ sub SetImageInfo($$$)
31483156
next unless defined $absPath and $csvInfo = $database{$absPath};
31493157
}
31503158
$found = 1;
3151-
$verbose and print $vout "Setting new values from $csv database\n";
3159+
if ($verbose) {
3160+
print $vout "Setting new values from $csv database\n";
3161+
print $vout 'Including tags: ',join(' ',@tags),"\n" if @tags;
3162+
print $vout 'Excluding tags: ',join(' ',@exclude),"\n" if @exclude;
3163+
}
31523164
foreach $tag (OrderedKeys($csvInfo)) {
31533165
next if $tag =~ /\b(SourceFile|Directory|FileName)$/i; # don't write these
3166+
next if @tags and not grep /^\Q$tag\E$/i, @tags;
3167+
next if @exclude and grep /^\Q$tag\E$/i, @exclude;
31543168
my ($rtn, $wrn) = $et->SetNewValue($tag, $$csvInfo{$tag},
31553169
Protected => 1, AddValue => $csvAdd,
31563170
ProtectSaved => $csvSaveCount);
@@ -5143,7 +5157,7 @@ information. Use the B<-s> option to see the tag names instead.
51435157
=item B<-->I<TAG>
51445158
51455159
Exclude specified tag from extracted information. Same as the B<-x> option.
5146-
Group names and wildcards are permitted as described above for B<-TAG>.
5160+
Group names and wildcards are permitted as described above for B<->I<TAG>.
51475161
Once excluded from the output, a tag may not be re-included by a subsequent
51485162
option. May also be used following a B<-tagsFromFile> option to exclude
51495163
tags from being copied (when redirecting to another tag, it is the source
@@ -5574,7 +5588,9 @@ deleted). Also, FileName and Directory columns are ignored if they exist
55745588
all other columns are imported. To force a tag to be deleted, use the B<-f>
55755589
option and set the value to "-" in the CSV file (or to the MissingTagValue
55765590
if this API option was used). Multiple databases may be imported in a
5577-
single command.
5591+
single command. Specific tags may be imported from the database by adding
5592+
B<->I<TAG> options to the command, or excluded with B<-->I<TAG> options.
5593+
If no tags are specified, then all except FileName and Directory are used.
55785594
55795595
When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
55805596
tag headings. If the B<-a> option is used to allow duplicate tag names, the
@@ -5710,19 +5726,28 @@ preserved with the B<-struct> option (this also causes all list-type XMP
57105726
tags to be output as JSON arrays, otherwise single-item lists would be
57115727
output as simple strings). The B<-a> option is implied when B<-json> is
57125728
used, but entries with identical JSON names are suppressed in the output.
5713-
(B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
5714-
the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
5715-
"id" fields. Adding B<-l> adds a "desc" field, and a "num" field if the
5716-
numerical value is different from the converted "val", and "fmt" and "hex"
5717-
fields for EXIF metadata if the API SaveFormat and SaveBin options are set
5718-
respectively. The B<-b> option may be added to output binary data, encoded
5719-
in base64 if necessary (indicated by ASCII "base64:" as the first 7 bytes of
5720-
the value), and B<-t> may be added to include tag table information (see
5721-
B<-t> for details). The JSON output is UTF-8 regardless of any B<-L> or
5722-
B<-charset> option setting, but the UTF-8 validation is disabled if a
5723-
character set other than UTF-8 is specified. Note that ExifTool quotes JSON
5724-
values only if they don't look like numbers (regardless of the original
5725-
storage format or the relevant metadata specification).
5729+
(B<-G4> may be used to ensure that all tags have unique JSON names.)
5730+
5731+
Adding the B<-D> or B<-H> option changes tag values to JSON objects with
5732+
"val" and "id" fields. Adding B<-l> adds a "desc" field, and a "num" field
5733+
if the numerical value is different from the converted "val", and "fmt" and
5734+
"hex" fields for EXIF metadata if the API SaveFormat and SaveBin options are
5735+
set respectively, and the length of the "hex" output is limited by the API
5736+
LimitLongValues setting. The B<-b> option may be added to output binary
5737+
data, encoded in base64 if necessary (indicated by ASCII "base64:" as the
5738+
first 7 bytes of the value), and B<-t> may be added to include tag table
5739+
information (see B<-t> for details). The JSON output is UTF-8 regardless of
5740+
any B<-L> or B<-charset> option setting, but the UTF-8 validation is
5741+
disabled if a character set other than UTF-8 is specified.
5742+
5743+
Note that ExifTool quotes JSON values only if they don't look like numbers
5744+
(regardless of the original storage format or the relevant metadata
5745+
specification). This may be a problem when reading the JSON via a strongly
5746+
typed language. However, the API StructFormat option may be set to "JSONQ"
5747+
to force quoting of numbers. As well, the B<-sep> option may be used to
5748+
convert arrays into strings. For example:
5749+
5750+
exiftool -j -api structformat=jsonq -sep ", " ...
57265751
57275752
If I<JSONFILE> is specified, the file is imported and the tag definitions
57285753
from the file are used to set tag values on a per-file basis. The special
@@ -5735,7 +5760,9 @@ that options exporting JSON objects instead of simple values are not
57355760
compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
57365761
or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
57375762
tag names in the input JSON file may be suffixed with a C<#> to disable
5738-
print conversion.
5763+
print conversion. Specific tags may be imported from the database by adding
5764+
B<->I<TAG> options to the command, or excluded with B<-->I<TAG> options.
5765+
If no tags are specified, then all except FileName and Directory are used.
57395766
57405767
Unlike CSV import, empty values are not ignored, and will cause an empty
57415768
value to be written if supported by the specific metadata type. Tags are
@@ -5876,7 +5903,7 @@ with this command:
58765903
58775904
produces output like this:
58785905
5879-
-- Generated by ExifTool 13.02 --
5906+
-- Generated by ExifTool 13.03 --
58805907
File: a.jpg - 2003:10:31 15:44:19
58815908
(f/5.6, 1/60s, ISO 100)
58825909
File: b.jpg - 2006:05:23 11:57:38
@@ -6305,7 +6332,8 @@ ExifTool will not scan to the end of a JPEG image to check for an AFCP or
63056332
PreviewImage trailer, or past the first comment in GIF images or the
63066333
audio/video data in WAV/AVI files to search for additional metadata. These
63076334
speed benefits are small when reading images directly from disk, but can be
6308-
substantial if piping images through a network connection. For more
6335+
substantial if piping images through a network connection. Also bypasses
6336+
CRC validation when writing PNG images which can be very slow. For more
63096337
substantial speed benefits, B<-fast2> also causes exiftool to avoid
63106338
extracting any EXIF MakerNote information, and to stop processing at the
63116339
IDAT chunk of PNG images and the mdat atom of QuickTime-format files (but
@@ -6716,8 +6744,9 @@ names, even if they begin with a dash (C<->).
67166744
Compare metadata in I<FILE> with I<FILE2>. The I<FILE2> name may include
67176745
filename formatting codes (see the B<-w> option). All extracted tags from
67186746
the files are compared, but the extracted tags may be controlled by adding
6719-
B<-TAG> or B<--TAG> options. For example, below is a command to compare all
6720-
the same-named files in two different directories, ignoring the System tags:
6747+
B<->I<TAG> or B<-->I<TAG> options. For example, below is a command to
6748+
compare all the same-named files in two different directories, ignoring the
6749+
System tags:
67216750
67226751
exiftool DIR1 -diff DIR2/%f.%e --system:all
67236752

html/ExifTool.html

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -748,9 +748,18 @@ <h2>Description</h2>
748748
<tr><td valign=top align=right><i>(anything else)</i></td><td>=&nbsp;knots</td></tr>
749749
</table></td><td align=center>undef</td></tr>
750750
<tr id="GlobalTimeShift"><td>GlobalTimeShift</td>
751-
<td>Time shift to apply to all extracted
752-
date/time PrintConv values. Does not affect ValueConv values.</td>
753-
<td align=center>Date/time shift string with leading '-' for negative shifts<br>(see <a href="Shift.html">Image::ExifTool::Shift.pl</a>)</td>
751+
<td>Time shift to apply to all extracted date/time PrintConv values. Does
752+
not affect ValueConv values. When specifying a number of months and/or years
753+
to shift, the tag for the starting date should be specified so the number of
754+
days can be determined unambiguously. If not specified, or the specified tag
755+
isn't available, the shift is calculated based on the first shifted tag.</td>
756+
<td>Date/time shift string with leading '-' for negative shifts
757+
(see <a href="Shift.html">Image::ExifTool::Shift.pl</a>), or tag name
758+
with optional group prefix followed by '+' or '-' then shift string. eg)<br>
759+
<code>'createdate-1:0:0&nbsp;0:0:0'</code> - shift back by the length of the year
760+
before the CreateDate value<br><code>'xmp:createdate+0:2:0&nbsp;0'</code> -
761+
shift forward by the length of the 2 months after XMP:CreateDate
762+
</td>
754763
<td align=center>undef</td></tr>
755764
<tr id="GroupNum"><td>Group#</td><td>Extract tags only for specified groups in family #
756765
(Group0 assumed if # not given).</td>
@@ -2330,7 +2339,7 @@ <h2>Description</h2>
23302339
PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2,
23312340
RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
23322341
Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
2333-
SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
2342+
SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
23342343
Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
23352344
Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
23362345
XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GContainer,

html/ExifTool.pdf

1012 Bytes
Binary file not shown.

html/Shift.pdf

0 Bytes
Binary file not shown.

html/TagNames/EXIF.html

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4144,105 +4144,111 @@ <h2 class=top>EXIF Tags</h2>
41444144
<td class=c>IFD0</td>
41454145
<td><span class=s><span class=n>(values range from 1=slow to 4=fast)</span></span></td></tr>
41464146
<tr>
4147+
<td title='0xcea1 = 52897'>0xcea1</td>
4148+
<td>SEAL</td>
4149+
<td class=c>string</td>
4150+
<td class=c>IFD0</td>
4151+
<td>--&gt; <a href='XMP.html#SEAL'>XMP SEAL Tags</a></td></tr>
4152+
<tr class=b>
41474153
<td title='0xea1c = 59932'>0xea1c</td>
41484154
<td>Padding</td>
41494155
<td class=c title=' ! = Unsafe'>undef!</td>
41504156
<td class=c>ExifIFD</td>
41514157
<td>&nbsp;</td></tr>
4152-
<tr class=b>
4158+
<tr>
41534159
<td title='0xea1d = 59933'>0xea1d</td>
41544160
<td>OffsetSchema</td>
41554161
<td class=c title=' ! = Unsafe'>int32s!</td>
41564162
<td class=c>ExifIFD</td>
41574163
<td><span class=s><span class=n>(Microsoft&#39;s ill-conceived maker note offset difference)</span></span></td></tr>
4158-
<tr>
4164+
<tr class=b>
41594165
<td title='0xfde8 = 65000'>0xfde8</td>
41604166
<td>OwnerName</td>
41614167
<td class=c title=' / = Avoid'>string/</td>
41624168
<td class=c>ExifIFD</td>
41634169
<td><span class=s><span class=n>(tags 0xfde8-0xfdea and 0xfe4c-0xfe58 are generated by Photoshop Camera RAW.
41644170
Some names are the same as other EXIF tags, but ExifTool will avoid writing
41654171
these unless they already exist in the file)</span></span></td></tr>
4166-
<tr class=b>
4172+
<tr>
41674173
<td title='0xfde9 = 65001'>0xfde9</td>
41684174
<td>SerialNumber</td>
41694175
<td class=c title=' / = Avoid'>string/</td>
41704176
<td class=c>ExifIFD</td>
41714177
<td>&nbsp;</td></tr>
4172-
<tr>
4178+
<tr class=b>
41734179
<td title='0xfdea = 65002'>0xfdea</td>
41744180
<td>Lens</td>
41754181
<td class=c title=' / = Avoid'>string/</td>
41764182
<td class=c>ExifIFD</td>
41774183
<td>&nbsp;</td></tr>
4178-
<tr class=b>
4184+
<tr>
41794185
<td title='0xfe00 = 65024'>0xfe00</td>
41804186
<td>KDC_IFD</td>
41814187
<td class=c>-</td>
41824188
<td class=c>-</td>
41834189
<td>--&gt; <a href='Kodak.html#KDC_IFD'>Kodak KDC_IFD Tags</a>
41844190
<br><span class='n s'>(used in some Kodak KDC images)</span></td></tr>
4185-
<tr>
4191+
<tr class=b>
41864192
<td title='0xfe4c = 65100'>0xfe4c</td>
41874193
<td>RawFile</td>
41884194
<td class=c title=' / = Avoid'>string/</td>
41894195
<td class=c>ExifIFD</td>
41904196
<td>&nbsp;</td></tr>
4191-
<tr class=b>
4197+
<tr>
41924198
<td title='0xfe4d = 65101'>0xfe4d</td>
41934199
<td>Converter</td>
41944200
<td class=c title=' / = Avoid'>string/</td>
41954201
<td class=c>ExifIFD</td>
41964202
<td>&nbsp;</td></tr>
4197-
<tr>
4203+
<tr class=b>
41984204
<td title='0xfe4e = 65102'>0xfe4e</td>
41994205
<td>WhiteBalance</td>
42004206
<td class=c title=' / = Avoid'>string/</td>
42014207
<td class=c>ExifIFD</td>
42024208
<td>&nbsp;</td></tr>
4203-
<tr class=b>
4209+
<tr>
42044210
<td title='0xfe51 = 65105'>0xfe51</td>
42054211
<td>Exposure</td>
42064212
<td class=c title=' / = Avoid'>string/</td>
42074213
<td class=c>ExifIFD</td>
42084214
<td>&nbsp;</td></tr>
4209-
<tr>
4215+
<tr class=b>
42104216
<td title='0xfe52 = 65106'>0xfe52</td>
42114217
<td>Shadows</td>
42124218
<td class=c title=' / = Avoid'>string/</td>
42134219
<td class=c>ExifIFD</td>
42144220
<td>&nbsp;</td></tr>
4215-
<tr class=b>
4221+
<tr>
42164222
<td title='0xfe53 = 65107'>0xfe53</td>
42174223
<td>Brightness</td>
42184224
<td class=c title=' / = Avoid'>string/</td>
42194225
<td class=c>ExifIFD</td>
42204226
<td>&nbsp;</td></tr>
4221-
<tr>
4227+
<tr class=b>
42224228
<td title='0xfe54 = 65108'>0xfe54</td>
42234229
<td>Contrast</td>
42244230
<td class=c title=' / = Avoid'>string/</td>
42254231
<td class=c>ExifIFD</td>
42264232
<td>&nbsp;</td></tr>
4227-
<tr class=b>
4233+
<tr>
42284234
<td title='0xfe55 = 65109'>0xfe55</td>
42294235
<td>Saturation</td>
42304236
<td class=c title=' / = Avoid'>string/</td>
42314237
<td class=c>ExifIFD</td>
42324238
<td>&nbsp;</td></tr>
4233-
<tr>
4239+
<tr class=b>
42344240
<td title='0xfe56 = 65110'>0xfe56</td>
42354241
<td>Sharpness</td>
42364242
<td class=c title=' / = Avoid'>string/</td>
42374243
<td class=c>ExifIFD</td>
42384244
<td>&nbsp;</td></tr>
4239-
<tr class=b>
4245+
<tr>
42404246
<td title='0xfe57 = 65111'>0xfe57</td>
42414247
<td>Smoothness</td>
42424248
<td class=c title=' / = Avoid'>string/</td>
42434249
<td class=c>ExifIFD</td>
42444250
<td>&nbsp;</td></tr>
4245-
<tr>
4251+
<tr class=b>
42464252
<td title='0xfe58 = 65112'>0xfe58</td>
42474253
<td>MoireFilter</td>
42484254
<td class=c title=' / = Avoid'>string/</td>
@@ -4374,7 +4380,7 @@ <h2><a name='Flash'>EXIF Flash Values</a></h2>
43744380

43754381
<hr>
43764382
(This document generated automatically by Image::ExifTool::BuildTagLookup)
4377-
<br><i>Last revised Oct 24, 2024</i>
4383+
<br><i>Last revised Nov 10, 2024</i>
43784384
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
43794385
</body>
43804386
</html>

html/TagNames/GIF.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ <h2><a name='Screen'>GIF Screen Tags</a></h2>
190190

191191
<hr>
192192
(This document generated automatically by Image::ExifTool::BuildTagLookup)
193-
<br><i>Last revised Nov 19, 2023</i>
193+
<br><i>Last revised Nov 8, 2024</i>
194194
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
195195
</body>
196196
</html>

0 commit comments

Comments
 (0)