exiftool_vendored 12.57.0 → 12.59.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 +39 -0
- data/bin/MANIFEST +3 -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/config_files/rotate_regions.config +1 -1
- data/bin/exiftool +76 -57
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
- data/bin/lib/Image/ExifTool/Canon.pm +26 -6
- data/bin/lib/Image/ExifTool/DJI.pm +28 -2
- data/bin/lib/Image/ExifTool/Exif.pm +24 -5
- data/bin/lib/Image/ExifTool/FlashPix.pm +28 -10
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
- data/bin/lib/Image/ExifTool/LIF.pm +10 -2
- data/bin/lib/Image/ExifTool/LNK.pm +5 -4
- data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +9 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +390 -114
- data/bin/lib/Image/ExifTool/Olympus.pm +87 -7
- data/bin/lib/Image/ExifTool/PNG.pm +15 -2
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
- data/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +16 -11
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +38 -6
- data/bin/lib/Image/ExifTool/README +8 -0
- data/bin/lib/Image/ExifTool/RIFF.pm +41 -13
- data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
- data/bin/lib/Image/ExifTool/Sony.pm +23 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4464 -4441
- data/bin/lib/Image/ExifTool/TagNames.pod +117 -36
- data/bin/lib/Image/ExifTool/Validate.pm +5 -5
- data/bin/lib/Image/ExifTool/WriteExif.pl +49 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +74 -14
- data/bin/lib/Image/ExifTool/XMP.pm +19 -4
- data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
- data/bin/lib/Image/ExifTool.pm +131 -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: a40c897eadb8162344b81eedcedd1888cfac911d28c1e5542f8e3d323af06768
|
4
|
+
data.tar.gz: a761f6527a380e369e78c34d2c061a9652ae63a3da0b7e70be1854fb8b728ee6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7edad248448957b58317b1621b2ae5b0c67276ee988ec1fb043403f299d6b0476ab7e79f4a15c345f9c655ff79518235350797b65b4b94cc5f80759511a44759
|
7
|
+
data.tar.gz: a4cec80d9709c1145958d4c6590349bdf6b0fc18f041e62962fc736a660d0243a29abc5c68e481198c9b42e584cedc7f1536081c0c59ffd57f90caac704fb0ad
|
data/bin/Changes
CHANGED
@@ -7,6 +7,45 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.50. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Mar. 28, 2023 - Version 12.59
|
11
|
+
|
12
|
+
- COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
|
13
|
+
to include all data from the SOS to the EOI (including the SOS marker but
|
14
|
+
not the EOI marker)
|
15
|
+
- Added new -fileNUM option to load tags from alternate files
|
16
|
+
- Added family 8 groups for accessing tags from alternate files
|
17
|
+
- Added new XMP-et:OriginalImageMD5 tag for storing ImageDataMD5 value
|
18
|
+
- Added verbose ImageDataMD5 message for JPEG files
|
19
|
+
- Added a new Nikon LensID (thanks Warren Hatch)
|
20
|
+
- Decode a new Olympus tag and improved decoding of another (thanks Herb)
|
21
|
+
- Decode a couple of new PanasonicRaw tags
|
22
|
+
- Decode image coordinates for a couple more VNT object types
|
23
|
+
- Enhanced ImageDataMD5 to also support MRW, CR3, PNG, MOV/MP4 and RIFF-based
|
24
|
+
files
|
25
|
+
- Improved verbose messages when deleting NikonApp trailer
|
26
|
+
- Patched to avoid structure warnings when copying tags from Nikon files
|
27
|
+
containing NKSC metadata
|
28
|
+
- Fixed %-C filename format code to work properly with the -fileOrder and
|
29
|
+
-progress options
|
30
|
+
- Fixed new ImageDataMD5 tag to work properly with PhaseOne IIQ files
|
31
|
+
- Fixed potential ValueConv warning when reading LIF files
|
32
|
+
- API Changes:
|
33
|
+
- Added SetAlternateFile method
|
34
|
+
|
35
|
+
Mar. 15, 2023 - Version 12.58
|
36
|
+
|
37
|
+
- Added Extra ImageDataMD5 tag to calculate MD5 of image data only
|
38
|
+
- Added support for reading DJI APP4 and APP7 JPEG segments
|
39
|
+
- Added a new SonyModelID value
|
40
|
+
- Decode a few new Nikon tags (thanks Warren Hatch)
|
41
|
+
- Downgraded "Windows file times" to a minor warning when Win32::API or
|
42
|
+
Win32API::File is not installed while reading metadata
|
43
|
+
- Patched possible runtime warning when API IgnoreTags option is used to
|
44
|
+
ignore FileType
|
45
|
+
- Fixed problem extracting NetName from Windows LNK files
|
46
|
+
- Fixed issue where the %C filename format code would increment the count on
|
47
|
+
an output filename collision, but it is supposed to count the input files
|
48
|
+
|
10
49
|
Feb. 23, 2023 - Version 12.57
|
11
50
|
|
12
51
|
- Added two new Nikon Z lenses (thanks LibRaw)
|
data/bin/MANIFEST
CHANGED
@@ -530,6 +530,8 @@ 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
|
533
535
|
t/ExifTool_4.out
|
534
536
|
t/ExifTool_5.out
|
535
537
|
t/ExifTool_6.out
|
@@ -903,6 +905,7 @@ t/Writer_56.out
|
|
903
905
|
t/Writer_58.out
|
904
906
|
t/Writer_59.out
|
905
907
|
t/Writer_6.out
|
908
|
+
t/Writer_60.out
|
906
909
|
t/Writer_7.out
|
907
910
|
t/Writer_9.out
|
908
911
|
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.59.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.59
|
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
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# RotateMPRegionCW90
|
18
18
|
# RotateMPRegionCW180
|
19
19
|
# RotateMPRegionCW270
|
20
|
-
# These tags will rotate
|
20
|
+
# These tags will rotate an MP Region clockwise 90, 180, or 270 degrees.
|
21
21
|
# Example:
|
22
22
|
# exiftool -config rotate_regions.config "-RegionInfoMP<RotateMPRegionCW90" FILE
|
23
23
|
#
|
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.59';
|
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 '')
|
@@ -255,17 +257,15 @@ my %optArgs = (
|
|
255
257
|
'-csvdelim' => 1,
|
256
258
|
'-d' => 1, '-dateformat' => 1,
|
257
259
|
'-D' => 0, # necessary to avoid matching lower-case equivalent
|
258
|
-
'-echo' => 1, '-
|
259
|
-
'-efile' => 1, '-
|
260
|
-
'-efile!' => 1, '-efile1!' => 1, '-efile2!' => 1, '-efile3!' => 1, '-efile4!' => 1,
|
260
|
+
'-echo' => 1, '-echo#' => 1,
|
261
|
+
'-efile' => 1, '-efile#' => 1, '-efile!' => 1, '-efile#!' => 1,
|
261
262
|
'-ext' => 1, '--ext' => 1, '-ext+' => 1, '--ext+' => 1,
|
262
263
|
'-extension' => 1, '--extension' => 1, '-extension+' => 1, '--extension+' => 1,
|
263
|
-
'-fileorder' => 1, '-
|
264
|
-
'-fileorder3' => 1, '-fileorder4' => 1, '-fileorder5' => 1,
|
264
|
+
'-fileorder' => 1, '-fileorder#' => 1,
|
265
265
|
'-geotag' => 1,
|
266
266
|
'-globaltimeshift' => 1,
|
267
267
|
'-i' => 1, '-ignore' => 1,
|
268
|
-
'-if' => 1, '-
|
268
|
+
'-if' => 1, '-if#' => 1,
|
269
269
|
'-lang' => 0, # (optional arg; cannot begin with "-")
|
270
270
|
'-listitem' => 1,
|
271
271
|
'-o' => 1, '-out' => 1,
|
@@ -452,6 +452,7 @@ undef %outComma;
|
|
452
452
|
undef %outTrailer;
|
453
453
|
undef %printFmt;
|
454
454
|
undef %preserveTime;
|
455
|
+
undef %seqFileDir;
|
455
456
|
undef %setTags;
|
456
457
|
undef %setTagsList;
|
457
458
|
undef %usedFileName;
|
@@ -538,7 +539,7 @@ $quiet = 0;
|
|
538
539
|
$rtnVal = 0;
|
539
540
|
$saveCount = 0;
|
540
541
|
$sectTrailer = '';
|
541
|
-
$
|
542
|
+
$seqFileDir = 0;
|
542
543
|
$seqFileNum = 0;
|
543
544
|
$tabFormat = 0;
|
544
545
|
$vout = \*STDOUT;
|
@@ -952,6 +953,10 @@ for (;;) {
|
|
952
953
|
$mt->Options(FastScan => (length $1 ? $1 : 1));
|
953
954
|
next;
|
954
955
|
}
|
956
|
+
if (/^(file\d+)$/i) {
|
957
|
+
$altFile{lc $1} = shift or Error("Expecting file name for -file option\n"), $badCmd=1, next;
|
958
|
+
next;
|
959
|
+
}
|
955
960
|
if (/^fileorder(\d*)$/i) {
|
956
961
|
push @fileOrder, shift if @ARGV;
|
957
962
|
my $num = $1 || 0;
|
@@ -1941,7 +1946,7 @@ Exit $rtnValApp; # all done
|
|
1941
1946
|
sub GetImageInfo($$)
|
1942
1947
|
{
|
1943
1948
|
my ($et, $orig) = @_;
|
1944
|
-
my (@foundTags, $info, $file, $ind);
|
1949
|
+
my (@foundTags, $info, $file, $ind, $g8);
|
1945
1950
|
|
1946
1951
|
# set window title for this file if necessary
|
1947
1952
|
if (defined $windowTitle and $progressCount >= $progressNext) {
|
@@ -1984,6 +1989,11 @@ sub GetImageInfo($$)
|
|
1984
1989
|
} else {
|
1985
1990
|
$file = $orig;
|
1986
1991
|
}
|
1992
|
+
# set alternate file names
|
1993
|
+
foreach $g8 (sort keys %altFile) {
|
1994
|
+
my $altName = FilenameSPrintf($altFile{$g8}, $orig);
|
1995
|
+
$et->SetAlternateFile($g8, $altName);
|
1996
|
+
}
|
1987
1997
|
|
1988
1998
|
my $pipe = $file;
|
1989
1999
|
if ($doUnzip) {
|
@@ -2082,6 +2092,8 @@ sub GetImageInfo($$)
|
|
2082
2092
|
return;
|
2083
2093
|
}
|
2084
2094
|
++$seqFileNum; # increment our file counter
|
2095
|
+
my ($dir) = Image::ExifTool::SplitFileName($orig);
|
2096
|
+
$seqFileDir = $seqFileDir{$dir} = ($seqFileDir{$dir} || 0) + 1;
|
2085
2097
|
|
2086
2098
|
my $lineCount = 0;
|
2087
2099
|
my ($fp, $outfile, $append);
|
@@ -3743,8 +3755,6 @@ sub ScanDir($$;$)
|
|
3743
3755
|
$utf8Name = 1;
|
3744
3756
|
}
|
3745
3757
|
return if $ignore{$dir};
|
3746
|
-
my $oldBase = $seqFileBase;
|
3747
|
-
$seqFileBase = $seqFileNum;
|
3748
3758
|
# use Win32::FindFile on Windows if available
|
3749
3759
|
# (ReadDir will croak if there is a wildcard, so check for this)
|
3750
3760
|
if ($^O eq 'MSWin32' and $dir !~ /[*?]/) {
|
@@ -3776,7 +3786,6 @@ sub ScanDir($$;$)
|
|
3776
3786
|
# use standard perl library routines to read directory
|
3777
3787
|
unless (opendir(DIR_HANDLE, $dir)) {
|
3778
3788
|
Warn("Error opening directory $dir\n");
|
3779
|
-
$seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
|
3780
3789
|
return;
|
3781
3790
|
}
|
3782
3791
|
@fileList = readdir(DIR_HANDLE);
|
@@ -3856,8 +3865,6 @@ sub ScanDir($$;$)
|
|
3856
3865
|
}
|
3857
3866
|
++$countDir;
|
3858
3867
|
$et->Options(CharsetFileName => $enc); # restore original setting
|
3859
|
-
# update sequential file base for parent directory
|
3860
|
-
$seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
|
3861
3868
|
}
|
3862
3869
|
|
3863
3870
|
#------------------------------------------------------------------------------
|
@@ -4153,16 +4160,15 @@ sub NextUnusedFilename($;$)
|
|
4153
4160
|
return $fmt unless $fmt =~ /%[-+]?\d*\.?\d*[lun]?[cC]/;
|
4154
4161
|
my %sep = ( '-' => '-', '+' => '_' );
|
4155
4162
|
my ($copy, $alpha) = (0, 'a');
|
4156
|
-
my $seq = $seqFileNum - 1;
|
4157
4163
|
for (;;) {
|
4158
4164
|
my ($filename, $pos) = ('', 0);
|
4159
4165
|
while ($fmt =~ /(%([-+]?)(\d*)(\.?)(\d*)([lun]?)([cC]))/g) {
|
4160
4166
|
$filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
|
4161
4167
|
$pos = pos($fmt);
|
4162
4168
|
my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7);
|
4163
|
-
my $
|
4169
|
+
my $seq;
|
4164
4170
|
if ($tok eq 'C') {
|
4165
|
-
$
|
4171
|
+
$seq = $wid + ($sign eq '-' ? $seqFileDir : $seqFileNum) - 1;
|
4166
4172
|
$wid = $wid2;
|
4167
4173
|
} else {
|
4168
4174
|
next unless $dec or $copy;
|
@@ -4171,13 +4177,13 @@ sub NextUnusedFilename($;$)
|
|
4171
4177
|
$filename .= $sep{$sign} if $sign;
|
4172
4178
|
}
|
4173
4179
|
if ($mod and $mod ne 'n') {
|
4174
|
-
my $a = $tok eq 'C' ? Num2Alpha($
|
4180
|
+
my $a = $tok eq 'C' ? Num2Alpha($seq) : $alpha;
|
4175
4181
|
my $str = ($wid and $wid > length $a) ? 'a' x ($wid - length($a)) : '';
|
4176
4182
|
$str .= $a;
|
4177
4183
|
$str = uc $str if $mod eq 'u';
|
4178
4184
|
$filename .= $str;
|
4179
4185
|
} else {
|
4180
|
-
my $c = $tok eq 'C' ?
|
4186
|
+
my $c = $tok eq 'C' ? $seq : $copy;
|
4181
4187
|
my $num = $c + ($mod ? 1 : 0);
|
4182
4188
|
$filename .= $wid ? sprintf("%.${wid}d",$num) : $num;
|
4183
4189
|
}
|
@@ -4192,7 +4198,6 @@ sub NextUnusedFilename($;$)
|
|
4192
4198
|
}
|
4193
4199
|
++$copy;
|
4194
4200
|
++$alpha;
|
4195
|
-
++$seq;
|
4196
4201
|
}
|
4197
4202
|
}
|
4198
4203
|
|
@@ -4398,9 +4403,13 @@ sub ReadStayOpen($)
|
|
4398
4403
|
undef $optArgs;
|
4399
4404
|
next unless $lastOpt eq '-stay_open' or $lastOpt eq '-@';
|
4400
4405
|
} else {
|
4401
|
-
$optArgs = $optArgs{$arg};
|
4402
4406
|
$lastOpt = lc $arg;
|
4403
|
-
$optArgs = $optArgs{$
|
4407
|
+
$optArgs = $optArgs{$arg};
|
4408
|
+
unless (defined $optArgs) {
|
4409
|
+
$optArgs = $optArgs{$lastOpt};
|
4410
|
+
# handle options with trailing numbers
|
4411
|
+
$optArgs = $optArgs{"$1#$2"} if not defined $optArgs and $lastOpt =~ /^(.*?)\d+(!?)$/;
|
4412
|
+
}
|
4404
4413
|
next unless $lastOpt =~ /^-execute\d*$/;
|
4405
4414
|
}
|
4406
4415
|
$processArgs = 1;
|
@@ -4745,6 +4754,7 @@ L<Advanced options|/Advanced options>
|
|
4745
4754
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
4746
4755
|
-efile[NUM][!] ERRFILE Save names of files with errors
|
4747
4756
|
-execute[NUM] Execute multiple commands on one line
|
4757
|
+
-fileNUM ALTFILE Load tags from alternate file
|
4748
4758
|
-list_dir List directories, not their contents
|
4749
4759
|
-srcfile FMT Process a different source file
|
4750
4760
|
-stay_open FLAG Keep reading -@ argfile even after EOF
|
@@ -4765,8 +4775,9 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames> for documentation on
|
|
4765
4775
|
available tag names. A tag name may include leading group names separated
|
4766
4776
|
by colons (eg. C<-EXIF:CreateDate>, or C<-Doc1:XMP:Creator>), and each group
|
4767
4777
|
name may be prefixed by a digit to specify family number (eg.
|
4768
|
-
C<-1IPTC:City>).
|
4769
|
-
family.
|
4778
|
+
C<-1IPTC:City>). (Note that the API SavePath and SaveFormat options must be
|
4779
|
+
used for the family 5 and 6 groups respectively to be available.) Use the
|
4780
|
+
B<-listg> option to list available group names by family.
|
4770
4781
|
|
4771
4782
|
A special tag name of C<All> may be used to indicate all meta information
|
4772
4783
|
(ie. B<-All>). This is particularly useful when a group name is specified
|
@@ -4774,10 +4785,11 @@ to extract all information in a group (but beware that unless the B<-a>
|
|
4774
4785
|
option is also used, some tags in the group may be suppressed by same-named
|
4775
4786
|
tags in other groups). The wildcard characters C<?> and C<*> may be used in
|
4776
4787
|
a tag name to match any single character and zero or more characters
|
4777
|
-
respectively.
|
4778
|
-
a group name of C<*> (or C<All>) may be used to extract all instances
|
4779
|
-
tag (as if B<-a> was used). Note that arguments containing wildcards
|
4780
|
-
be quoted on the command line of most systems to prevent shell
|
4788
|
+
respectively. These may not be used in a group name, with the exception
|
4789
|
+
that a group name of C<*> (or C<All>) may be used to extract all instances
|
4790
|
+
of a tag (as if B<-a> was used). Note that arguments containing wildcards
|
4791
|
+
must be quoted on the command line of most systems to prevent shell
|
4792
|
+
globbing.
|
4781
4793
|
|
4782
4794
|
A C<#> may be appended to the tag name to disable the print conversion on a
|
4783
4795
|
per-tag basis (see the B<-n> option). This may also be used when writing or
|
@@ -4856,8 +4868,8 @@ are removed if the containing group is deleted:
|
|
4856
4868
|
- Deleting EXIF only removes ExifIFD which also deletes
|
4857
4869
|
InteropIFD and MakerNotes.
|
4858
4870
|
|
4859
|
-
MOV/MP4
|
4860
|
-
- Deleting ItemList also deletes Keys tags
|
4871
|
+
MOV/MP4 Video:
|
4872
|
+
- Deleting ItemList also deletes Keys tags.
|
4861
4873
|
|
4862
4874
|
Notes:
|
4863
4875
|
|
@@ -5015,16 +5027,14 @@ for list-type tags and conditional replacements because each copy operation
|
|
5015
5027
|
on a tag overrides any previous operations. While this avoids duplicate
|
5016
5028
|
list items when copying groups of tags from a file containing redundant
|
5017
5029
|
information, it also prevents values of different tags from being copied
|
5018
|
-
into the same list when this is the intent.
|
5019
|
-
|
5020
|
-
|
5021
|
-
exiftool -addtagsfromfile @ '-subject<make' '-subject<model' ...
|
5030
|
+
into the same list when this is the intent. To accumulate values
|
5031
|
+
from different operations into the same list, add a C<+> after the initial
|
5032
|
+
C<-> of the argument. For example:
|
5022
5033
|
|
5023
|
-
|
5024
|
-
tag to prevent overriding earlier conditions.
|
5034
|
+
exiftool -tagsfromfile @ '-subject<make' '-+subject<model' ...
|
5025
5035
|
|
5026
|
-
|
5027
|
-
|
5036
|
+
Similarly, C<-+DSTTAG> must be used when conditionally replacing a tag to
|
5037
|
+
prevent overriding earlier conditions.
|
5028
5038
|
|
5029
5039
|
6) The B<-a> option (allow duplicate tags) is always in effect when copying
|
5030
5040
|
tags from I<SRCFILE>, but the highest priority tag is always copied last so
|
@@ -5304,15 +5314,15 @@ B<-csv>=I<CSVFILE> feature.
|
|
5304
5314
|
Organize output by tag group. I<NUM> specifies a group family number, and
|
5305
5315
|
may be 0 (general location), 1 (specific location), 2 (category), 3
|
5306
5316
|
(document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
|
5307
|
-
format)
|
5308
|
-
specified. May be combined with other options to add group
|
5309
|
-
output. Multiple families may be specified by separating them
|
5310
|
-
By default the resulting group name is simplified by removing
|
5311
|
-
C<Main:> and collapsing adjacent identical group names, but this
|
5312
|
-
avoided by placing a colon before the first family number (eg.
|
5313
|
-
Use the B<-listg> option to list group names for a specified
|
5314
|
-
API SavePath and SaveFormat options are automatically enabled
|
5315
|
-
respective family 5 or 6 group names are requested. See the
|
5317
|
+
format), 7 (tag ID) or 8 (file number). B<-g0> is assumed if a family
|
5318
|
+
number is not specified. May be combined with other options to add group
|
5319
|
+
names to the output. Multiple families may be specified by separating them
|
5320
|
+
with colons. By default the resulting group name is simplified by removing
|
5321
|
+
any leading C<Main:> and collapsing adjacent identical group names, but this
|
5322
|
+
can be avoided by placing a colon before the first family number (eg.
|
5323
|
+
B<-g:3:1>). Use the B<-listg> option to list group names for a specified
|
5324
|
+
family. The API SavePath and SaveFormat options are automatically enabled
|
5325
|
+
if the respective family 5 or 6 group names are requested. See the
|
5316
5326
|
L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
|
5317
5327
|
|
5318
5328
|
=item B<-G>[I<NUM>][:I<NUM>...] (B<-groupNames>)
|
@@ -5491,8 +5501,9 @@ which case the string is loaded from the contents of the file. Tag names in
|
|
5491
5501
|
the format file or string begin with a C<$> symbol and may contain leading
|
5492
5502
|
group names and/or a trailing C<#> (to disable print conversion). Case is
|
5493
5503
|
not significant. Braces C<{}> may be used around the tag name to separate
|
5494
|
-
it from subsequent text
|
5495
|
-
|
5504
|
+
it from subsequent text (and must be used if subsequent text begins with an
|
5505
|
+
alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
|
5506
|
+
to represent a C<$> symbol, and C<$/> for a newline.
|
5496
5507
|
|
5497
5508
|
Multiple B<-p> options may be used, each contributing a line (or more) of
|
5498
5509
|
text to the output. Lines beginning with C<#[HEAD]> and C<#[TAIL]> are
|
@@ -5519,7 +5530,7 @@ with this command:
|
|
5519
5530
|
|
5520
5531
|
produces output like this:
|
5521
5532
|
|
5522
|
-
-- Generated by ExifTool 12.
|
5533
|
+
-- Generated by ExifTool 12.59 --
|
5523
5534
|
File: a.jpg - 2003:10:31 15:44:19
|
5524
5535
|
(f/5.6, 1/60s, ISO 100)
|
5525
5536
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6410,12 +6421,12 @@ I<SHIFT> string. For example:
|
|
6410
6421
|
|
6411
6422
|
Add features from specified plug-in I<MODULE>. Currently, the MWG module is
|
6412
6423
|
the only plug-in module distributed with exiftool. This module adds
|
6413
|
-
read/write support for tags as recommended by the Metadata Working Group.
|
6414
|
-
|
6415
|
-
for any tag
|
6416
|
-
documentation|Image::ExifTool::TagNames/MWG Tags> for more
|
6417
|
-
that this option is not reversible, and remains in effect
|
6418
|
-
application terminates, even across the B<-execute> option.
|
6424
|
+
read/write support for tags as recommended by the Metadata Working Group. As
|
6425
|
+
a convenience, C<-use MWG> is assumed if the group name prefix starts with
|
6426
|
+
C<MWG:> exactly for any requested tag. See the
|
6427
|
+
L<MWG Tags documentation|Image::ExifTool::TagNames/MWG Tags> for more
|
6428
|
+
details. Note that this option is not reversible, and remains in effect
|
6429
|
+
until the application terminates, even across the B<-execute> option.
|
6419
6430
|
|
6420
6431
|
=back
|
6421
6432
|
|
@@ -6519,6 +6530,14 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
|
6519
6530
|
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
6520
6531
|
option no longer suppresses the output "{readyNUM}" message.
|
6521
6532
|
|
6533
|
+
=item B<-file>I<NUM> I<ALTFILE>
|
6534
|
+
|
6535
|
+
Read tags from an alternate source file. These tags are accessed via the
|
6536
|
+
family 8 group name (eg. C<File1:TAG>, C<File2:TAG>, etc). I<ALTFILE> may
|
6537
|
+
contain filename formatting codes %d, %f and %e. Among other things, this
|
6538
|
+
allows tags from different files to be compared and combined using the
|
6539
|
+
B<-if> and B<-p> options.
|
6540
|
+
|
6522
6541
|
=item B<-list_dir>
|
6523
6542
|
|
6524
6543
|
List directories themselves instead of their contents. This option
|
@@ -18,7 +18,7 @@ use vars qw($VERSION);
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
19
|
use Image::ExifTool::ID3;
|
20
20
|
|
21
|
-
$VERSION = '1.
|
21
|
+
$VERSION = '1.12';
|
22
22
|
|
23
23
|
# information for time/date-based tags (time zero is Jan 1, 1904)
|
24
24
|
my %timeInfo = (
|
@@ -203,7 +203,7 @@ sub ProcessAIFF($$)
|
|
203
203
|
return 1 if $fast3;
|
204
204
|
$tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main');
|
205
205
|
# modify FileType to indicate a multi-page document
|
206
|
-
$$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM';
|
206
|
+
$$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM' and $$et{VALUE}{FileType};
|
207
207
|
$type = 'DjVu';
|
208
208
|
} else {
|
209
209
|
return 0 unless $buff =~ /^FORM....(AIF(F|C))/s;
|
@@ -15,7 +15,7 @@ use strict;
|
|
15
15
|
use vars qw($VERSION);
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.07';
|
19
19
|
|
20
20
|
# APE metadata blocks
|
21
21
|
%Image::ExifTool::APE::Main = (
|
@@ -133,7 +133,7 @@ sub ProcessAPE($$)
|
|
133
133
|
|
134
134
|
# check APE signature and process audio information
|
135
135
|
# unless this is some other type of file
|
136
|
-
unless ($$et{
|
136
|
+
unless ($$et{FileType}) {
|
137
137
|
$raf->Read($buff, 32) == 32 or return 0;
|
138
138
|
$buff =~ /^(MAC |APETAGEX)/ or return 0;
|
139
139
|
$et->SetFileType();
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.52';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -184,7 +184,8 @@ gives the order of values for a serial data stream.
|
|
184
184
|
A B<Tag Name> is the handle by which the information is accessed in
|
185
185
|
ExifTool. In some instances, more than one name may correspond to a single
|
186
186
|
tag ID. In these cases, the actual name used depends on the context in
|
187
|
-
which the information is found.
|
187
|
+
which the information is found. Valid characters in a tag name are A-Z,
|
188
|
+
a-z, 0-9, hyphen (-) and underline (_). Case is not significant. A
|
188
189
|
question mark (C<?>) after a tag name indicates that the information is
|
189
190
|
either not understood, not verified, or not very useful -- these tags are
|
190
191
|
not extracted by ExifTool unless the L<Unknown|../ExifTool.html#Unknown> (-u) option is enabled. Be
|
@@ -1206,6 +1207,7 @@ TagID: foreach $tagID (@keys) {
|
|
1206
1207
|
$sepTable{$s} = $printConv;
|
1207
1208
|
# add PrintHex flag to PrintConv so we can check it later
|
1208
1209
|
$$printConv{PrintHex} = 1 if $$tagInfo{PrintHex};
|
1210
|
+
$$printConv{PrintInt} = 1 if $$tagInfo{PrintInt};
|
1209
1211
|
$$printConv{PrintString} = 1 if $$tagInfo{PrintString};
|
1210
1212
|
} else {
|
1211
1213
|
$caseInsensitive = 0;
|
@@ -1221,22 +1223,18 @@ TagID: foreach $tagID (@keys) {
|
|
1221
1223
|
next if $_ eq '' and $$printConv{$_} eq '';
|
1222
1224
|
$_ eq 'BITMASK' and $bits = $$printConv{$_}, next;
|
1223
1225
|
$_ eq 'OTHER' and next;
|
1224
|
-
my $index;
|
1225
|
-
if
|
1226
|
+
my $index = $_;
|
1227
|
+
$index =~ s/\.\d+$// if $$tagInfo{PrintInt};
|
1228
|
+
if (($$tagInfo{PrintHex} or $$printConv{BITMASK}) and $index =~ /^-?\d+$/) {
|
1226
1229
|
my $dig = $$tagInfo{PrintHex} || 1;
|
1227
|
-
if ($
|
1228
|
-
$index = sprintf('0x%.*x', $dig, $
|
1230
|
+
if ($index >= 0) {
|
1231
|
+
$index = sprintf('0x%.*x', $dig, $index);
|
1229
1232
|
} elsif ($format and $format =~ /int(16|32)/) {
|
1230
1233
|
# mask off unused bits of signed integer hex value
|
1231
1234
|
my $mask = { 16 => 0xffff, 32 => 0xffffffff }->{$1};
|
1232
|
-
$index = sprintf('0x%.*x', $dig, $
|
1233
|
-
} else {
|
1234
|
-
$index = $_;
|
1235
|
+
$index = sprintf('0x%.*x', $dig, $index & $mask);
|
1235
1236
|
}
|
1236
|
-
} elsif (/^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/
|
1237
|
-
$index = $_;
|
1238
|
-
} else {
|
1239
|
-
$index = $_;
|
1237
|
+
} elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
|
1240
1238
|
# translate unprintable values
|
1241
1239
|
if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
|
1242
1240
|
$index = qq{"$index"};
|
@@ -2210,7 +2208,7 @@ sub WriteTagNames($$)
|
|
2210
2208
|
my $wid = 0;
|
2211
2209
|
my @keys;
|
2212
2210
|
foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
|
2213
|
-
next if /^(Notes|PrintHex|PrintString|OTHER)$/;
|
2211
|
+
next if /^(Notes|PrintHex|PrintInt|PrintString|OTHER)$/;
|
2214
2212
|
$align = '' if $align and /[^\d]/;
|
2215
2213
|
my $w = length($_) + length($$printConv{$_});
|
2216
2214
|
$wid = $w if $wid < $w;
|
@@ -2238,6 +2236,7 @@ sub WriteTagNames($$)
|
|
2238
2236
|
if (defined $key) {
|
2239
2237
|
$index = $key;
|
2240
2238
|
$prt = '= ' . EscapeHTML($$printConv{$key});
|
2239
|
+
$index =~ s/\.\d+$// if $$printConv{PrintInt};
|
2241
2240
|
if ($$printConv{PrintHex}) {
|
2242
2241
|
$index =~ s/(\.\d+)$//; # remove decimal
|
2243
2242
|
$index = sprintf('0x%x',$index);
|