exiftool_vendored 12.57.0 → 12.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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);
|