exiftool_vendored 13.31.0 → 13.34.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 +56 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +47 -46
- data/bin/exiftool +114 -89
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
- data/bin/lib/Image/ExifTool/Canon.pm +19 -2
- data/bin/lib/Image/ExifTool/Exif.pm +9 -6
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
- data/bin/lib/Image/ExifTool/FujiFilm.pm +11 -3
- data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
- data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
- data/bin/lib/Image/ExifTool/LNK.pm +4 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +4 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +72 -37
- data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
- data/bin/lib/Image/ExifTool/Olympus.pm +254 -34
- data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +340 -61
- data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
- data/bin/lib/Image/ExifTool/README +2 -1
- data/bin/lib/Image/ExifTool/Sony.pm +44 -17
- data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4380 -4265
- data/bin/lib/Image/ExifTool/TagNames.pod +265 -19
- data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
- data/bin/lib/Image/ExifTool/Writer.pl +19 -15
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +12 -4
- data/bin/lib/Image/ExifTool.pod +50 -44
- data/bin/perl-Image-ExifTool.spec +46 -45
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '13.
|
14
|
+
my $version = '13.34';
|
15
15
|
|
16
16
|
$^W = 1; # enable global warnings
|
17
17
|
|
@@ -101,9 +101,9 @@ my @csvFiles; # list of files when reading with CSV option (in ExifTool Ch
|
|
101
101
|
my @csvTags; # order of tags for first file with CSV option (lower case)
|
102
102
|
my @delFiles; # list of files to delete
|
103
103
|
my @dynamicFiles; # list of -tagsFromFile files with dynamic names and -TAG<=FMT pairs
|
104
|
+
my (@echo3, @echo4);# stdout and stderr echo after processing is complete
|
104
105
|
my @efile; # files for writing list of error/fail/same file names
|
105
106
|
my @exclude; # list of excluded tags
|
106
|
-
my (@echo3, @echo4);# stdout and stderr echo after processing is complete
|
107
107
|
my @files; # list of files and directories to scan
|
108
108
|
my @moreArgs; # more arguments to process after -stay_open -@
|
109
109
|
my @newValues; # list of new tag values to set
|
@@ -118,7 +118,6 @@ my %csvTags; # lookup for all found tags with CSV option (lower case keys
|
|
118
118
|
my %database; # lookup for database information based on file name (in ExifTool Charset)
|
119
119
|
my %filterExt; # lookup for filtered extensions
|
120
120
|
my %ignore; # directory names to ignore
|
121
|
-
my $ignoreHidden; # flag to ignore hidden files
|
122
121
|
my %outComma; # flag that output text file needs a comma
|
123
122
|
my %outTrailer; # trailer for output text file
|
124
123
|
my %preserveTime; # preserved timestamps for files
|
@@ -130,6 +129,7 @@ my %usedFileName; # lookup for file names we already used in TestName feature
|
|
130
129
|
my %utf8FileName; # lookup for file names that are UTF-8 encoded
|
131
130
|
my %warnedOnce; # lookup for once-only warnings
|
132
131
|
my %wext; # -W extensions to write
|
132
|
+
my %wroteHEAD; # list of output txt files to which we wrote HEAD
|
133
133
|
my $allGroup; # show group name for all tags
|
134
134
|
my $altEnc; # alternate character encoding if not UTF-8
|
135
135
|
my $argFormat; # use exiftool argument-format output
|
@@ -175,6 +175,7 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
|
|
175
175
|
my $geoOnly; # flag to extract Geolocation tags only
|
176
176
|
my $helped; # flag to avoid printing help if no tags specified
|
177
177
|
my $html; # flag for html-formatted output (2=html dump)
|
178
|
+
my $ignoreHidden; # flag to ignore hidden files
|
178
179
|
my $interrupted; # flag set if CTRL-C is pressed during a critical process
|
179
180
|
my $isBinary; # true if value is a SCALAR ref
|
180
181
|
my $isWriting; # flag set if we are writing tags
|
@@ -227,7 +228,6 @@ my $validFile; # flag indicating we processed a valid file
|
|
227
228
|
my $verbose; # verbose setting
|
228
229
|
my $vout; # verbose output file reference (\*STDOUT or \*STDERR by default)
|
229
230
|
my $windowTitle; # title for console window
|
230
|
-
my %wroteHEAD; # list of output txt files to which we wrote HEAD
|
231
231
|
my $xml; # flag for XML-formatted output
|
232
232
|
|
233
233
|
# flag to keep the input -@ argfile open:
|
@@ -451,8 +451,10 @@ undef @efile;
|
|
451
451
|
undef @exclude;
|
452
452
|
undef @files;
|
453
453
|
undef @newValues;
|
454
|
+
undef @requestTags;
|
454
455
|
undef @srcFmt;
|
455
456
|
undef @tags;
|
457
|
+
undef %altFile;
|
456
458
|
undef %appended;
|
457
459
|
undef %countLink;
|
458
460
|
undef %created;
|
@@ -472,6 +474,7 @@ undef %usedFileName;
|
|
472
474
|
undef %utf8FileName;
|
473
475
|
undef %warnedOnce;
|
474
476
|
undef %wext;
|
477
|
+
undef %wroteHEAD;
|
475
478
|
undef $allGroup;
|
476
479
|
undef $altEnc;
|
477
480
|
undef $argFormat;
|
@@ -488,8 +491,8 @@ undef $doSetFileName;
|
|
488
491
|
undef $doUnzip;
|
489
492
|
undef $end;
|
490
493
|
undef $endDir;
|
491
|
-
undef $escapeHTML;
|
492
494
|
undef $escapeC;
|
495
|
+
undef $escapeHTML;
|
493
496
|
undef $evalWarning;
|
494
497
|
undef $executeID;
|
495
498
|
undef $failCondition;
|
@@ -500,18 +503,22 @@ undef $fixLen;
|
|
500
503
|
undef $forcePrint;
|
501
504
|
undef $geoOnly;
|
502
505
|
undef $ignoreHidden;
|
506
|
+
undef $isBinary;
|
503
507
|
undef $joinLists;
|
504
508
|
undef $langOpt;
|
509
|
+
undef $listDir;
|
505
510
|
undef $listItem;
|
506
511
|
undef $multiFile;
|
507
512
|
undef $noBinary;
|
508
513
|
undef $outOpt;
|
514
|
+
undef $plot;
|
509
515
|
undef $preserveTime;
|
510
516
|
undef $progress;
|
511
517
|
undef $progressCount;
|
512
518
|
undef $progressIncr;
|
513
519
|
undef $progressMax;
|
514
520
|
undef $progressNext;
|
521
|
+
undef $rafStdin;
|
515
522
|
undef $recurse;
|
516
523
|
undef $scanWritable;
|
517
524
|
undef $sectHeader;
|
@@ -521,6 +528,7 @@ undef $showTagID;
|
|
521
528
|
undef $structOpt;
|
522
529
|
undef $tagOut;
|
523
530
|
undef $textOut;
|
531
|
+
undef $textOut2;
|
524
532
|
undef $textOverwrite;
|
525
533
|
undef $tmpFile;
|
526
534
|
undef $tmpText;
|
@@ -2529,7 +2537,7 @@ T2: foreach $t2 (@tags2) {
|
|
2529
2537
|
# print the results for this file
|
2530
2538
|
if (%printFmt) {
|
2531
2539
|
# output using print format file (-p) option
|
2532
|
-
my ($type,
|
2540
|
+
my ($type, @doc, $grp, $lastDoc, $cache);
|
2533
2541
|
$fileTrailer = '';
|
2534
2542
|
# repeat for each embedded document if necessary (only if -ee used)
|
2535
2543
|
if ($et->Options('ExtractEmbedded')) {
|
@@ -2538,7 +2546,8 @@ T2: foreach $t2 (@tags2) {
|
|
2538
2546
|
} else {
|
2539
2547
|
$lastDoc = 0;
|
2540
2548
|
}
|
2541
|
-
for ($doc=0; $doc<=$lastDoc;
|
2549
|
+
for ($doc[0]=0; $doc[0]<=$lastDoc; ) {
|
2550
|
+
my $doc = join '-', @doc;
|
2542
2551
|
my ($skipBody, $opt);
|
2543
2552
|
foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
|
2544
2553
|
my $prf = $printFmt{$type} or next;
|
@@ -2548,7 +2557,7 @@ T2: foreach $t2 (@tags2) {
|
|
2548
2557
|
}
|
2549
2558
|
next if $type eq 'BODY' and $skipBody;
|
2550
2559
|
# silence "IF" warnings and warnings for subdocuments > 1
|
2551
|
-
if ($type eq 'IF' or ($doc > 1 and not $$et{OPTIONS}{IgnoreMinorErrors})) {
|
2560
|
+
if ($type eq 'IF' or (($doc[0] > 1 or @doc > 1) and not $$et{OPTIONS}{IgnoreMinorErrors})) {
|
2552
2561
|
$opt = 'Silent';
|
2553
2562
|
} else {
|
2554
2563
|
$opt = 'Warn';
|
@@ -2587,6 +2596,14 @@ T2: foreach $t2 (@tags2) {
|
|
2587
2596
|
print $fp @lines;
|
2588
2597
|
}
|
2589
2598
|
}
|
2599
|
+
# find next available doc-subdoc
|
2600
|
+
push @doc, 1;
|
2601
|
+
while (@doc > 1) {
|
2602
|
+
my $nextDoc = join '-', @doc;
|
2603
|
+
last if $$et{HAS_DOC}{$nextDoc};
|
2604
|
+
pop @doc;
|
2605
|
+
++$doc[-1];
|
2606
|
+
}
|
2590
2607
|
}
|
2591
2608
|
delete $printFmt{HEAD} unless defined $outfile; # print header only once per output file
|
2592
2609
|
my $errs = $et->GetInfo('Warning', 'Error');
|
@@ -4518,6 +4535,10 @@ sub SuggestedExtension($$$)
|
|
4518
4535
|
} elsif ($$valPt =~ /^.{4}ftyp(3gp|mp4|f4v|qt )/s) {
|
4519
4536
|
my %movType = ( 'qt ' => 'mov' );
|
4520
4537
|
$ext = $movType{$1} || $1;
|
4538
|
+
} elsif ($$valPt =~ /^<(!DOCTYPE )?html/i) {
|
4539
|
+
$ext = 'html';
|
4540
|
+
} elsif ($$valPt =~ /^[\n\r]*\{[\n\r]*\\rtf/) {
|
4541
|
+
$ext = 'rtf';
|
4521
4542
|
} elsif ($$valPt !~ /^.{0,4096}\0/s) {
|
4522
4543
|
$ext = 'txt';
|
4523
4544
|
} elsif ($$valPt =~ /^BM.{15}\0/s) {
|
@@ -5054,50 +5075,51 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
5054
5075
|
|
5055
5076
|
File Types
|
5056
5077
|
------------+-------------+-------------+-------------+------------
|
5057
|
-
360 r/w |
|
5058
|
-
3FR r |
|
5059
|
-
3G2 r/w |
|
5060
|
-
3GP r/w |
|
5061
|
-
7Z r |
|
5062
|
-
A r |
|
5063
|
-
AA r |
|
5064
|
-
AAC r |
|
5065
|
-
AAE r |
|
5066
|
-
AAX r/w |
|
5067
|
-
ACR r |
|
5068
|
-
AFM r |
|
5069
|
-
AI r/w |
|
5070
|
-
AIFF r |
|
5071
|
-
APE r |
|
5072
|
-
ARQ r/w |
|
5073
|
-
ARW r/w |
|
5074
|
-
ASF r |
|
5075
|
-
AVI r |
|
5076
|
-
AVIF r/w |
|
5077
|
-
AZW r |
|
5078
|
-
BMP r |
|
5079
|
-
BPG r |
|
5080
|
-
BTF r |
|
5081
|
-
C2PA r |
|
5082
|
-
CHM r |
|
5083
|
-
COS r |
|
5084
|
-
CR2 r/w |
|
5085
|
-
CR3 r/w |
|
5086
|
-
CRM r/w |
|
5087
|
-
CRW r/w |
|
5088
|
-
CS1 r/w |
|
5089
|
-
CSV r |
|
5090
|
-
CUR r |
|
5091
|
-
CZI r |
|
5092
|
-
DCM r |
|
5093
|
-
DCP r/w |
|
5094
|
-
DCR r |
|
5095
|
-
DFONT r |
|
5096
|
-
DIVX r |
|
5097
|
-
DJVU r |
|
5098
|
-
DLL r |
|
5099
|
-
DNG r/w |
|
5100
|
-
DOC r |
|
5078
|
+
360 r/w | DPX r | JNG r/w | ODP r | RSRC r
|
5079
|
+
3FR r | DR4 r/w/c | JP2 r/w | ODS r | RTF r
|
5080
|
+
3G2 r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
|
5081
|
+
3GP r/w | DV r | JSON r | OFR r | RWL r/w
|
5082
|
+
7Z r | DVB r/w | JXL r/w | OGG r | RWZ r
|
5083
|
+
A r | DVR-MS r | K25 r | OGV r | RM r
|
5084
|
+
AA r | DYLIB r | KDC r | ONP r | SEQ r
|
5085
|
+
AAC r | EIP r | KEY r | OPUS r | SKETCH r
|
5086
|
+
AAE r | EPS r/w | LA r | ORF r/w | SO r
|
5087
|
+
AAX r/w | EPUB r | LFP r | ORI r/w | SR2 r/w
|
5088
|
+
ACR r | ERF r/w | LIF r | OTF r | SRF r
|
5089
|
+
AFM r | EXE r | LNK r | PAC r | SRW r/w
|
5090
|
+
AI r/w | EXIF r/w/c | LRV r/w | PAGES r | SVG r
|
5091
|
+
AIFF r | EXR r | M2TS r | PBM r/w | SWF r
|
5092
|
+
APE r | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
|
5093
|
+
ARQ r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
|
5094
|
+
ARW r/w | FFF r/w | MAX r | PCD r | TNEF r
|
5095
|
+
ASF r | FITS r | MEF r/w | PCX r | TORRENT r
|
5096
|
+
AVI r | FLA r | MIE r/w/c | PDB r | TTC r
|
5097
|
+
AVIF r/w | FLAC r | MIFF r | PDF r/w | TTF r
|
5098
|
+
AZW r | FLIF r/w | MKA r | PEF r/w | TXT r
|
5099
|
+
BMP r | FLV r | MKS r | PFA r | VCF r
|
5100
|
+
BPG r | FPF r | MKV r | PFB r | VNT r
|
5101
|
+
BTF r | FPX r | MNG r/w | PFM r | VRD r/w/c
|
5102
|
+
C2PA r | GIF r/w | MOBI r | PGF r | VSD r
|
5103
|
+
CHM r | GLV r/w | MODD r | PGM r/w | WAV r
|
5104
|
+
COS r | GPR r/w | MOI r | PLIST r | WDP r/w
|
5105
|
+
CR2 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
|
5106
|
+
CR3 r/w | HDP r/w | MOV r/w | PMP r | WEBM r
|
5107
|
+
CRM r/w | HDR r | MP3 r | PNG r/w | WMA r
|
5108
|
+
CRW r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
|
5109
|
+
CS1 r/w | HEIF r/w | MPC r | PPT r | WPG r
|
5110
|
+
CSV r | HTML r | MPG r | PPTX r | WTV r
|
5111
|
+
CUR r | ICC r/w/c | MPO r/w | PS r/w | WV r
|
5112
|
+
CZI r | ICO r | MQV r/w | PSB r/w | X3F r/w
|
5113
|
+
DCM r | ICS r | MRC r | PSD r/w | XCF r
|
5114
|
+
DCP r/w | IDML r | MRW r/w | PSP r | XISF r
|
5115
|
+
DCR r | IIQ r/w | MXF r | QTIF r/w | XLS r
|
5116
|
+
DFONT r | IND r/w | NEF r/w | R3D r | XLSX r
|
5117
|
+
DIVX r | INSP r/w | NKA r | RA r | XMP r/w/c
|
5118
|
+
DJVU r | INSV r | NKSC r/w | RAF r/w | ZIP r
|
5119
|
+
DLL r | INX r | NRW r/w | RAM r |
|
5120
|
+
DNG r/w | ISO r | NUMBERS r | RAR r |
|
5121
|
+
DOC r | ITC r | NXD r | RAW r/w |
|
5122
|
+
DOCX r | J2C r | O r | RIFF r |
|
5101
5123
|
|
5102
5124
|
Meta Information
|
5103
5125
|
----------------------+----------------------+---------------------
|
@@ -5809,12 +5831,12 @@ escaped. The inverse conversion is applied when writing tags.
|
|
5809
5831
|
=item B<-f> (B<-forcePrint>)
|
5810
5832
|
|
5811
5833
|
Force printing of tags even if they don't exist. This option applies to
|
5812
|
-
tags specified on the command line, or with the B<-p>, B<-if>
|
5813
|
-
|
5814
|
-
is set to a dash (C<->) by
|
5815
|
-
|
5816
|
-
|
5817
|
-
B<-csv>=I<CSVFILE> feature.
|
5834
|
+
tags specified on the command line, or with the B<-p>, B<-if> (unless the
|
5835
|
+
API UndefTags option is set), B<-fileNUM> or B<-tagsFromFile> options. When
|
5836
|
+
B<-f> is used, the value of any missing tag is set to a dash (C<->) by
|
5837
|
+
default, but this may be configured via the API MissingTagValue option.
|
5838
|
+
B<-f> is also used to add a 'flags' attribute to the B<-listx> output, or to
|
5839
|
+
allow tags to be deleted when writing with the B<-csv>=I<CSVFILE> feature.
|
5818
5840
|
|
5819
5841
|
=item B<-g>[I<NUM>][:I<NUM>...] (B<-groupHeadings>)
|
5820
5842
|
|
@@ -5979,7 +6001,7 @@ translation, follow these steps (you must have Perl installed for this):
|
|
5979
6001
|
6. Edit the generated language module lib/Image/ExifTool/Lang/ru.pm, and
|
5980
6002
|
search and replace all 'MISSING' strings in the file with your translations.
|
5981
6003
|
|
5982
|
-
7. Email the module ('ru.pm' in this example) to
|
6004
|
+
7. Email the module ('ru.pm' in this example) to exiftool@gmail.com
|
5983
6005
|
|
5984
6006
|
8. Thank you!!
|
5985
6007
|
|
@@ -5989,7 +6011,7 @@ For list-type tags, this causes only the item with the specified index to be
|
|
5989
6011
|
extracted. I<INDEX> is 0 for the first item in the list. Negative indices
|
5990
6012
|
may also be used to reference items from the end of the list. Has no effect
|
5991
6013
|
on single-valued tags. Also applies to tag values when copying from a tag,
|
5992
|
-
and in B<-if>
|
6014
|
+
and in B<-if>, B<-p> and B<-fileNUM> arguments.
|
5993
6015
|
|
5994
6016
|
=item B<-n> (B<--printConv>)
|
5995
6017
|
|
@@ -6054,7 +6076,7 @@ with this command:
|
|
6054
6076
|
|
6055
6077
|
produces output like this:
|
6056
6078
|
|
6057
|
-
-- Generated by ExifTool 13.
|
6079
|
+
-- Generated by ExifTool 13.34 --
|
6058
6080
|
File: a.jpg - 2003:10:31 15:44:19
|
6059
6081
|
(f/5.6, 1/60s, ISO 100)
|
6060
6082
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6602,11 +6624,8 @@ Notes:
|
|
6602
6624
|
|
6603
6625
|
1) The B<-n> and B<-b> options also apply to tags used in I<EXPR>.
|
6604
6626
|
|
6605
|
-
2)
|
6606
|
-
|
6607
|
-
also specified on the command line. The alternative is to use the
|
6608
|
-
C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I<EXPR>
|
6609
|
-
to test for the existence of EXIF tags.)
|
6627
|
+
2) The API RequestTags option is automatically set for all tags used in the
|
6628
|
+
B<-if> condition.
|
6610
6629
|
|
6611
6630
|
3) Tags in the string are interpolated in a similar way to B<-p> before the
|
6612
6631
|
expression is evaluated. In this interpolation, C<$/> is converted to a
|
@@ -6628,8 +6647,11 @@ C<$Copy1:TAG>, C<$Copy2:TAG>, etc).
|
|
6628
6647
|
command when B<-execute> was used, and may be used like any other tag in the
|
6629
6648
|
condition (ie. "$OK").
|
6630
6649
|
|
6631
|
-
7) The
|
6632
|
-
B<-
|
6650
|
+
7) The values of undefined tags in the expression are affected by the B<-f>
|
6651
|
+
and B<-m> options unless the API UndefTags option is also set.
|
6652
|
+
|
6653
|
+
8) The condition fails if a Perl error occurs. This could happen for
|
6654
|
+
instance if an undefined value (eg. a missing tag) is used improperly.
|
6633
6655
|
|
6634
6656
|
=item B<-m> (B<-ignoreMinorErrors>)
|
6635
6657
|
|
@@ -6641,8 +6663,9 @@ so ExifTool leaves it up to you to make the final decision. Minor errors
|
|
6641
6663
|
and warnings are indicated by "[minor]" at the start of the message.
|
6642
6664
|
Warnings which affect processing when ignored are indicated by "[Minor]"
|
6643
6665
|
(with a capital "M"). Note that this causes missing values in
|
6644
|
-
B<-tagsFromFile>, B<-p> and B<-
|
6645
|
-
rather than an undefined value
|
6666
|
+
B<-tagsFromFile>, B<-p>, B<-if> and B<-fileNUM> strings to be set to an
|
6667
|
+
empty string rather than an undefined value (but this may be avoided for
|
6668
|
+
B<-if> using the API UndefTags option).
|
6646
6669
|
|
6647
6670
|
=item B<-o> I<OUTFILE> or I<FMT> (B<-out>)
|
6648
6671
|
|
@@ -7254,11 +7277,11 @@ Set user parameter. I<PARAM> is an arbitrary user parameter name. This is
|
|
7254
7277
|
an interface to the API UserParam option (see the
|
7255
7278
|
L<Image::ExifTool Options|Image::ExifTool/Options> documentation), and
|
7256
7279
|
provides a method to access user-defined parameters in arguments to the
|
7257
|
-
B<-if> and B<-
|
7258
|
-
tag (C<#>) to I<PARAM> (eg. C<-userParam MyTag#=yes>) also
|
7259
|
-
parameter to be extracted as a normal tag in the UserParam group.
|
7260
|
-
to the B<-api> option, the parameter value is set to 1 if I<=VAL>
|
7261
|
-
omitted, undef if just I<VAL> is omitted with C<=>, or an empty string if
|
7280
|
+
B<-if>, B<-p> and B<-fileNUM> options as if they were any other tag.
|
7281
|
+
Appending a hash tag (C<#>) to I<PARAM> (eg. C<-userParam MyTag#=yes>) also
|
7282
|
+
causes the parameter to be extracted as a normal tag in the UserParam group.
|
7283
|
+
Similar to the B<-api> option, the parameter value is set to 1 if I<=VAL>
|
7284
|
+
is omitted, undef if just I<VAL> is omitted with C<=>, or an empty string if
|
7262
7285
|
I<VAL> is omitted with C<^=>.
|
7263
7286
|
|
7264
7287
|
exiftool -p '$test from $filename' -userparam test=Hello FILE
|
@@ -7268,18 +7291,20 @@ I<VAL> is omitted with C<^=>.
|
|
7268
7291
|
=head3 Advanced formatting feature
|
7269
7292
|
|
7270
7293
|
An advanced formatting feature allows modification of the value of any tag
|
7271
|
-
interpolated within a B<-if> or B<-
|
7272
|
-
redirection string. Tag names within these strings are
|
7273
|
-
symbol, and an arbitrary Perl expression may be applied
|
7274
|
-
placing braces around the tag name and inserting the
|
7275
|
-
name, separated by a semicolon (ie. C<${TAG;EXPR}>).
|
7276
|
-
the value of the tag through the default input
|
7277
|
-
access to the full ExifTool API through the
|
7278
|
-
(C<$self>) and the tag key (C<$tag>). It may
|
7279
|
-
including translation (C<tr///>) and
|
7280
|
-
note that braces within the
|
7281
|
-
|
7282
|
-
|
7294
|
+
interpolated within a B<-if>, B<-p> or B<-fileNUM> argument, or a
|
7295
|
+
B<-tagsFromFile> redirection string. Tag names within these strings are
|
7296
|
+
prefixed by a C<$> symbol, and an arbitrary Perl expression may be applied
|
7297
|
+
to the tag value by placing braces around the tag name and inserting the
|
7298
|
+
expression after the name, separated by a semicolon (ie. C<${TAG;EXPR}>).
|
7299
|
+
The expression acts on the value of the tag through the default input
|
7300
|
+
variable (C<$_>), and has access to the full ExifTool API through the
|
7301
|
+
current ExifTool object (C<$self>) and the tag key (C<$tag>). It may
|
7302
|
+
contain any valid Perl code, including translation (C<tr///>) and
|
7303
|
+
substitution (C<s///>) operations, but note that braces within the
|
7304
|
+
expression must be balanced. If the expression does not modify C<$_> the
|
7305
|
+
original tag value is returned. The example below prints the camera Make
|
7306
|
+
with spaces translated to underlines, and multiple consecutive underlines
|
7307
|
+
replaced by a single underline:
|
7283
7308
|
|
7284
7309
|
exiftool -p '${make;tr/ /_/;s/__+/_/g}' image.jpg
|
7285
7310
|
|
@@ -7298,6 +7323,8 @@ used in file names.)
|
|
7298
7323
|
|
7299
7324
|
=head4 Helper functions
|
7300
7325
|
|
7326
|
+
Note that function names are case sensitive.
|
7327
|
+
|
7301
7328
|
C<DateFmt>
|
7302
7329
|
|
7303
7330
|
Simplifies reformatting of individual date/time values. This function acts
|
@@ -7335,8 +7362,6 @@ rewritten unnecessarily:
|
|
7335
7362
|
|
7336
7363
|
exiftool -sep '##' '-keywords<${keywords;NoDups(1)}' a.jpg
|
7337
7364
|
|
7338
|
-
Note that function names are case sensitive.
|
7339
|
-
|
7340
7365
|
ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
|
7341
7366
|
function largely redundant, with all the functionality except the ability to
|
7342
7367
|
avoid rewriting the file if there are no duplicates, but with the advantage
|
@@ -271,11 +271,11 @@ tags remain.
|
|
271
271
|
|
272
272
|
The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
|
273
273
|
other tags which are not part of the EXIF specification, but may co-exist
|
274
|
-
with EXIF tags in some images. Tags which are part of the EXIF
|
274
|
+
with EXIF tags in some images. Tags which are part of the EXIF 3.0
|
275
275
|
specification have an underlined B<Tag Name> in the HTML version of this
|
276
276
|
documentation. See
|
277
|
-
L<https://
|
278
|
-
for the official EXIF
|
277
|
+
L<https://www.cipa.jp/std/documents/download_e.html?CIPA_DC-008-2024-E>
|
278
|
+
for the official EXIF 3.0 specification.
|
279
279
|
},
|
280
280
|
GPS => q{
|
281
281
|
These GPS tags are part of the EXIF standard, and are stored in a separate
|
@@ -2338,7 +2338,8 @@ sub WriteTagNames($$)
|
|
2338
2338
|
my ($hid, $showGrp);
|
2339
2339
|
# widths of the different columns in the POD documentation
|
2340
2340
|
my ($wID,$wTag,$wReq,$wGrp) = (8,36,24,10);
|
2341
|
-
my ($composite, $derived, $notes, $longTags, $
|
2341
|
+
my ($composite, $derived, $notes, $longTags, $prefix);
|
2342
|
+
my $wasLong = 0;
|
2342
2343
|
if ($short eq 'Shortcuts') {
|
2343
2344
|
$derived = '<th>Refers To</th>';
|
2344
2345
|
$composite = 2;
|
@@ -2396,7 +2397,7 @@ sub WriteTagNames($$)
|
|
2396
2397
|
$wID -= $longTag - $wTag;
|
2397
2398
|
$wTag = $longTag;
|
2398
2399
|
}
|
2399
|
-
|
2400
|
+
++$wasLong if $wID <= $self->{LONG_ID}->{$tableName};
|
2400
2401
|
}
|
2401
2402
|
} elsif ($composite) {
|
2402
2403
|
$wTag += $wID - $wReq;
|
@@ -2471,6 +2472,7 @@ sub WriteTagNames($$)
|
|
2471
2472
|
if ($over <= $wTag - length($$tagNames[0])) {
|
2472
2473
|
$wTag2 -= $over;
|
2473
2474
|
$w += $over;
|
2475
|
+
--$wasLong;
|
2474
2476
|
} else {
|
2475
2477
|
# put tag name on next line if ID is too long
|
2476
2478
|
$idStr = " $tagIDstr\n " . (' ' x $w);
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.95';
|
92
92
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
@@ -2151,6 +2151,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2151
2151
|
TagTable => 'Image::ExifTool::Canon::RawBurstInfo',
|
2152
2152
|
}
|
2153
2153
|
},
|
2154
|
+
# 0x4049 - related to croping (forum13491) - "8 0 0 0" = no crop, "8 1 0 1" = crop enabled
|
2154
2155
|
0x4059 => { #forum16111
|
2155
2156
|
Name => 'LevelInfo',
|
2156
2157
|
SubDirectory => {
|
@@ -2621,6 +2622,10 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2621
2622
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
2622
2623
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
2623
2624
|
# 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
|
2625
|
+
50 => { #github340
|
2626
|
+
Name => 'FocusBracketing',
|
2627
|
+
PrintConv => { 0 => 'Disable', 1 => 'Enable' },
|
2628
|
+
},
|
2624
2629
|
51 => { #forum16036 (EOS R models)
|
2625
2630
|
Name => 'Clarity',
|
2626
2631
|
PrintConv => {
|
@@ -2628,6 +2633,10 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2628
2633
|
0x7fff => 'n/a',
|
2629
2634
|
},
|
2630
2635
|
},
|
2636
|
+
52 => { #github336
|
2637
|
+
Name => 'HDR-PQ',
|
2638
|
+
PrintConv => { %offOn, -1 => 'n/a' },
|
2639
|
+
},
|
2631
2640
|
);
|
2632
2641
|
|
2633
2642
|
# focal length information (MakerNotes tag 0x02)
|
@@ -8931,7 +8940,7 @@ my %ciMaxFocal = (
|
|
8931
8940
|
},
|
8932
8941
|
3 => {
|
8933
8942
|
Name => 'HighlightTonePriority',
|
8934
|
-
PrintConv =>
|
8943
|
+
PrintConv => { %offOn, 2 => 'Enhanced' }, #github339 (Enhanced)
|
8935
8944
|
},
|
8936
8945
|
4 => {
|
8937
8946
|
Name => 'LongExposureNoiseReduction',
|
@@ -9323,6 +9332,14 @@ my %filterConv = (
|
|
9323
9332
|
3 => 'Vehicles',
|
9324
9333
|
},
|
9325
9334
|
},
|
9335
|
+
21 => { #github344 (R6)
|
9336
|
+
Name => 'SubjectSwitching',
|
9337
|
+
PrintConv => {
|
9338
|
+
0 => 'Initial Priority',
|
9339
|
+
1 => 'On Subject',
|
9340
|
+
2 => 'Switch Subject',
|
9341
|
+
},
|
9342
|
+
},
|
9326
9343
|
24 => { #forum16068
|
9327
9344
|
Name => 'EyeDetection',
|
9328
9345
|
PrintConv => \%offOn,
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
58
58
|
use Image::ExifTool::MakerNotes;
|
59
59
|
|
60
|
-
$VERSION = '4.
|
60
|
+
$VERSION = '4.60';
|
61
61
|
|
62
62
|
sub ProcessExif($$$);
|
63
63
|
sub WriteExif($$$);
|
@@ -402,7 +402,7 @@ my %opcodeInfo = (
|
|
402
402
|
THM => 'THM - DCF thumbnail file',
|
403
403
|
},
|
404
404
|
},
|
405
|
-
0x2 => { #5
|
405
|
+
0x2 => { #5 (not in the EXIF spec)
|
406
406
|
Name => 'InteropVersion',
|
407
407
|
Description => 'Interoperability Version',
|
408
408
|
Protected => 1,
|
@@ -2029,7 +2029,7 @@ my %opcodeInfo = (
|
|
2029
2029
|
OffsetPair => -1,
|
2030
2030
|
},
|
2031
2031
|
0x8782 => 'T88Options', #20
|
2032
|
-
0x87ac => 'ImageLayer',
|
2032
|
+
0x87ac => 'ImageLayer', # Defined in the Mixed Raster Content part of RFC 2301
|
2033
2033
|
0x87af => { #30
|
2034
2034
|
Name => 'GeoTiffDirectory',
|
2035
2035
|
Format => 'undef',
|
@@ -4209,6 +4209,8 @@ my %opcodeInfo = (
|
|
4209
4209
|
},
|
4210
4210
|
},
|
4211
4211
|
# 0xc7d6 - int8u: 1 (SubIFD1 of Nikon Z6/Z7 NEF)
|
4212
|
+
0xc7d7 => { Name => 'ZIFMetadata', Binary => 1 },
|
4213
|
+
0xc7d8 => { Name => 'ZIFAnnotations', Binary => 1 },
|
4212
4214
|
0xc7e9 => { # DNG 1.5
|
4213
4215
|
Name => 'DepthFormat',
|
4214
4216
|
Writable => 'int16u',
|
@@ -6360,9 +6362,10 @@ sub ProcessExif($$$)
|
|
6360
6362
|
$et->Warn("Bad format ($format) for $dir entry $index", $inMakerNotes);
|
6361
6363
|
++$warnCount;
|
6362
6364
|
}
|
6363
|
-
# assume corrupted IFD if this is our first entry (except Sony ILCE
|
6364
|
-
|
6365
|
-
|
6365
|
+
# assume corrupted IFD if this is our first entry (except Sony ILCE which have an empty first entry)
|
6366
|
+
next if $index or $$et{Model} =~ /^ILCE/;
|
6367
|
+
# $et->Warn(sprintf('Format code 0x%x encountered -- Possibly corrupted IFD'));
|
6368
|
+
return 0;
|
6366
6369
|
}
|
6367
6370
|
}
|
6368
6371
|
my $formatStr = $formatName[$format]; # get name of this format
|