exiftool_vendored 12.58.0 → 12.60.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +45 -3
- data/bin/MANIFEST +4 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -0
- data/bin/exiftool +81 -54
- data/bin/lib/Image/ExifTool/CanonRaw.pm +5 -1
- data/bin/lib/Image/ExifTool/DJI.pm +2 -2
- data/bin/lib/Image/ExifTool/Exif.pm +53 -14
- data/bin/lib/Image/ExifTool/FlashPix.pm +27 -9
- data/bin/lib/Image/ExifTool/FujiFilm.pm +6 -3
- data/bin/lib/Image/ExifTool/Geotag.pm +30 -7
- data/bin/lib/Image/ExifTool/LIF.pm +10 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +6 -5
- data/bin/lib/Image/ExifTool/Olympus.pm +87 -7
- data/bin/lib/Image/ExifTool/PNG.pm +10 -2
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +21 -6
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +37 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +32 -11
- data/bin/lib/Image/ExifTool/Ricoh.pm +2 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +9 -3
- data/bin/lib/Image/ExifTool/Sony.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +2254 -2246
- data/bin/lib/Image/ExifTool/TagNames.pod +45 -25
- data/bin/lib/Image/ExifTool/WriteExif.pl +13 -13
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +111 -19
- data/bin/lib/Image/ExifTool/XMP.pm +18 -3
- data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
- data/bin/lib/Image/ExifTool.pm +109 -17
- data/bin/lib/Image/ExifTool.pod +40 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 348c2538720f815bacaf609de1dbb52e18f720663ea9e2194c92941b5f80d5ec
|
4
|
+
data.tar.gz: 124c2564aba8f2fa4af8b2bf16c654b46624031b38bb64e6ed4ed3d6cc2fb596
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b32a41d3586f914940ddfc5f3f947c323006f627ce6c3a050f34111817776e26a4a5e535f56194998ec38aa5ea7f27e350388fbbd517dd366d826324c9dcd9e4
|
7
|
+
data.tar.gz: 9b3d5cb69b62ca6bc41293ec56110e0c28e7510561303bc8c3f3eb0ee01500f5c92dd8ff60ace8f53c54c64a28c92cfa84b0fbebe7238cb190872433c62f4103
|
data/bin/Changes
CHANGED
@@ -4,9 +4,51 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 12.
|
7
|
+
Note: The most recent production release is Version 12.60. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Apr. 5, 2023 - Version 12.60 (production release)
|
11
|
+
|
12
|
+
- Added a new Sony FileFormat value
|
13
|
+
- Added Validate warning about duplicate EXIF
|
14
|
+
- Added ability to edit JPEG APP1 EXIF segment with incorrect header
|
15
|
+
- Decode a few new Sony ARW tags
|
16
|
+
- Improved -htmldump of non-EXIF-based maker notes
|
17
|
+
- Enhanced -geotag from CSV files support GPSSpeed (with variable units),
|
18
|
+
"bearing" for GPSTrack, and GPSDateTime in format "dd.mm.YYYY HH:MM:SS"
|
19
|
+
- Enhanced ImageDataMD5 to also support CRW, RAF, X3F and AVIF images
|
20
|
+
- Enhanced -efile option to also record updated and created file names
|
21
|
+
- Family 8 group names may now also be used in Composite Require/Desire tags
|
22
|
+
- Fixed handling of undefined tags in -if conditions to conform with
|
23
|
+
documentation and match -p and -tagsFromFile behaviour when -m or -f option
|
24
|
+
is used
|
25
|
+
- Fixed problem where setting the Geotime value didn't work when using an
|
26
|
+
advanced-formatting expression containing a greater-than symbol (>)
|
27
|
+
|
28
|
+
Mar. 28, 2023 - Version 12.59
|
29
|
+
|
30
|
+
- COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
|
31
|
+
to include all data from the SOS to the EOI (including the SOS marker but
|
32
|
+
not the EOI marker)
|
33
|
+
- Added new -fileNUM option to load tags from alternate files
|
34
|
+
- Added family 8 groups for accessing tags from alternate files
|
35
|
+
- Added new XMP-et:OriginalImageMD5 tag for storing ImageDataMD5 value
|
36
|
+
- Added verbose ImageDataMD5 message for JPEG files
|
37
|
+
- Added a new Nikon LensID (thanks Warren Hatch)
|
38
|
+
- Decode a new Olympus tag and improved decoding of another (thanks Herb)
|
39
|
+
- Decode a couple of new PanasonicRaw tags
|
40
|
+
- Decode image coordinates for a couple more VNT object types
|
41
|
+
- Enhanced ImageDataMD5 to also support MRW, CR3, IIQ, PNG, MOV/MP4 and some
|
42
|
+
RIFF-based files
|
43
|
+
- Improved verbose messages when deleting NikonApp trailer
|
44
|
+
- Patched to avoid structure warnings when copying tags from Nikon files
|
45
|
+
containing NKSC metadata
|
46
|
+
- Fixed %-C filename format code to work properly with the -fileOrder and
|
47
|
+
-progress options
|
48
|
+
- Fixed potential ValueConv warning when reading LIF files
|
49
|
+
- API Changes:
|
50
|
+
- Added SetAlternateFile method
|
51
|
+
|
10
52
|
Mar. 15, 2023 - Version 12.58
|
11
53
|
|
12
54
|
- Added Extra ImageDataMD5 tag to calculate MD5 of image data only
|
@@ -171,6 +213,8 @@ Nov. 8, 2022 - Version 12.50 (production release)
|
|
171
213
|
- Fixed inconsistent year and time zone for Kenwood dashcam timed GPS in MP4
|
172
214
|
videos
|
173
215
|
|
216
|
+
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
217
|
+
|
174
218
|
Oct. 19, 2022 - Version 12.49
|
175
219
|
|
176
220
|
- Added read support for Windows ICO and CUR files
|
@@ -338,8 +382,6 @@ June 1, 2022 - Version 12.42 (production release)
|
|
338
382
|
- Patched to allow PDF Encrypt object to be "null"
|
339
383
|
- Fixed bug reading ICC_Profile 'meta' tags
|
340
384
|
|
341
|
-
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
342
|
-
|
343
385
|
Apr. 7, 2022 - Version 12.41
|
344
386
|
|
345
387
|
- Added support for "OM SYSTEM" maker notes
|
data/bin/MANIFEST
CHANGED
@@ -530,6 +530,9 @@ t/ExifTool_3.out
|
|
530
530
|
t/ExifTool_30.out
|
531
531
|
t/ExifTool_31.out
|
532
532
|
t/ExifTool_32.out
|
533
|
+
t/ExifTool_33.out
|
534
|
+
t/ExifTool_34.out
|
535
|
+
t/ExifTool_35.out
|
533
536
|
t/ExifTool_4.out
|
534
537
|
t/ExifTool_5.out
|
535
538
|
t/ExifTool_6.out
|
@@ -903,6 +906,7 @@ t/Writer_56.out
|
|
903
906
|
t/Writer_58.out
|
904
907
|
t/Writer_59.out
|
905
908
|
t/Writer_6.out
|
909
|
+
t/Writer_60.out
|
906
910
|
t/Writer_7.out
|
907
911
|
t/Writer_9.out
|
908
912
|
t/XMP.t
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
107
107
|
terminal window to extract and run ExifTool:
|
108
108
|
|
109
109
|
cd ~/Desktop
|
110
|
-
gzip -dc Image-ExifTool-12.
|
111
|
-
cd Image-ExifTool-12.
|
110
|
+
gzip -dc Image-ExifTool-12.60.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.60
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
113
113
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
@@ -210,6 +210,7 @@
|
|
210
210
|
3 => 'PreviewImage (1)',
|
211
211
|
# (if the MPF has 2 previews, MPImage3 could be the larger one)
|
212
212
|
4 => 'MPImage3',
|
213
|
+
5 => 'JpgFromRaw2', # in RW2 from newer Panasonic models
|
213
214
|
},
|
214
215
|
# ValueConv may also be a code reference
|
215
216
|
# Inputs: 0) reference to list of values, 1) ExifTool object
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '12.
|
14
|
+
my $version = '12.60';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
BEGIN {
|
@@ -103,6 +103,7 @@ my @newValues; # list of new tag values to set
|
|
103
103
|
my @requestTags; # tags to request (for -p or -if option arguments)
|
104
104
|
my @srcFmt; # source file name format strings
|
105
105
|
my @tags; # list of tags to extract
|
106
|
+
my %altFile; # alternate files to extract information (keyed by lower-case family 8 group)
|
106
107
|
my %appended; # list of files appended to
|
107
108
|
my %countLink; # count hard and symbolic links made
|
108
109
|
my %created; # list of files we created
|
@@ -115,6 +116,7 @@ my %outComma; # flag that output text file needs a comma
|
|
115
116
|
my %outTrailer; # trailer for output text file
|
116
117
|
my %preserveTime; # preserved timestamps for files
|
117
118
|
my %printFmt; # the contents of the print format file
|
119
|
+
my %seqFileDir; # file sequence number in each directory
|
118
120
|
my %setTags; # hash of list references for tags to set from files
|
119
121
|
my %setTagsList; # list of other tag lists for multiple -tagsFromFile from the same file
|
120
122
|
my %usedFileName; # lookup for file names we already used in TestName feature
|
@@ -196,7 +198,7 @@ my $saveCount; # count the number of times we will/did call SaveNewValues()
|
|
196
198
|
my $scanWritable; # flag to process only writable file types
|
197
199
|
my $sectHeader; # current section header for -p option
|
198
200
|
my $sectTrailer; # section trailer for -p option
|
199
|
-
my $
|
201
|
+
my $seqFileDir; # sequential file number used for %-C
|
200
202
|
my $seqFileNum; # sequential file number used for %C
|
201
203
|
my $setCharset; # character set setting ('default' if not set and -csv -b used)
|
202
204
|
my $showGroup; # number of group to show (may be zero or '')
|
@@ -450,6 +452,7 @@ undef %outComma;
|
|
450
452
|
undef %outTrailer;
|
451
453
|
undef %printFmt;
|
452
454
|
undef %preserveTime;
|
455
|
+
undef %seqFileDir;
|
453
456
|
undef %setTags;
|
454
457
|
undef %setTagsList;
|
455
458
|
undef %usedFileName;
|
@@ -536,7 +539,7 @@ $quiet = 0;
|
|
536
539
|
$rtnVal = 0;
|
537
540
|
$saveCount = 0;
|
538
541
|
$sectTrailer = '';
|
539
|
-
$
|
542
|
+
$seqFileDir = 0;
|
540
543
|
$seqFileNum = 0;
|
541
544
|
$tabFormat = 0;
|
542
545
|
$vout = \*STDOUT;
|
@@ -919,12 +922,14 @@ for (;;) {
|
|
919
922
|
$mt->Options(Duplicates => 1);
|
920
923
|
next;
|
921
924
|
}
|
922
|
-
if (/^efile(\d)?(!)?$/i) {
|
925
|
+
if (/^efile(\d+)?(!)?$/i) {
|
923
926
|
my $arg = shift;
|
924
927
|
defined $arg or Error("Expecting file name for -$_ option\n"), $badCmd=1, next;
|
925
|
-
$efile[0] = $arg if not $1 or $1 & 0x01
|
926
|
-
$efile[1] = $arg if $1 and $1 & 0x02;
|
927
|
-
$efile[2] = $arg if $1 and $1 & 0x04;
|
928
|
+
$efile[0] = $arg if not $1 or $1 & 0x01;# error
|
929
|
+
$efile[1] = $arg if $1 and $1 & 0x02; # unchanged
|
930
|
+
$efile[2] = $arg if $1 and $1 & 0x04; # failed -if condition
|
931
|
+
$efile[3] = $arg if $1 and $1 & 0x08; # updated
|
932
|
+
$efile[4] = $arg if $1 and $1 & 0x016; # created
|
928
933
|
unlink $arg if $2;
|
929
934
|
next;
|
930
935
|
}
|
@@ -950,6 +955,10 @@ for (;;) {
|
|
950
955
|
$mt->Options(FastScan => (length $1 ? $1 : 1));
|
951
956
|
next;
|
952
957
|
}
|
958
|
+
if (/^(file\d+)$/i) {
|
959
|
+
$altFile{lc $1} = shift or Error("Expecting file name for -file option\n"), $badCmd=1, next;
|
960
|
+
next;
|
961
|
+
}
|
953
962
|
if (/^fileorder(\d*)$/i) {
|
954
963
|
push @fileOrder, shift if @ARGV;
|
955
964
|
my $num = $1 || 0;
|
@@ -1330,7 +1339,7 @@ for (;;) {
|
|
1330
1339
|
AddSetTagsFile($setTagsFile = '@') if not $setTagsFile and /(<|>)/;
|
1331
1340
|
if ($setTagsFile) {
|
1332
1341
|
push @{$setTags{$setTagsFile}}, $_;
|
1333
|
-
if (
|
1342
|
+
if ($1 eq '>') {
|
1334
1343
|
$useMWG = 1 if /^(.*>\s*)?mwg:/si;
|
1335
1344
|
if (/\b(filename|directory|testname)#?$/i) {
|
1336
1345
|
$doSetFileName = 1;
|
@@ -1939,7 +1948,7 @@ Exit $rtnValApp; # all done
|
|
1939
1948
|
sub GetImageInfo($$)
|
1940
1949
|
{
|
1941
1950
|
my ($et, $orig) = @_;
|
1942
|
-
my (@foundTags, $info, $file, $ind);
|
1951
|
+
my (@foundTags, $info, $file, $ind, $g8);
|
1943
1952
|
|
1944
1953
|
# set window title for this file if necessary
|
1945
1954
|
if (defined $windowTitle and $progressCount >= $progressNext) {
|
@@ -1982,6 +1991,11 @@ sub GetImageInfo($$)
|
|
1982
1991
|
} else {
|
1983
1992
|
$file = $orig;
|
1984
1993
|
}
|
1994
|
+
# set alternate file names
|
1995
|
+
foreach $g8 (sort keys %altFile) {
|
1996
|
+
my $altName = FilenameSPrintf($altFile{$g8}, $orig);
|
1997
|
+
$et->SetAlternateFile($g8, $altName);
|
1998
|
+
}
|
1985
1999
|
|
1986
2000
|
my $pipe = $file;
|
1987
2001
|
if ($doUnzip) {
|
@@ -2071,6 +2085,7 @@ sub GetImageInfo($$)
|
|
2071
2085
|
push @delFiles, $original;
|
2072
2086
|
} elsif ($et->Rename($original, $file)) {
|
2073
2087
|
$verbose and print $vout "Restored from $original\n";
|
2088
|
+
EFile($file, 3);
|
2074
2089
|
++$countGoodWr;
|
2075
2090
|
} else {
|
2076
2091
|
Warn "Error renaming $original\n";
|
@@ -2080,6 +2095,8 @@ sub GetImageInfo($$)
|
|
2080
2095
|
return;
|
2081
2096
|
}
|
2082
2097
|
++$seqFileNum; # increment our file counter
|
2098
|
+
my ($dir) = Image::ExifTool::SplitFileName($orig);
|
2099
|
+
$seqFileDir = $seqFileDir{$dir} = ($seqFileDir{$dir} || 0) + 1;
|
2083
2100
|
|
2084
2101
|
my $lineCount = 0;
|
2085
2102
|
my ($fp, $outfile, $append);
|
@@ -3028,6 +3045,7 @@ sub SetImageInfo($$$)
|
|
3028
3045
|
$r3 = $et->SetSystemTags($file);
|
3029
3046
|
}
|
3030
3047
|
if ($r0 > 0 or $r1 > 0 or $r2 > 0 or $r3 > 0) {
|
3048
|
+
EFile($infile, 3);
|
3031
3049
|
++$countGoodWr;
|
3032
3050
|
} elsif ($r0 < 0 or $r1 < 0 or $r2 < 0 or $r3 < 0) {
|
3033
3051
|
EFile($infile);
|
@@ -3142,6 +3160,7 @@ sub SetImageInfo($$$)
|
|
3142
3160
|
$preserveTime{$file} = [ $aTime, $mTime, $cTime ];
|
3143
3161
|
}
|
3144
3162
|
}
|
3163
|
+
EFile($infile, 3);
|
3145
3164
|
++$countGoodWr;
|
3146
3165
|
} else {
|
3147
3166
|
close(NEW_FILE);
|
@@ -3157,6 +3176,7 @@ sub SetImageInfo($$$)
|
|
3157
3176
|
# simply rename temporary file to replace original
|
3158
3177
|
# (if we didn't already rename it to add "_original")
|
3159
3178
|
} elsif ($et->Rename($tmpFile, $dstFile)) {
|
3179
|
+
EFile($infile, 3);
|
3160
3180
|
++$countGoodWr;
|
3161
3181
|
} else {
|
3162
3182
|
my $newFile = $tmpFile;
|
@@ -3174,21 +3194,26 @@ sub SetImageInfo($$$)
|
|
3174
3194
|
# (don't delete tmp file now because it is all we have left)
|
3175
3195
|
++$countBadWr;
|
3176
3196
|
} else {
|
3197
|
+
EFile($infile, 3);
|
3177
3198
|
++$countGoodWr;
|
3178
3199
|
}
|
3179
3200
|
}
|
3180
3201
|
} elsif ($overwriteOrig) {
|
3181
3202
|
# erase original file
|
3203
|
+
EFile($infile, 3);
|
3182
3204
|
$et->Unlink($file) or Warn "Error erasing original $file\n";
|
3183
3205
|
++$countGoodWr;
|
3184
3206
|
} else {
|
3207
|
+
EFile($infile, 4);
|
3185
3208
|
++$countGoodCr;
|
3186
3209
|
}
|
3187
3210
|
} else {
|
3188
3211
|
# this file was created from scratch, not edited
|
3212
|
+
EFile($infile, 4);
|
3189
3213
|
++$countGoodCr;
|
3190
3214
|
}
|
3191
3215
|
} else {
|
3216
|
+
EFile($infile, 3);
|
3192
3217
|
++$countGoodWr;
|
3193
3218
|
}
|
3194
3219
|
} elsif ($success) {
|
@@ -3741,8 +3766,6 @@ sub ScanDir($$;$)
|
|
3741
3766
|
$utf8Name = 1;
|
3742
3767
|
}
|
3743
3768
|
return if $ignore{$dir};
|
3744
|
-
my $oldBase = $seqFileBase;
|
3745
|
-
$seqFileBase = $seqFileNum;
|
3746
3769
|
# use Win32::FindFile on Windows if available
|
3747
3770
|
# (ReadDir will croak if there is a wildcard, so check for this)
|
3748
3771
|
if ($^O eq 'MSWin32' and $dir !~ /[*?]/) {
|
@@ -3774,7 +3797,6 @@ sub ScanDir($$;$)
|
|
3774
3797
|
# use standard perl library routines to read directory
|
3775
3798
|
unless (opendir(DIR_HANDLE, $dir)) {
|
3776
3799
|
Warn("Error opening directory $dir\n");
|
3777
|
-
$seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
|
3778
3800
|
return;
|
3779
3801
|
}
|
3780
3802
|
@fileList = readdir(DIR_HANDLE);
|
@@ -3854,8 +3876,6 @@ sub ScanDir($$;$)
|
|
3854
3876
|
}
|
3855
3877
|
++$countDir;
|
3856
3878
|
$et->Options(CharsetFileName => $enc); # restore original setting
|
3857
|
-
# update sequential file base for parent directory
|
3858
|
-
$seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
|
3859
3879
|
}
|
3860
3880
|
|
3861
3881
|
#------------------------------------------------------------------------------
|
@@ -4151,16 +4171,15 @@ sub NextUnusedFilename($;$)
|
|
4151
4171
|
return $fmt unless $fmt =~ /%[-+]?\d*\.?\d*[lun]?[cC]/;
|
4152
4172
|
my %sep = ( '-' => '-', '+' => '_' );
|
4153
4173
|
my ($copy, $alpha) = (0, 'a');
|
4154
|
-
my $seq = $seqFileNum - 1;
|
4155
4174
|
for (;;) {
|
4156
4175
|
my ($filename, $pos) = ('', 0);
|
4157
4176
|
while ($fmt =~ /(%([-+]?)(\d*)(\.?)(\d*)([lun]?)([cC]))/g) {
|
4158
4177
|
$filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
|
4159
4178
|
$pos = pos($fmt);
|
4160
4179
|
my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7);
|
4161
|
-
my $
|
4180
|
+
my $seq;
|
4162
4181
|
if ($tok eq 'C') {
|
4163
|
-
$
|
4182
|
+
$seq = $wid + ($sign eq '-' ? $seqFileDir : $seqFileNum) - 1;
|
4164
4183
|
$wid = $wid2;
|
4165
4184
|
} else {
|
4166
4185
|
next unless $dec or $copy;
|
@@ -4169,13 +4188,13 @@ sub NextUnusedFilename($;$)
|
|
4169
4188
|
$filename .= $sep{$sign} if $sign;
|
4170
4189
|
}
|
4171
4190
|
if ($mod and $mod ne 'n') {
|
4172
|
-
my $a = $tok eq 'C' ? Num2Alpha($
|
4191
|
+
my $a = $tok eq 'C' ? Num2Alpha($seq) : $alpha;
|
4173
4192
|
my $str = ($wid and $wid > length $a) ? 'a' x ($wid - length($a)) : '';
|
4174
4193
|
$str .= $a;
|
4175
4194
|
$str = uc $str if $mod eq 'u';
|
4176
4195
|
$filename .= $str;
|
4177
4196
|
} else {
|
4178
|
-
my $c = $tok eq 'C' ?
|
4197
|
+
my $c = $tok eq 'C' ? $seq : $copy;
|
4179
4198
|
my $num = $c + ($mod ? 1 : 0);
|
4180
4199
|
$filename .= $wid ? sprintf("%.${wid}d",$num) : $num;
|
4181
4200
|
}
|
@@ -4431,7 +4450,7 @@ sub ReadStayOpen($)
|
|
4431
4450
|
|
4432
4451
|
#------------------------------------------------------------------------------
|
4433
4452
|
# Add new entry to -efile output file
|
4434
|
-
# Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed)
|
4453
|
+
# Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed, 3=updated, 4=created)
|
4435
4454
|
sub EFile($$)
|
4436
4455
|
{
|
4437
4456
|
my $entry = shift;
|
@@ -4746,6 +4765,7 @@ L<Advanced options|/Advanced options>
|
|
4746
4765
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
4747
4766
|
-efile[NUM][!] ERRFILE Save names of files with errors
|
4748
4767
|
-execute[NUM] Execute multiple commands on one line
|
4768
|
+
-fileNUM ALTFILE Load tags from alternate file
|
4749
4769
|
-list_dir List directories, not their contents
|
4750
4770
|
-srcfile FMT Process a different source file
|
4751
4771
|
-stay_open FLAG Keep reading -@ argfile even after EOF
|
@@ -5018,16 +5038,14 @@ for list-type tags and conditional replacements because each copy operation
|
|
5018
5038
|
on a tag overrides any previous operations. While this avoids duplicate
|
5019
5039
|
list items when copying groups of tags from a file containing redundant
|
5020
5040
|
information, it also prevents values of different tags from being copied
|
5021
|
-
into the same list when this is the intent.
|
5022
|
-
|
5041
|
+
into the same list when this is the intent. To accumulate values
|
5042
|
+
from different operations into the same list, add a C<+> after the initial
|
5043
|
+
C<-> of the argument. For example:
|
5023
5044
|
|
5024
|
-
exiftool -
|
5045
|
+
exiftool -tagsfromfile @ '-subject<make' '-+subject<model' ...
|
5025
5046
|
|
5026
|
-
Similarly,
|
5027
|
-
|
5028
|
-
|
5029
|
-
Other than these differences, the B<-tagsFromFile> and B<-addTagsFromFile>
|
5030
|
-
options are equivalent.
|
5047
|
+
Similarly, C<-+DSTTAG> must be used when conditionally replacing a tag to
|
5048
|
+
prevent overriding earlier conditions.
|
5031
5049
|
|
5032
5050
|
6) The B<-a> option (allow duplicate tags) is always in effect when copying
|
5033
5051
|
tags from I<SRCFILE>, but the highest priority tag is always copied last so
|
@@ -5294,12 +5312,12 @@ escaped. The inverse conversion is applied when writing tags.
|
|
5294
5312
|
|
5295
5313
|
=item B<-f> (B<-forcePrint>)
|
5296
5314
|
|
5297
|
-
Force printing of tags even if
|
5298
|
-
|
5299
|
-
|
5300
|
-
|
5301
|
-
MissingTagValue option.
|
5302
|
-
B<-listx> output, or to allow tags to be deleted when writing with the
|
5315
|
+
Force printing of tags even if they don't exist. This option applies to
|
5316
|
+
tags specified on the command line, or with the B<-p>, B<-if> or
|
5317
|
+
B<-tagsFromFile> options. When B<-f> is used, the value of any missing tag
|
5318
|
+
is set to a dash (C<->) by default, but this may be configured via the API
|
5319
|
+
MissingTagValue option. B<-f> is also used to add a 'flags' attribute to
|
5320
|
+
the B<-listx> output, or to allow tags to be deleted when writing with the
|
5303
5321
|
B<-csv>=I<CSVFILE> feature.
|
5304
5322
|
|
5305
5323
|
=item B<-g>[I<NUM>][:I<NUM>...] (B<-groupHeadings>)
|
@@ -5307,15 +5325,15 @@ B<-csv>=I<CSVFILE> feature.
|
|
5307
5325
|
Organize output by tag group. I<NUM> specifies a group family number, and
|
5308
5326
|
may be 0 (general location), 1 (specific location), 2 (category), 3
|
5309
5327
|
(document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
|
5310
|
-
format)
|
5311
|
-
specified. May be combined with other options to add group
|
5312
|
-
output. Multiple families may be specified by separating them
|
5313
|
-
By default the resulting group name is simplified by removing
|
5314
|
-
C<Main:> and collapsing adjacent identical group names, but this
|
5315
|
-
avoided by placing a colon before the first family number (eg.
|
5316
|
-
Use the B<-listg> option to list group names for a specified
|
5317
|
-
API SavePath and SaveFormat options are automatically enabled
|
5318
|
-
respective family 5 or 6 group names are requested. See the
|
5328
|
+
format), 7 (tag ID) or 8 (file number). B<-g0> is assumed if a family
|
5329
|
+
number is not specified. May be combined with other options to add group
|
5330
|
+
names to the output. Multiple families may be specified by separating them
|
5331
|
+
with colons. By default the resulting group name is simplified by removing
|
5332
|
+
any leading C<Main:> and collapsing adjacent identical group names, but this
|
5333
|
+
can be avoided by placing a colon before the first family number (eg.
|
5334
|
+
B<-g:3:1>). Use the B<-listg> option to list group names for a specified
|
5335
|
+
family. The API SavePath and SaveFormat options are automatically enabled
|
5336
|
+
if the respective family 5 or 6 group names are requested. See the
|
5319
5337
|
L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
|
5320
5338
|
|
5321
5339
|
=item B<-G>[I<NUM>][:I<NUM>...] (B<-groupNames>)
|
@@ -5523,7 +5541,7 @@ with this command:
|
|
5523
5541
|
|
5524
5542
|
produces output like this:
|
5525
5543
|
|
5526
|
-
-- Generated by ExifTool 12.
|
5544
|
+
-- Generated by ExifTool 12.60 --
|
5527
5545
|
File: a.jpg - 2003:10:31 15:44:19
|
5528
5546
|
(f/5.6, 1/60s, ISO 100)
|
5529
5547
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6414,12 +6432,12 @@ I<SHIFT> string. For example:
|
|
6414
6432
|
|
6415
6433
|
Add features from specified plug-in I<MODULE>. Currently, the MWG module is
|
6416
6434
|
the only plug-in module distributed with exiftool. This module adds
|
6417
|
-
read/write support for tags as recommended by the Metadata Working Group.
|
6418
|
-
|
6419
|
-
for any tag
|
6420
|
-
documentation|Image::ExifTool::TagNames/MWG Tags> for more
|
6421
|
-
that this option is not reversible, and remains in effect
|
6422
|
-
application terminates, even across the B<-execute> option.
|
6435
|
+
read/write support for tags as recommended by the Metadata Working Group. As
|
6436
|
+
a convenience, C<-use MWG> is assumed if the group name prefix starts with
|
6437
|
+
C<MWG:> exactly for any requested tag. See the
|
6438
|
+
L<MWG Tags documentation|Image::ExifTool::TagNames/MWG Tags> for more
|
6439
|
+
details. Note that this option is not reversible, and remains in effect
|
6440
|
+
until the application terminates, even across the B<-execute> option.
|
6423
6441
|
|
6424
6442
|
=back
|
6425
6443
|
|
@@ -6505,10 +6523,11 @@ exit status of the command (see L</EXIT STATUS>).
|
|
6505
6523
|
|
6506
6524
|
Save the names of files giving errors (I<NUM> missing or 1), files that were
|
6507
6525
|
unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
|
6508
|
-
|
6509
|
-
|
6510
|
-
|
6511
|
-
I<ERRFILE>
|
6526
|
+
files that were updated (I<NUM> is 8), files that were created (I<NUM> is
|
6527
|
+
16), or any combination thereof by summing I<NUM> (eg. B<-efile3> is the
|
6528
|
+
same has having both B<-efile> and B<-efile2> options with the same
|
6529
|
+
I<ERRFILE>). By default, file names are appended to any existing I<ERRFILE>,
|
6530
|
+
but I<ERRFILE> is overwritten if an exclamation point is added to the option
|
6512
6531
|
(eg. B<-efile!>). Saves the name of the file specified by the B<-srcfile>
|
6513
6532
|
option if applicable.
|
6514
6533
|
|
@@ -6523,6 +6542,14 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
|
6523
6542
|
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
6524
6543
|
option no longer suppresses the output "{readyNUM}" message.
|
6525
6544
|
|
6545
|
+
=item B<-file>I<NUM> I<ALTFILE>
|
6546
|
+
|
6547
|
+
Read tags from an alternate source file. These tags are accessed via the
|
6548
|
+
family 8 group name (eg. C<File1:TAG> for the B<-file1> option, C<File2:TAG>
|
6549
|
+
for B<-file2>, etc). I<ALTFILE> may contain filename formatting codes %d,
|
6550
|
+
%f and %e. Among other things, this allows tags from different files to be
|
6551
|
+
compared and combined using the B<-if> and B<-p> options.
|
6552
|
+
|
6526
6553
|
=item B<-list_dir>
|
6527
6554
|
|
6528
6555
|
List directories themselves instead of their contents. This option
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
21
21
|
use Image::ExifTool::Exif;
|
22
22
|
use Image::ExifTool::Canon;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.60';
|
25
25
|
|
26
26
|
sub WriteCRW($$);
|
27
27
|
sub ProcessCanonRaw($$$);
|
@@ -698,6 +698,10 @@ sub ProcessCanonRaw($$$)
|
|
698
698
|
$format ne 'string' and not $subdir;
|
699
699
|
} else {
|
700
700
|
$valueDataPos = $ptr;
|
701
|
+
# do MD5 of image data if requested
|
702
|
+
if ($$et{ImageDataMD5} and $tagID == 0x2005) {
|
703
|
+
$raf->Seek($ptr, 0) and $et->ImageDataMD5($raf, $size, 'raw');
|
704
|
+
}
|
701
705
|
if ($size <= 512 or ($verbose > 2 and $size <= 65536)
|
702
706
|
or ($tagInfo and ($$tagInfo{SubDirectory}
|
703
707
|
or grep(/^$$tagInfo{Name}$/i, $et->GetRequestedTags()) )))
|
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::XMP;
|
17
17
|
use Image::ExifTool::GPS;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.08';
|
20
20
|
|
21
21
|
sub ProcessDJIInfo($$$);
|
22
22
|
|
@@ -104,7 +104,7 @@ my %convFloat2 = (
|
|
104
104
|
0x00 => { Name => 'AmbientTemperature', Format => 'float', PrintConv => 'sprintf("%.1f C",$val)' }, # (NC)
|
105
105
|
0x04 => { Name => 'ObjectDistance', Format => 'float', PrintConv => 'sprintf("%.1f m",$val)' },
|
106
106
|
0x08 => { Name => 'Emissivity', Format => 'float', PrintConv => 'sprintf("%.2f",$val)' },
|
107
|
-
0x0c => { Name => 'RelativeHumidity', Format => 'float', PrintConv => 'sprintf("%g
|
107
|
+
0x0c => { Name => 'RelativeHumidity', Format => 'float', PrintConv => 'sprintf("%g %%",$val*100)' },
|
108
108
|
0x10 => { Name => 'ReflectedTemperature',Format => 'float', PrintConv => 'sprintf("%.1f C",$val)' },
|
109
109
|
0x65 => { Name => 'IDString', Format => 'string[16]' }, # (NC)
|
110
110
|
);
|