exiftool-vendored.pl 12.60.0 → 12.65.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.
- package/bin/Changes +110 -0
- package/bin/LICENSE +674 -0
- package/bin/MANIFEST +11 -0
- package/bin/META.json +5 -3
- package/bin/META.yml +5 -3
- package/bin/Makefile.PL +7 -1
- package/bin/README +50 -45
- package/bin/config_files/guano.config +161 -0
- package/bin/exiftool +163 -103
- package/bin/lib/Image/ExifTool/7Z.pm +793 -0
- package/bin/lib/Image/ExifTool/Apple.pm +14 -7
- package/bin/lib/Image/ExifTool/BMP.pm +0 -1
- package/bin/lib/Image/ExifTool/BigTIFF.pm +8 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
- package/bin/lib/Image/ExifTool/Canon.pm +4 -1
- package/bin/lib/Image/ExifTool/CanonRaw.pm +4 -4
- package/bin/lib/Image/ExifTool/CanonVRD.pm +4 -1
- package/bin/lib/Image/ExifTool/Exif.pm +31 -14
- package/bin/lib/Image/ExifTool/FlashPix.pm +9 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -3
- package/bin/lib/Image/ExifTool/GPS.pm +5 -2
- package/bin/lib/Image/ExifTool/Geotag.pm +4 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +243 -20
- package/bin/lib/Image/ExifTool/Lang/fr.pm +1467 -202
- package/bin/lib/Image/ExifTool/MPF.pm +2 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +16 -1
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +941 -33
- package/bin/lib/Image/ExifTool/NikonCustom.pm +874 -63
- package/bin/lib/Image/ExifTool/PDF.pm +39 -12
- package/bin/lib/Image/ExifTool/PLIST.pm +8 -1
- package/bin/lib/Image/ExifTool/PNG.pm +6 -6
- package/bin/lib/Image/ExifTool/PhaseOne.pm +5 -5
- package/bin/lib/Image/ExifTool/QuickTime.pm +96 -32
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +68 -37
- package/bin/lib/Image/ExifTool/README +2 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +11 -9
- package/bin/lib/Image/ExifTool/Samsung.pm +227 -227
- package/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +4 -4
- package/bin/lib/Image/ExifTool/Sony.pm +237 -32
- package/bin/lib/Image/ExifTool/TagLookup.pm +4762 -4629
- package/bin/lib/Image/ExifTool/TagNames.pod +737 -20
- package/bin/lib/Image/ExifTool/Validate.pm +17 -1
- package/bin/lib/Image/ExifTool/WPG.pm +296 -0
- package/bin/lib/Image/ExifTool/WriteExif.pl +9 -7
- package/bin/lib/Image/ExifTool/WritePDF.pl +7 -8
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
- package/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- package/bin/lib/Image/ExifTool/Writer.pl +47 -16
- package/bin/lib/Image/ExifTool/XMP.pm +30 -6
- package/bin/lib/Image/ExifTool/XMP2.pl +32 -0
- package/bin/lib/Image/ExifTool/XMPStruct.pl +96 -28
- package/bin/lib/Image/ExifTool/ZIP.pm +159 -41
- package/bin/lib/Image/ExifTool.pm +280 -164
- package/bin/lib/Image/ExifTool.pod +117 -52
- package/bin/perl-Image-ExifTool.spec +44 -43
- package/bin/pp_build_exe.args +8 -4
- package/package.json +3 -3
package/bin/exiftool
CHANGED
|
@@ -11,12 +11,13 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.65';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
|
+
my $exePath;
|
|
17
18
|
BEGIN {
|
|
18
19
|
# (undocumented -xpath option added in 11.91, must come before other options)
|
|
19
|
-
|
|
20
|
+
$exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
|
|
20
21
|
# get exe directory
|
|
21
22
|
my $exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
|
|
22
23
|
my $incDir = ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
|
|
@@ -297,8 +298,11 @@ my @recommends = qw(
|
|
|
297
298
|
POSIX::strptime
|
|
298
299
|
Time::Local
|
|
299
300
|
Unicode::LineBreak
|
|
301
|
+
Compress::Raw::Lzma
|
|
300
302
|
IO::Compress::RawDeflate
|
|
301
303
|
IO::Uncompress::RawInflate
|
|
304
|
+
IO::Compress::Brotli
|
|
305
|
+
IO::Uncompress::Brotli
|
|
302
306
|
Win32::API
|
|
303
307
|
Win32::FindFile
|
|
304
308
|
Win32API::File
|
|
@@ -365,13 +369,14 @@ sub Cleanup() {
|
|
|
365
369
|
|
|
366
370
|
# isolate arguments common to all commands
|
|
367
371
|
if (grep /^-common_args$/i, @ARGV) {
|
|
368
|
-
my (@newArgs, $common);
|
|
372
|
+
my (@newArgs, $common, $end);
|
|
369
373
|
foreach (@ARGV) {
|
|
370
|
-
if (/^-common_args$/i) {
|
|
374
|
+
if (/^-common_args$/i and not $end) {
|
|
371
375
|
$common = 1;
|
|
372
376
|
} elsif ($common) {
|
|
373
377
|
push @commonArgs, $_;
|
|
374
378
|
} else {
|
|
379
|
+
$end = 1 if $_ eq '--';
|
|
375
380
|
push @newArgs, $_;
|
|
376
381
|
}
|
|
377
382
|
}
|
|
@@ -721,6 +726,13 @@ for (;;) {
|
|
|
721
726
|
print "ExifTool version $version$str$Image::ExifTool::RELEASE\n";
|
|
722
727
|
printf "Perl version %s%s\n", $], (defined ${^UNICODE} ? " (-C${^UNICODE})" : '');
|
|
723
728
|
print "Platform: $^O\n";
|
|
729
|
+
if ($verbose > 8) {
|
|
730
|
+
print "Current Dir: " . Cwd::getcwd() . "\n" if (eval { require Cwd });
|
|
731
|
+
print "Script Name: $0\n";
|
|
732
|
+
print "Exe Name: $^X\n";
|
|
733
|
+
print "Exe Dir: $Image::ExifTool::exeDir\n";
|
|
734
|
+
print "Exe Path: $exePath\n";
|
|
735
|
+
}
|
|
724
736
|
print "Optional libraries:\n";
|
|
725
737
|
foreach (@recommends) {
|
|
726
738
|
next if /^Win32/ and $^O ne 'MSWin32';
|
|
@@ -802,11 +814,17 @@ for (;;) {
|
|
|
802
814
|
/^(-?)(a|duplicates)$/i and $mt->Options(Duplicates => ($1 ? 0 : 1)), next;
|
|
803
815
|
if ($a eq 'api') {
|
|
804
816
|
my $opt = shift;
|
|
805
|
-
defined $opt
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
817
|
+
if (defined $opt and length $opt) {
|
|
818
|
+
my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
|
|
819
|
+
# empty string means an undefined value unless ^= is used
|
|
820
|
+
$val = undef unless $opt =~ s/\^$// or length $val;
|
|
821
|
+
$mt->Options($opt => $val);
|
|
822
|
+
} else {
|
|
823
|
+
print "Available API Options:\n";
|
|
824
|
+
my $availableOptions = Image::ExifTool::AvailableOptions();
|
|
825
|
+
printf(" %-17s - %s\n", $$_[0], $$_[2]) foreach @$availableOptions;
|
|
826
|
+
$helped = 1;
|
|
827
|
+
}
|
|
810
828
|
next;
|
|
811
829
|
}
|
|
812
830
|
/^arg(s|format)$/i and $argFormat = 1, next;
|
|
@@ -836,7 +854,7 @@ for (;;) {
|
|
|
836
854
|
$mt->Options(Charset => $charset);
|
|
837
855
|
}
|
|
838
856
|
if ($evalWarning) {
|
|
839
|
-
|
|
857
|
+
Warn $evalWarning;
|
|
840
858
|
} else {
|
|
841
859
|
$setCharset = $mt->Options('Charset');
|
|
842
860
|
}
|
|
@@ -1464,6 +1482,10 @@ if ($csv and $csv eq 'CSV' and not $isWriting) {
|
|
|
1464
1482
|
$binaryOutput = 0;
|
|
1465
1483
|
$setCharset = 'default' unless defined $setCharset;
|
|
1466
1484
|
}
|
|
1485
|
+
if (%printFmt) {
|
|
1486
|
+
Warn "The -csv option has no effect when -p is used\n";
|
|
1487
|
+
undef $csv;
|
|
1488
|
+
}
|
|
1467
1489
|
require Image::ExifTool::XMP if $setCharset;
|
|
1468
1490
|
}
|
|
1469
1491
|
|
|
@@ -1737,7 +1759,8 @@ if ($textOut) {
|
|
|
1737
1759
|
if ($outOpt) {
|
|
1738
1760
|
my $type = GetFileType($outOpt);
|
|
1739
1761
|
if ($type) {
|
|
1740
|
-
|
|
1762
|
+
# (must test original file name because we can write .webp but not other RIFF types)
|
|
1763
|
+
unless (CanWrite($outOpt)) {
|
|
1741
1764
|
Warn "Can't write $type files\n";
|
|
1742
1765
|
$rtnVal = 1;
|
|
1743
1766
|
next;
|
|
@@ -1951,23 +1974,31 @@ sub GetImageInfo($$)
|
|
|
1951
1974
|
my (@foundTags, $info, $file, $ind, $g8);
|
|
1952
1975
|
|
|
1953
1976
|
# set window title for this file if necessary
|
|
1954
|
-
if (defined $windowTitle
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1977
|
+
if (defined $windowTitle) {
|
|
1978
|
+
if ($progressCount >= $progressNext) {
|
|
1979
|
+
my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
|
|
1980
|
+
my $title = $windowTitle;
|
|
1981
|
+
my ($num, $denom) = split '/', $prog;
|
|
1982
|
+
my $frac = $num / ($denom || 1);
|
|
1983
|
+
my $n = $title =~ s/%(\d+)b/%b/ ? $1 : 20; # length of bar
|
|
1984
|
+
my $bar = int($frac * $n + 0.5);
|
|
1985
|
+
my %lkup = (
|
|
1986
|
+
b => ('I' x $bar) . ('.' x ($n - $bar)),
|
|
1987
|
+
f => $orig,
|
|
1988
|
+
p => int(100 * $frac + 0.5),
|
|
1989
|
+
r => $prog,
|
|
1990
|
+
'%'=> '%',
|
|
1991
|
+
);
|
|
1992
|
+
$title =~ s/%([%bfpr])/$lkup{$1}/eg;
|
|
1993
|
+
SetWindowTitle($title);
|
|
1994
|
+
if (defined $progressMax) {
|
|
1995
|
+
undef $progressNext;
|
|
1996
|
+
} else {
|
|
1997
|
+
$progressNext += $progressIncr;
|
|
1998
|
+
}
|
|
1999
|
+
}
|
|
2000
|
+
# ($progressMax is not defined for "-progress:%f")
|
|
2001
|
+
++$progressCount unless defined $progressMax;
|
|
1971
2002
|
}
|
|
1972
2003
|
unless (length $orig or $outOpt) {
|
|
1973
2004
|
Warn qq(Error: Zero-length file name - ""\n);
|
|
@@ -1993,7 +2024,11 @@ sub GetImageInfo($$)
|
|
|
1993
2024
|
}
|
|
1994
2025
|
# set alternate file names
|
|
1995
2026
|
foreach $g8 (sort keys %altFile) {
|
|
1996
|
-
my $altName =
|
|
2027
|
+
my $altName = $orig;
|
|
2028
|
+
# must double any '$' symbols in the original file name because
|
|
2029
|
+
# they are used for tag names in a -fileNUM argument
|
|
2030
|
+
$altName =~ s/\$/\$\$/g;
|
|
2031
|
+
$altName = FilenameSPrintf($altFile{$g8}, $altName);
|
|
1997
2032
|
$et->SetAlternateFile($g8, $altName);
|
|
1998
2033
|
}
|
|
1999
2034
|
|
|
@@ -2349,7 +2384,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2349
2384
|
next unless defined $val;
|
|
2350
2385
|
if ($structOpt and ref $val) {
|
|
2351
2386
|
# serialize structure if necessary
|
|
2352
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
|
2387
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val) unless $xml or $json;
|
|
2353
2388
|
} elsif (ref $val eq 'ARRAY') {
|
|
2354
2389
|
if (defined $listItem) {
|
|
2355
2390
|
# take only the specified item
|
|
@@ -2498,7 +2533,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2498
2533
|
my $tok = "$group:$tagName";
|
|
2499
2534
|
if ($outFormat > 0) {
|
|
2500
2535
|
if ($structOpt and ref $val) {
|
|
2501
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val);
|
|
2536
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
|
2502
2537
|
}
|
|
2503
2538
|
if ($escapeHTML) {
|
|
2504
2539
|
$val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./;
|
|
@@ -2536,6 +2571,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2536
2571
|
$xtra .= " et:table='${table}'";
|
|
2537
2572
|
$xtra .= " et:index='${index}'" if defined $index;
|
|
2538
2573
|
}
|
|
2574
|
+
# Note: New $xtra attributes must be added to %ignoreEtProp in XMP.pm!
|
|
2539
2575
|
my $lastVal = $val;
|
|
2540
2576
|
for ($valNum=0; $valNum<2; ++$valNum) {
|
|
2541
2577
|
$val = FormatXML($val, $ind, $group);
|
|
@@ -2844,7 +2880,7 @@ sub SetImageInfo($$$)
|
|
|
2844
2880
|
}
|
|
2845
2881
|
unless ($isStdout) {
|
|
2846
2882
|
$outfile = NextUnusedFilename($outfile);
|
|
2847
|
-
if ($et->Exists($outfile) and not $doSetFileName) {
|
|
2883
|
+
if ($et->Exists($outfile, 1) and not $doSetFileName) {
|
|
2848
2884
|
Warn "Error: '${outfile}' already exists - $infile\n";
|
|
2849
2885
|
EFile($infile);
|
|
2850
2886
|
++$countBadWr;
|
|
@@ -2975,7 +3011,7 @@ sub SetImageInfo($$$)
|
|
|
2975
3011
|
$outfile = Image::ExifTool::GetNewFileName(defined $outfile ? $outfile : $file, $newDir);
|
|
2976
3012
|
}
|
|
2977
3013
|
$outfile = NextUnusedFilename($outfile, $infile);
|
|
2978
|
-
if ($et->Exists($outfile)) {
|
|
3014
|
+
if ($et->Exists($outfile, 1)) {
|
|
2979
3015
|
if ($infile eq $outfile) {
|
|
2980
3016
|
undef $outfile; # not changing the file name after all
|
|
2981
3017
|
# (allow for case-insensitive filesystems)
|
|
@@ -3700,7 +3736,7 @@ sub ProcessFiles($;$)
|
|
|
3700
3736
|
if (defined $progressMax) {
|
|
3701
3737
|
unless (defined $progressNext) {
|
|
3702
3738
|
$progressNext = $progressCount + $progressIncr;
|
|
3703
|
-
$progressNext -= $progressNext % $progressIncr;
|
|
3739
|
+
$progressNext -= $progressNext % $progressIncr; # (show even multiples)
|
|
3704
3740
|
$progressNext = $progressMax if $progressNext > $progressMax;
|
|
3705
3741
|
}
|
|
3706
3742
|
++$progressCount;
|
|
@@ -4055,6 +4091,8 @@ sub SuggestedExtension($$$)
|
|
|
4055
4091
|
$ext = 'dr4';
|
|
4056
4092
|
} elsif ($$valPt =~ /^(.{10}|.{522})(\x11\x01|\x00\x11)/s) {
|
|
4057
4093
|
$ext = 'pict';
|
|
4094
|
+
} elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
|
|
4095
|
+
$ext = 'jxl';
|
|
4058
4096
|
} else {
|
|
4059
4097
|
$ext = 'dat';
|
|
4060
4098
|
}
|
|
@@ -4201,7 +4239,7 @@ sub NextUnusedFilename($;$)
|
|
|
4201
4239
|
}
|
|
4202
4240
|
$filename .= substr($fmt, $pos); # add rest of file name
|
|
4203
4241
|
# return now with filename unless file exists
|
|
4204
|
-
return $filename unless ($mt->Exists($filename) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
|
|
4242
|
+
return $filename unless ($mt->Exists($filename, 1) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
|
|
4205
4243
|
if (defined $okfile) {
|
|
4206
4244
|
return $filename if $filename eq $okfile;
|
|
4207
4245
|
my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
|
|
@@ -4281,7 +4319,7 @@ sub OpenOutputFile($;@)
|
|
|
4281
4319
|
$outfile .= $textOut;
|
|
4282
4320
|
}
|
|
4283
4321
|
my $mode = '>';
|
|
4284
|
-
if ($mt->Exists($outfile)) {
|
|
4322
|
+
if ($mt->Exists($outfile, 1)) {
|
|
4285
4323
|
unless ($textOverwrite) {
|
|
4286
4324
|
Warn "Output file $outfile already exists for $file\n";
|
|
4287
4325
|
return ();
|
|
@@ -4479,7 +4517,7 @@ sub Progress($$)
|
|
|
4479
4517
|
my ($file, $msg) = @_;
|
|
4480
4518
|
if (defined $progStr) {
|
|
4481
4519
|
print $file $msg, $progStr, "\n";
|
|
4482
|
-
undef $progressNext;
|
|
4520
|
+
undef $progressNext if defined $progressMax;
|
|
4483
4521
|
}
|
|
4484
4522
|
}
|
|
4485
4523
|
|
|
@@ -4590,48 +4628,49 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4590
4628
|
|
|
4591
4629
|
File Types
|
|
4592
4630
|
------------+-------------+-------------+-------------+------------
|
|
4593
|
-
360 r/w | DPX r | ITC r |
|
|
4594
|
-
3FR r | DR4 r/w/c | J2C r |
|
|
4595
|
-
3G2 r/w | DSS r | JNG r/w |
|
|
4596
|
-
3GP r/w | DV r | JP2 r/w |
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
|
|
4622
|
-
|
|
4623
|
-
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4631
|
+
360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
|
|
4632
|
+
3FR r | DR4 r/w/c | J2C r | O r | RIFF r
|
|
4633
|
+
3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
|
|
4634
|
+
3GP r/w | DV r | JP2 r/w | ODS r | RTF r
|
|
4635
|
+
7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
|
4636
|
+
A r | DVR-MS r | JSON r | OFR r | RWL r/w
|
|
4637
|
+
AA r | DYLIB r | JXL r | OGG r | RWZ r
|
|
4638
|
+
AAE r | EIP r | K25 r | OGV r | RM r
|
|
4639
|
+
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
|
4640
|
+
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
|
4641
|
+
AFM r | ERF r/w | LA r | ORF r/w | SO r
|
|
4642
|
+
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
|
|
4643
|
+
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
|
|
4644
|
+
APE r | EXR r | LNK r | PAC r | SRW r/w
|
|
4645
|
+
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
|
|
4646
|
+
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
|
|
4647
|
+
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
|
|
4648
|
+
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
|
|
4649
|
+
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
|
|
4650
|
+
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
|
|
4651
|
+
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
|
|
4652
|
+
BPG r | FLV r | MIFF r | PFA r | TXT r
|
|
4653
|
+
BTF r | FPF r | MKA r | PFB r | VCF r
|
|
4654
|
+
CHM r | FPX r | MKS r | PFM r | VNT r
|
|
4655
|
+
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
|
|
4656
|
+
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
|
|
4657
|
+
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
4658
|
+
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
4659
|
+
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
|
4660
|
+
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
4661
|
+
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
4662
|
+
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
4663
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
|
|
4664
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
|
|
4665
|
+
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
|
4666
|
+
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
4667
|
+
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
|
4668
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
|
4669
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
|
|
4670
|
+
DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
|
|
4671
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
|
|
4672
|
+
DOC r | INX r | NKSC r/w | RAM r |
|
|
4673
|
+
DOCX r | ISO r | NRW r/w | RAR r |
|
|
4635
4674
|
|
|
4636
4675
|
Meta Information
|
|
4637
4676
|
----------------------+----------------------+---------------------
|
|
@@ -4669,7 +4708,7 @@ L<Tag operations|/Tag operations>
|
|
|
4669
4708
|
-TAG or --TAG Extract or exclude specified tag
|
|
4670
4709
|
-TAG[+-^]=[VALUE] Write new value for tag
|
|
4671
4710
|
-TAG[+-]<=DATFILE Write tag value from contents of file
|
|
4672
|
-
-TAG[+-]<SRCTAG
|
|
4711
|
+
-[+]TAG[+-]<SRCTAG Copy tag value (see -tagsFromFile)
|
|
4673
4712
|
|
|
4674
4713
|
-tagsFromFile SRCFILE Copy tag values from file
|
|
4675
4714
|
-x TAG (-exclude) Exclude specified tag
|
|
@@ -4844,8 +4883,8 @@ for more details). C<+=> may also be used to increment numerical values (or
|
|
|
4844
4883
|
decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
|
|
4845
4884
|
delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
|
|
4846
4885
|
used to write an empty string instead of deleting the tag when no I<VALUE>
|
|
4847
|
-
is given, but otherwise it is equivalent to C
|
|
4848
|
-
|
|
4886
|
+
is given, but otherwise it is equivalent to C<=>. (Note that the caret must
|
|
4887
|
+
be quoted on the Windows command line.)
|
|
4849
4888
|
|
|
4850
4889
|
I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
|
4851
4890
|
prefixed by optional family numbers, and separated colons. If no group name
|
|
@@ -4911,7 +4950,9 @@ while C<-all:all=> deletes entire blocks.
|
|
|
4911
4950
|
5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG
|
|
4912
4951
|
application segments which are not associated with another deletable group.
|
|
4913
4952
|
For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
|
|
4914
|
-
segment because this is accomplished with C<-Adobe:All>.
|
|
4953
|
+
segment because this is accomplished with C<-Adobe:All>. But note that
|
|
4954
|
+
these unnamed APP segments may not be excluded with C<--APPxx:all>) when
|
|
4955
|
+
deleting all information.
|
|
4915
4956
|
|
|
4916
4957
|
6) When shifting a value, the shift is applied to the original value of the
|
|
4917
4958
|
tag, overriding any other values previously assigned to the tag on the same
|
|
@@ -5541,7 +5582,7 @@ with this command:
|
|
|
5541
5582
|
|
|
5542
5583
|
produces output like this:
|
|
5543
5584
|
|
|
5544
|
-
-- Generated by ExifTool 12.
|
|
5585
|
+
-- Generated by ExifTool 12.65 --
|
|
5545
5586
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5546
5587
|
(f/5.6, 1/60s, ISO 100)
|
|
5547
5588
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6064,13 +6105,10 @@ newline and C<$$> represents a single C<$> symbol. So Perl variables, if
|
|
|
6064
6105
|
used, require a double C<$>, and regular expressions ending in C<$/> must
|
|
6065
6106
|
use C<$$/> instead.
|
|
6066
6107
|
|
|
6067
|
-
4) The condition
|
|
6068
|
-
|
|
6069
|
-
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
exiftool -if EXPR -p '$directory/$filename' -ext nef DIR > nef.txt
|
|
6073
|
-
exiftool -@ nef.txt -srcfile %d%f.xmp ...
|
|
6108
|
+
4) The condition accesses only tags from the file being processed unless the
|
|
6109
|
+
B<-fileNUM> option is used to read an alternate file and the corresponding
|
|
6110
|
+
family 8 group name is specified for the tag. See the B<-fileNUM> option
|
|
6111
|
+
details for more information.
|
|
6074
6112
|
|
|
6075
6113
|
5) The B<-a> option has no effect on the evaluation of the expression, and
|
|
6076
6114
|
the values of duplicate tags are accessible only by specifying a group name
|
|
@@ -6254,10 +6292,12 @@ for EXIF this is the individual IFD (the family 1 group).
|
|
|
6254
6292
|
When reading, causes information to be extracted from .gz and .bz2
|
|
6255
6293
|
compressed images (only one image per archive; requires gzip and bzip2 to be
|
|
6256
6294
|
available). When writing, causes compressed information to be written if
|
|
6257
|
-
supported by the metadata format (eg. compressed textual
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6295
|
+
supported by the metadata format (eg. PNG supports compressed textual
|
|
6296
|
+
metadata, JXL supports compressed EXIF and XML, and MIE supports any
|
|
6297
|
+
compressed metadata), disables the recommended padding in embedded XMP
|
|
6298
|
+
(saving 2424 bytes when writing XMP in a file), and writes XMP in shorthand
|
|
6299
|
+
format -- the equivalent of setting the API Compress=1 and
|
|
6300
|
+
Compact="NoPadding,Shorthand".
|
|
6261
6301
|
|
|
6262
6302
|
=back
|
|
6263
6303
|
|
|
@@ -6482,13 +6522,14 @@ load exiftool for each invocation.
|
|
|
6482
6522
|
|
|
6483
6523
|
=over 5
|
|
6484
6524
|
|
|
6485
|
-
=item B<-api> I<OPT[[^]=[VAL]]>
|
|
6525
|
+
=item B<-api> [I<OPT[[^]=[VAL]]>]
|
|
6486
6526
|
|
|
6487
6527
|
Set ExifTool API option. I<OPT> is an API option name. The option value is
|
|
6488
6528
|
set to 1 if I<=VAL> is omitted. If I<VAL> is omitted, the option value is
|
|
6489
|
-
set to undef if C<=> is used, or an empty string with C<^=>.
|
|
6490
|
-
|
|
6491
|
-
|
|
6529
|
+
set to undef if C<=> is used, or an empty string with C<^=>. If I<OPT> is
|
|
6530
|
+
not specified a list of available options is returned. See
|
|
6531
|
+
L<Image::ExifTool Options|Image::ExifTool/Options> for option details. This
|
|
6532
|
+
overrides API options set via the config file.
|
|
6492
6533
|
|
|
6493
6534
|
=item B<-common_args>
|
|
6494
6535
|
|
|
@@ -6544,11 +6585,22 @@ option no longer suppresses the output "{readyNUM}" message.
|
|
|
6544
6585
|
|
|
6545
6586
|
=item B<-file>I<NUM> I<ALTFILE>
|
|
6546
6587
|
|
|
6547
|
-
Read tags from an alternate source file.
|
|
6588
|
+
Read tags from an alternate source file. Among other things, this allows
|
|
6589
|
+
tags from different files to be compared and combined using the B<-if> and
|
|
6590
|
+
B<-p> options. Tags from alternate files are accessed via the corresponding
|
|
6548
6591
|
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
|
|
6550
|
-
|
|
6551
|
-
|
|
6592
|
+
for B<-file2>, etc). I<ALTFILE> may contain filename formatting codes like
|
|
6593
|
+
the B<-w> option (%d, %f, etc), and/or tag names with a leading C<$> symbol
|
|
6594
|
+
to access tags from the source file in the same way as the B<-p> option (so
|
|
6595
|
+
any other dollar symbol in the file name must be doubled, eg.
|
|
6596
|
+
C<money$$.jpg>). For example, assuming that the OriginalFileName tag has
|
|
6597
|
+
been set in the edited file, a command to copy Rights from the original file
|
|
6598
|
+
could look like this:
|
|
6599
|
+
|
|
6600
|
+
exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
|
|
6601
|
+
|
|
6602
|
+
Composite tags may access tags from alternate files using the appropriate
|
|
6603
|
+
(case-sensitive) family 8 group name.
|
|
6552
6604
|
|
|
6553
6605
|
=item B<-list_dir>
|
|
6554
6606
|
|
|
@@ -6731,6 +6783,14 @@ rewritten unnecessarily:
|
|
|
6731
6783
|
|
|
6732
6784
|
Note that function names are case sensitive.
|
|
6733
6785
|
|
|
6786
|
+
ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
|
|
6787
|
+
function largely redundant, with all the functionality except the ability to
|
|
6788
|
+
avoid rewriting the file if there are no duplicates, but with the advantage
|
|
6789
|
+
the duplicates may be removed when accumulating list items from multiple
|
|
6790
|
+
sources. An equivalent to the above commands using this feature would be:
|
|
6791
|
+
|
|
6792
|
+
exiftool -tagsfromfile @ -keywords -api nodups a.jpg
|
|
6793
|
+
|
|
6734
6794
|
=head1 WINDOWS UNICODE FILE NAMES
|
|
6735
6795
|
|
|
6736
6796
|
In Windows, command-line arguments are specified using the current code page
|