exiftool_vendored 12.33.0 → 12.37.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 +66 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +65 -37
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -2
- data/bin/lib/Image/ExifTool/Canon.pm +156 -10
- data/bin/lib/Image/ExifTool/Charset.pm +2 -0
- data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- data/bin/lib/Image/ExifTool/Exif.pm +13 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GPS.pm +14 -10
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
- data/bin/lib/Image/ExifTool/Nikon.pm +992 -18
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
- data/bin/lib/Image/ExifTool/PDF.pm +5 -3
- data/bin/lib/Image/ExifTool/PNG.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +17 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- data/bin/lib/Image/ExifTool/README +4 -0
- data/bin/lib/Image/ExifTool/Sony.pm +29 -11
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +6437 -5843
- data/bin/lib/Image/ExifTool/TagNames.pod +1292 -46
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
- data/bin/lib/Image/ExifTool/Writer.pl +50 -5
- data/bin/lib/Image/ExifTool/XMP.pm +119 -30
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
- data/bin/lib/Image/ExifTool.pm +71 -8
- data/bin/lib/Image/ExifTool.pod +9 -1
- 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: 76b6a0d2fdfef75ff151b28b383281cd0e5cbff7b324c7529b5972eea00fa2ab
|
|
4
|
+
data.tar.gz: 15f2d5ff22bb9eebdbe7e843d61c8e60ae3cc17d50d212c59e05411baa221937
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '05955adc090e482158e1c5e55f4aa6205434c9433e8b5369c45f4c030f59088e8efe5e91df54cf6cd44f973ad845e8436a958948ca2baa25bc1aea371a311d74'
|
|
7
|
+
data.tar.gz: 7a6c12e5f45dcd7efed082469de08ddb6e4eb21596f73f3c6abde5f6faf5318be5fe53e0f6aa6a88391f9e088d68c06682e042cd94f3f4f08656a6a2d76fa404
|
data/bin/Changes
CHANGED
|
@@ -7,6 +7,69 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Dec. 8, 2021 - Version 12.37
|
|
11
|
+
|
|
12
|
+
- Decode timed GPS from Vantrue S1 dashcam MP4 videos
|
|
13
|
+
- Decode ColorData tags for the Canon EOS R3 (thanks LibRaw)
|
|
14
|
+
- Decode more makernotes tags for Nikon Z cameras (thanks Warren Hatch)
|
|
15
|
+
- Extract TransparentColor from GIF images
|
|
16
|
+
- Improved parsing of input time values for GPSTimeStamp to properly handle a
|
|
17
|
+
"." separator
|
|
18
|
+
- Improved warning when incorrectly using "
|
|
19
|
+
|
|
20
|
+
Nov. 16, 2021 - Version 12.36
|
|
21
|
+
|
|
22
|
+
- IMPORTANT: Fixed bug introduced in 12.35 which corrupted JPEG 2000 images
|
|
23
|
+
when removing all metadata with -all=
|
|
24
|
+
- Added feature to bypass processing of specified XMP namespaces and
|
|
25
|
+
properties (to improve performance in cases where the XMP suffers from
|
|
26
|
+
Adobe-editing bloat)
|
|
27
|
+
- Added a number of new XMP tags used by Lightroom 11.0
|
|
28
|
+
- Decode a number of new Nikon tags (thanks Warren Hatch)
|
|
29
|
+
- Made the Composite GPSPosition tag writable
|
|
30
|
+
- Fixed erroneous "Skipped unknown bytes after JPEG SOS" warning
|
|
31
|
+
- Fixed group for new writable Jpeg2000 color tags in -listx output
|
|
32
|
+
- Fixed problem finding files in Windows when using wildcards in file name and
|
|
33
|
+
a drive letter with no slash
|
|
34
|
+
|
|
35
|
+
Nov. 11, 2021 - Version 12.35
|
|
36
|
+
|
|
37
|
+
- Added ability to write ICC_Profile (and other color specifications) to
|
|
38
|
+
Jpeg2000 images
|
|
39
|
+
- Added %o code to -W option format string
|
|
40
|
+
- Added %f code to -d option for fractional seconds
|
|
41
|
+
- Added a couple of new Sony LensType values (thanks Jos Roost)
|
|
42
|
+
- Added a new CanonModelID (thanks Norbert Wasser)
|
|
43
|
+
- Added a new Nikon LensID
|
|
44
|
+
- Decode more Nikon MakerNotes tags for some new models (thanks Warren Hatch)
|
|
45
|
+
- Extract ThumbnailImage from some DJI drone videos
|
|
46
|
+
- Enhanced -ee option to extract metadata from all frames in a SEQ file
|
|
47
|
+
- Patched to avoid possible "Use of uninitialized value" runtime warning
|
|
48
|
+
- Fixed a couple of misspelt new ICC_Profile tag names (thanks Herb)
|
|
49
|
+
- Fixed problem generating the correct file extension when extracting
|
|
50
|
+
OriginalRawImage from a DNG file using the -W option with the %s format code
|
|
51
|
+
- Fixed bug introduced in 11.91 where exiftool couldn't find its libraries
|
|
52
|
+
when run via a soft link. Also changed to look for config file in the link
|
|
53
|
+
target directory instead of the directory of the link itself
|
|
54
|
+
|
|
55
|
+
Oct. 27, 2021 - Version 12.34
|
|
56
|
+
|
|
57
|
+
- Added support for ICC.2:2019 (Profile version 5.0.0 - iccMAX) color profiles
|
|
58
|
+
- Added ability to detect/delete a Windows Zone.Identifier alternate data
|
|
59
|
+
stream (ADS) via the new ZoneIdentifier tag (thanks Alex Xu)
|
|
60
|
+
- Added support for the Sony ILCE-7M4 (thanks Jos Roost)
|
|
61
|
+
- Added a new Sony lens (thanks LibRaw and Jos Roost)
|
|
62
|
+
- Added a new SonyModelID (thanks LibRaw)
|
|
63
|
+
- Added a new Canon RF lens (thanks Norbert Wasser)
|
|
64
|
+
- Improved handling of some SVG files
|
|
65
|
+
- Patched -overwrite_original_in_place option to open the output file in
|
|
66
|
+
update mode rather than write mode (to allow some write optimizations on
|
|
67
|
+
certain filesystems) (thanks Joel Low)
|
|
68
|
+
- Fixed case of tag ID for new XMP-iptcExt:EventID (thanks Michael Steidl)
|
|
69
|
+
- Fixed problem extracting ICC_Profile information from some PDF files
|
|
70
|
+
- API Changes:
|
|
71
|
+
- Added QuickTimePad option
|
|
72
|
+
|
|
10
73
|
Oct. 16, 2021 - Version 12.33
|
|
11
74
|
|
|
12
75
|
- Added support for DNG version 1.6.0.0
|
|
@@ -135,6 +198,8 @@ May 20, 2021 - Version 12.26 (production release)
|
|
|
135
198
|
- Fixed problem which could cause a "Wide character" warning and generate a
|
|
136
199
|
corrupted output file when writing some illegal values
|
|
137
200
|
|
|
201
|
+
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
|
202
|
+
|
|
138
203
|
Apr. 22, 2021 - Version 12.25
|
|
139
204
|
|
|
140
205
|
- JPEG XL support is now official
|
|
@@ -617,6 +682,7 @@ Mar. 19, 2020 - Version 11.92
|
|
|
617
682
|
|
|
618
683
|
Mar. 5, 2020 - Version 11.91
|
|
619
684
|
|
|
685
|
+
- Added undocumented -xpath option for use by alternate Windows version
|
|
620
686
|
- Decode a couple of new Panasonic tags
|
|
621
687
|
- Documented -ec option (available since version 11.54)
|
|
622
688
|
- Reverted -htmlDump fix of 11.90 because it broke more than it fixed, and
|
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.37.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.37
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
|
@@ -10,24 +10,26 @@
|
|
|
10
10
|
use strict;
|
|
11
11
|
require 5.004;
|
|
12
12
|
|
|
13
|
-
my $version = '12.
|
|
13
|
+
my $version = '12.37';
|
|
14
14
|
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
16
|
-
my $exeDir;
|
|
17
16
|
BEGIN {
|
|
18
17
|
# (undocumented -xpath option added in 11.91, must come before other options)
|
|
19
|
-
$
|
|
18
|
+
my $exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
|
|
20
19
|
# get exe directory
|
|
21
|
-
$exeDir = ($
|
|
20
|
+
my $exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
|
|
21
|
+
my $incDir = ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
|
|
22
22
|
if (-l $0) {
|
|
23
23
|
my $lnk = eval { readlink $0 };
|
|
24
24
|
if (defined $lnk) {
|
|
25
25
|
my $lnkDir = ($lnk =~ /(.*)[\\\/]/) ? $1 : '.';
|
|
26
26
|
$exeDir = (($lnk =~ m(^/)) ? '' : $exeDir . '/') . $lnkDir;
|
|
27
|
+
$incDir = "$exeDir/lib";
|
|
27
28
|
}
|
|
28
29
|
}
|
|
30
|
+
$Image::ExifTool::exeDir = $exeDir; # use our exeDir for loading config file
|
|
29
31
|
# add lib directory at start of include path
|
|
30
|
-
unshift @INC,
|
|
32
|
+
unshift @INC, $incDir;
|
|
31
33
|
# load or disable config file if specified
|
|
32
34
|
if (@ARGV and lc($ARGV[0]) eq '-config') {
|
|
33
35
|
shift;
|
|
@@ -757,7 +759,7 @@ for (;;) {
|
|
|
757
759
|
}
|
|
758
760
|
my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE);
|
|
759
761
|
unless ($mt->Open($fp, $argFile)) {
|
|
760
|
-
unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) {
|
|
762
|
+
unless ($argFile !~ /^\// and $mt->Open($fp, "$Image::ExifTool::exeDir/$argFile")) {
|
|
761
763
|
Error "Error opening arg file $argFile\n";
|
|
762
764
|
$badCmd = 1;
|
|
763
765
|
next
|
|
@@ -1235,7 +1237,7 @@ for (;;) {
|
|
|
1235
1237
|
$textOverwrite += 2 if $t2 =~ /\+/; # append
|
|
1236
1238
|
if ($t1 ne 'W' and lc($t1) ne 'tagout') {
|
|
1237
1239
|
undef $tagOut;
|
|
1238
|
-
} elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[
|
|
1240
|
+
} elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgso]/) {
|
|
1239
1241
|
$tagOut = 0; # append tags to one file
|
|
1240
1242
|
} else {
|
|
1241
1243
|
$tagOut = 1; # separate file for each tag
|
|
@@ -2365,7 +2367,8 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2365
2367
|
}
|
|
2366
2368
|
my @groups = $et->GetGroup($tag);
|
|
2367
2369
|
$outfile and close($fp), undef($tmpText); # (shouldn't happen)
|
|
2368
|
-
|
|
2370
|
+
my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
|
|
2371
|
+
($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
|
|
2369
2372
|
$fp or ++$countBad, next TAG;
|
|
2370
2373
|
$tmpText = $outfile unless $append;
|
|
2371
2374
|
}
|
|
@@ -3061,12 +3064,14 @@ sub SetImageInfo($$$)
|
|
|
3061
3064
|
# temporarily disable CTRL-C during this critical operation
|
|
3062
3065
|
$critical = 1;
|
|
3063
3066
|
undef $tmpFile; # handle deletion of temporary file ourself
|
|
3064
|
-
if ($et->Open(\*ORIG_FILE, $file, '
|
|
3067
|
+
if ($et->Open(\*ORIG_FILE, $file, '+<')) {
|
|
3065
3068
|
binmode(ORIG_FILE);
|
|
3066
3069
|
while (read(NEW_FILE, $buff, 65536)) {
|
|
3067
3070
|
print ORIG_FILE $buff or $err = 1;
|
|
3068
3071
|
}
|
|
3069
3072
|
close(NEW_FILE);
|
|
3073
|
+
# Handle files being shorter than the original
|
|
3074
|
+
eval { truncate(ORIG_FILE, tell(ORIG_FILE)) } or $err = 1;
|
|
3070
3075
|
close(ORIG_FILE) or $err = 1;
|
|
3071
3076
|
if ($err) {
|
|
3072
3077
|
Warn "Couldn't overwrite in place - $file\n";
|
|
@@ -3462,18 +3467,26 @@ sub ConvertBinary($)
|
|
|
3462
3467
|
}
|
|
3463
3468
|
|
|
3464
3469
|
#------------------------------------------------------------------------------
|
|
3465
|
-
# Compare
|
|
3470
|
+
# Compare ValueConv and PrintConv values of a tag to see if they are equal
|
|
3466
3471
|
# Inputs: 0) value1, 1) value2
|
|
3467
3472
|
# Returns: true if they are equal
|
|
3468
3473
|
sub IsEqual($$)
|
|
3469
3474
|
{
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3475
|
+
my ($a, $b) = @_;
|
|
3476
|
+
# (scalar values are not print-converted)
|
|
3477
|
+
return 1 if $a eq $b or ref $a eq 'SCALAR';
|
|
3478
|
+
if (ref $a eq 'HASH' and ref $b eq 'HASH') {
|
|
3479
|
+
return 0 if scalar(keys %$a) != scalar(keys %$b);
|
|
3480
|
+
my $key;
|
|
3481
|
+
foreach $key (keys %$a) {
|
|
3482
|
+
return 0 unless IsEqual($$a{$key}, $$b{$key});
|
|
3483
|
+
}
|
|
3484
|
+
} else {
|
|
3485
|
+
return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
|
|
3486
|
+
my $i;
|
|
3487
|
+
for ($i=0; $i<scalar(@$a); ++$i) {
|
|
3488
|
+
return 0 unless IsEqual($$a[$i], $$b[$i]);
|
|
3489
|
+
}
|
|
3477
3490
|
}
|
|
3478
3491
|
return 1;
|
|
3479
3492
|
}
|
|
@@ -3801,7 +3814,7 @@ sub FindFileWindows($$)
|
|
|
3801
3814
|
my $enc = $et->Options('CharsetFileName');
|
|
3802
3815
|
$wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
|
|
3803
3816
|
$wildfile =~ tr/\\/\//; # use forward slashes
|
|
3804
|
-
my ($dir, $wildname) = ($wildfile =~ m{(
|
|
3817
|
+
my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
|
|
3805
3818
|
if ($dir =~ /[*?]/) {
|
|
3806
3819
|
Warn "Wildcards don't work in the directory specification\n";
|
|
3807
3820
|
return ();
|
|
@@ -3941,7 +3954,7 @@ sub SuggestedExtension($$$)
|
|
|
3941
3954
|
$ext = 'xml';
|
|
3942
3955
|
} elsif ($$valPt =~ /^RIFF....WAVE/s) {
|
|
3943
3956
|
$ext = 'wav';
|
|
3944
|
-
} elsif ($tag eq '
|
|
3957
|
+
} elsif ($tag eq 'OriginalRawImage' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
|
|
3945
3958
|
$ext =~ s/^.*\.//s;
|
|
3946
3959
|
$ext = $ext ? lc($ext) : 'raw';
|
|
3947
3960
|
} elsif ($tag eq 'EXIF') {
|
|
@@ -3993,14 +4006,15 @@ sub LoadPrintFormat($)
|
|
|
3993
4006
|
# A sort of sprintf for filenames
|
|
3994
4007
|
# Inputs: 0) format string (%d=dir, %f=file name, %e=ext),
|
|
3995
4008
|
# 1) source filename or undef to test format string
|
|
3996
|
-
# 2-4) [%t %g %s only] tag name, ref to array of group names,
|
|
4009
|
+
# 2-4) [%t %g %s %o only] tag name, ref to array of group names,
|
|
4010
|
+
# suggested extension, original raw file name
|
|
3997
4011
|
# Returns: new filename or undef on error (or if no file and fmt contains token)
|
|
3998
4012
|
sub FilenameSPrintf($;$@)
|
|
3999
4013
|
{
|
|
4000
4014
|
my ($fmt, $file, @extra) = @_;
|
|
4001
4015
|
local $_;
|
|
4002
4016
|
# return format string straight away if no tokens
|
|
4003
|
-
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[
|
|
4017
|
+
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgso]/;
|
|
4004
4018
|
return undef unless defined $file;
|
|
4005
4019
|
CleanFilename($file); # make sure we are using forward slashes
|
|
4006
4020
|
# split filename into directory, file, extension
|
|
@@ -4014,9 +4028,9 @@ sub FilenameSPrintf($;$@)
|
|
|
4014
4028
|
}
|
|
4015
4029
|
$part{F} = $part{f} . $part{E};
|
|
4016
4030
|
($part{D} = $part{d}) =~ s{/+$}{};
|
|
4017
|
-
@part{qw(t g s)} = @extra;
|
|
4031
|
+
@part{qw(t g s o)} = @extra;
|
|
4018
4032
|
my ($filename, $pos) = ('', 0);
|
|
4019
|
-
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([
|
|
4033
|
+
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
|
|
4020
4034
|
$filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
|
|
4021
4035
|
$pos = pos($fmt);
|
|
4022
4036
|
my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7);
|
|
@@ -4179,7 +4193,7 @@ sub OpenOutputFile($;@)
|
|
|
4179
4193
|
if ($textOut) {
|
|
4180
4194
|
$outfile = $file;
|
|
4181
4195
|
CleanFilename($outfile);
|
|
4182
|
-
if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[
|
|
4196
|
+
if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgsocC]/ or defined $tagOut) {
|
|
4183
4197
|
# make filename from printf-like $textOut
|
|
4184
4198
|
$outfile = FilenameSPrintf($textOut, $file, @args);
|
|
4185
4199
|
return () unless defined $outfile;
|
|
@@ -4716,6 +4730,14 @@ group delete (unless a family 2 group is specified, see note 4 below).
|
|
|
4716
4730
|
Instead, individual tags may be recovered using the B<-tagsFromFile> option
|
|
4717
4731
|
(eg. C<-all= -tagsfromfile @ -artist>).
|
|
4718
4732
|
|
|
4733
|
+
To speed processing when reading XMP, exclusions in XMP groups also bypass
|
|
4734
|
+
processing of the corresponding XMP property and any contained properties.
|
|
4735
|
+
For example, C<--xmp-crs:all> may speed processing significantly in cases
|
|
4736
|
+
where a large number of XMP-crs tags exist. To use this feature to bypass
|
|
4737
|
+
processing of a specific XMP property, the property name must be used
|
|
4738
|
+
instead of the ExifTool tag name (eg. C<--xmp-crs:dabs>). Also, C<XMP-all>
|
|
4739
|
+
may be used to to indicate any XMP namespace (eg. <C--xmp-all:dabs>).
|
|
4740
|
+
|
|
4719
4741
|
=item B<->I<TAG>[+-^]B<=>[I<VALUE>]
|
|
4720
4742
|
|
|
4721
4743
|
Write a new value for the specified tag (eg. C<-comment=wow>), or delete the
|
|
@@ -4726,7 +4748,8 @@ for more details). C<+=> may also be used to increment numerical values (or
|
|
|
4726
4748
|
decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
|
|
4727
4749
|
delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
|
|
4728
4750
|
used to write an empty string instead of deleting the tag when no I<VALUE>
|
|
4729
|
-
is given, but otherwise it is equivalent to C
|
|
4751
|
+
is given, but otherwise it is equivalent to C<=>, but note that the caret
|
|
4752
|
+
must be quoted on the Windows command line.
|
|
4730
4753
|
|
|
4731
4754
|
I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
|
4732
4755
|
prefixed by optional family numbers, and separated colons. If no group name
|
|
@@ -5165,9 +5188,11 @@ various components of a date/time value. The specifics of the I<FMT> syntax
|
|
|
5165
5188
|
are system dependent -- consult the C<strftime> man page on your system for
|
|
5166
5189
|
details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This
|
|
5167
5190
|
option has no effect on date-only or time-only tags and ignores timezone
|
|
5168
|
-
information if present.
|
|
5169
|
-
|
|
5170
|
-
|
|
5191
|
+
information if present. ExifTool adds a C<%f> format code to represent
|
|
5192
|
+
fractional seconds, and supports an optional width to specify the number of
|
|
5193
|
+
digits after the decimal point (eg. C<%3f> would give something like
|
|
5194
|
+
C<.437>). Only one B<-d> option may be used per command. Requires
|
|
5195
|
+
POSIX::strptime or Time::Piece for the inversion conversion when writing.
|
|
5171
5196
|
|
|
5172
5197
|
=item B<-D> (B<-decimal>)
|
|
5173
5198
|
|
|
@@ -5394,7 +5419,8 @@ directory if C<#[SECT]> contains C<$directory>). Lines beginning with
|
|
|
5394
5419
|
C<#[BODY]> and lines not beginning with C<#> are output for each processed
|
|
5395
5420
|
file. Lines beginning with C<#[IF]> are not output, but all BODY lines are
|
|
5396
5421
|
skipped if any tag on an IF line doesn't exist. Other lines beginning with
|
|
5397
|
-
C<#> are ignored.
|
|
5422
|
+
C<#> are ignored. (To output a line beginning with C<#>, use C<#[BODY]#>.)
|
|
5423
|
+
For example, this format file:
|
|
5398
5424
|
|
|
5399
5425
|
# this is a comment line
|
|
5400
5426
|
#[HEAD]-- Generated by ExifTool $exifToolVersion --
|
|
@@ -5408,7 +5434,7 @@ with this command:
|
|
|
5408
5434
|
|
|
5409
5435
|
produces output like this:
|
|
5410
5436
|
|
|
5411
|
-
-- Generated by ExifTool 12.
|
|
5437
|
+
-- Generated by ExifTool 12.37 --
|
|
5412
5438
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5413
5439
|
(f/5.6, 1/60s, ISO 100)
|
|
5414
5440
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5663,12 +5689,14 @@ between B<-W> and B<-w>:
|
|
|
5663
5689
|
|
|
5664
5690
|
1) With B<-W>, a new output file is created for each extracted tag.
|
|
5665
5691
|
|
|
5666
|
-
2) B<-W> supports
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
|
|
5670
|
-
The
|
|
5671
|
-
|
|
5692
|
+
2) B<-W> supports four additional format codes: %t, %g and %s represent the
|
|
5693
|
+
tag name, group name, and suggested extension for the output file (based on
|
|
5694
|
+
the format of the data), and %o represents the value of the
|
|
5695
|
+
OriginalRawFileName or OriginalFileName tag from the input file (including
|
|
5696
|
+
extension). The %g code may be followed by a single digit to specify the
|
|
5697
|
+
group family number (eg. %g1), otherwise family 0 is assumed. The substring
|
|
5698
|
+
width/position/case specifiers may be used with these format codes in
|
|
5699
|
+
exactly the same way as with %f and %e.
|
|
5672
5700
|
|
|
5673
5701
|
3) The argument for B<-W> is interpreted as a file name if it contains no
|
|
5674
5702
|
format codes. (For B<-w>, this would be a file extension.) This change
|
|
@@ -5688,7 +5716,7 @@ example, the following pairs of commands give the same result:
|
|
|
5688
5716
|
4) Adding the B<-v> option to B<-W> sends a list of the tags and output file
|
|
5689
5717
|
names to the console instead of giving a verbose dump of the entire file.
|
|
5690
5718
|
(Unless appending all output to one file for each source file by using
|
|
5691
|
-
B<-W+> with an output file I<FMT> that does not contain %t, $g or %
|
|
5719
|
+
B<-W+> with an output file I<FMT> that does not contain %t, $g, %s or %o.)
|
|
5692
5720
|
|
|
5693
5721
|
5) Individual list items are stored in separate files when B<-W> is combined
|
|
5694
5722
|
with B<-b>, but note that for separate files to be created %c or %C must be
|
|
@@ -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.47';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -469,6 +469,11 @@ the PrintConv option is enabled and no time zone is specified. This is
|
|
|
469
469
|
because Apple software may display crazy values if the time zone is missing
|
|
470
470
|
for some tags.
|
|
471
471
|
|
|
472
|
+
By default ExifTool will remove null padding from some QuickTime containers
|
|
473
|
+
in Canon CR3 files when writing, but the
|
|
474
|
+
L<QuickTimePad|../ExifTool.html#QuickTimePad> option may be used to preserve
|
|
475
|
+
the original size by padding with nulls if necessary.
|
|
476
|
+
|
|
472
477
|
See
|
|
473
478
|
L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
|
|
474
479
|
for the official specification.
|
|
@@ -752,7 +757,7 @@ sub new
|
|
|
752
757
|
my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
|
|
753
758
|
%tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
|
|
754
759
|
%structs, %compositeModules, %isPlugin, %flattened, %structLookup,
|
|
755
|
-
@writePseudo);
|
|
760
|
+
@writePseudo, %dupXmpTag);
|
|
756
761
|
$self->{TAG_NAME_INFO} = \%tagNameInfo;
|
|
757
762
|
$self->{ID_LOOKUP} = \%id;
|
|
758
763
|
$self->{LONG_ID} = \%longID;
|
|
@@ -900,6 +905,10 @@ TagID: foreach $tagID (@keys) {
|
|
|
900
905
|
foreach (@grps) {
|
|
901
906
|
warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
|
|
902
907
|
}
|
|
908
|
+
if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct}) {
|
|
909
|
+
$dupXmpTag{$name} and warn "Duplicate XMP tag $name\n";
|
|
910
|
+
$dupXmpTag{$name} = 1;
|
|
911
|
+
}
|
|
903
912
|
# validate Name (must not start with a digit or else XML output will not be valid;
|
|
904
913
|
# must not start with a dash or exiftool command line may get confused)
|
|
905
914
|
if ($name !~ /^[_A-Za-z][-\w]+$/ and
|