exiftool-vendored.pl 12.84.0 → 12.89.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 +94 -3
- package/bin/MANIFEST +1 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +16 -16
- package/bin/README +47 -46
- package/bin/build_geolocation +96 -20
- package/bin/config_files/example.config +5 -0
- package/bin/config_files/onone.config +28 -0
- package/bin/exiftool +67 -57
- package/bin/lib/Image/ExifTool/AIFF.pm +8 -4
- package/bin/lib/Image/ExifTool/ASF.pm +4 -1
- package/bin/lib/Image/ExifTool/Apple.pm +2 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -8
- package/bin/lib/Image/ExifTool/Canon.pm +100 -7
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +5 -2
- package/bin/lib/Image/ExifTool/DPX.pm +3 -3
- package/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +18 -8
- package/bin/lib/Image/ExifTool/ID3.pm +36 -8
- package/bin/lib/Image/ExifTool/InDesign.pm +8 -4
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
- package/bin/lib/Image/ExifTool/Matroska.pm +66 -10
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +21 -2
- package/bin/lib/Image/ExifTool/Olympus.pm +27 -17
- package/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- package/bin/lib/Image/ExifTool/Pentax.pm +139 -22
- package/bin/lib/Image/ExifTool/QuickTime.pm +70 -16
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +24 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +20 -10
- package/bin/lib/Image/ExifTool/Samsung.pm +29 -1
- package/bin/lib/Image/ExifTool/Sony.pm +21 -11
- package/bin/lib/Image/ExifTool/TagLookup.pm +6806 -6782
- package/bin/lib/Image/ExifTool/TagNames.pod +124 -34
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +86 -16
- package/bin/lib/Image/ExifTool/Writer.pl +8 -6
- package/bin/lib/Image/ExifTool/XMP.pm +10 -8
- package/bin/lib/Image/ExifTool/XMP2.pl +51 -30
- package/bin/lib/Image/ExifTool/ZIP.pm +8 -4
- package/bin/lib/Image/ExifTool.pm +78 -45
- package/bin/lib/Image/ExifTool.pod +66 -50
- package/bin/perl-Image-ExifTool.spec +45 -45
- package/bin/pp_build_exe.args +4 -4
- package/package.json +3 -3
package/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.89';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -51,7 +51,7 @@ sub CleanXML($);
|
|
|
51
51
|
sub EncodeXML($);
|
|
52
52
|
sub FormatXML($$$);
|
|
53
53
|
sub EscapeJSON($;$);
|
|
54
|
-
sub FormatJSON(
|
|
54
|
+
sub FormatJSON($$$;$);
|
|
55
55
|
sub PrintCSV();
|
|
56
56
|
sub AddGroups($$$$);
|
|
57
57
|
sub ConvertBinary($);
|
|
@@ -735,6 +735,7 @@ for (;;) {
|
|
|
735
735
|
push @isUTF8, 10 if $isAlt;
|
|
736
736
|
for ($i=0; ; ++$i) {
|
|
737
737
|
my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
|
|
738
|
+
$#entry = 9; # remove everything after latitude (eg. feature type)
|
|
738
739
|
next if $minPop and $entry[7] < $minPop;
|
|
739
740
|
next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
|
|
740
741
|
push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
|
|
@@ -1801,7 +1802,12 @@ if ($outOpt) {
|
|
|
1801
1802
|
my $type = GetFileType($outOpt);
|
|
1802
1803
|
if ($type) {
|
|
1803
1804
|
# (must test original file name because we can write .webp but not other RIFF types)
|
|
1804
|
-
|
|
1805
|
+
my $canWrite = CanWrite($outOpt);
|
|
1806
|
+
unless ($canWrite) {
|
|
1807
|
+
if (defined $canWrite and $canWrite eq '') {
|
|
1808
|
+
$type = Image::ExifTool::GetFileExtension($outOpt);
|
|
1809
|
+
$type = uc($outOpt) unless defined $type;
|
|
1810
|
+
}
|
|
1805
1811
|
Warn "Can't write $type files\n";
|
|
1806
1812
|
$rtnVal = 1;
|
|
1807
1813
|
next;
|
|
@@ -2365,7 +2371,7 @@ sub GetImageInfo($$)
|
|
|
2365
2371
|
my $errs = $et->GetInfo('Warning', 'Error');
|
|
2366
2372
|
PrintErrors($et, $errs, $file) and EFile($file);
|
|
2367
2373
|
} elsif (not $disableOutput) {
|
|
2368
|
-
my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
|
|
2374
|
+
my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep, $quote);
|
|
2369
2375
|
if ($fp) {
|
|
2370
2376
|
# print file header (only once)
|
|
2371
2377
|
if ($fileHeader) {
|
|
@@ -2408,6 +2414,7 @@ sub GetImageInfo($$)
|
|
|
2408
2414
|
} elsif ($json) {
|
|
2409
2415
|
# set delimiters for JSON or PHP output
|
|
2410
2416
|
($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
|
|
2417
|
+
$quote = 1 if $$et{OPTIONS}{StructFormat} and $$et{OPTIONS}{StructFormat} eq 'JSONQ';
|
|
2411
2418
|
print $fp ",\n" if $comma;
|
|
2412
2419
|
print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file),1);
|
|
2413
2420
|
$comma = 1;
|
|
@@ -2701,7 +2708,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2701
2708
|
}
|
|
2702
2709
|
}
|
|
2703
2710
|
}
|
|
2704
|
-
FormatJSON($fp, $val, $ind);
|
|
2711
|
+
FormatJSON($fp, $val, $ind, $quote);
|
|
2705
2712
|
$comma = 1;
|
|
2706
2713
|
next;
|
|
2707
2714
|
}
|
|
@@ -3493,17 +3500,17 @@ sub EscapeJSON($;$)
|
|
|
3493
3500
|
|
|
3494
3501
|
#------------------------------------------------------------------------------
|
|
3495
3502
|
# Print JSON or PHP value
|
|
3496
|
-
# Inputs: 0) file reference, 1) value, 2) indentation
|
|
3497
|
-
sub FormatJSON(
|
|
3503
|
+
# Inputs: 0) file reference, 1) value, 2) indentation, 3) true to quote numbers
|
|
3504
|
+
sub FormatJSON($$$;$)
|
|
3498
3505
|
{
|
|
3499
3506
|
local $_;
|
|
3500
|
-
my ($fp, $val, $ind) = @_;
|
|
3507
|
+
my ($fp, $val, $ind, $quote) = @_;
|
|
3501
3508
|
my $comma;
|
|
3502
3509
|
if (not ref $val) {
|
|
3503
|
-
print $fp EscapeJSON($val);
|
|
3510
|
+
print $fp EscapeJSON($val, $quote);
|
|
3504
3511
|
} elsif (ref $val eq 'ARRAY') {
|
|
3505
3512
|
if ($joinLists and not ref $$val[0]) {
|
|
3506
|
-
print $fp EscapeJSON(join
|
|
3513
|
+
print $fp EscapeJSON(join($listSep, @$val), $quote);
|
|
3507
3514
|
} else {
|
|
3508
3515
|
my ($bra, $ket) = $json == 1 ? ('[',']') : ('Array(',')');
|
|
3509
3516
|
print $fp $bra;
|
|
@@ -4720,50 +4727,50 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4720
4727
|
|
|
4721
4728
|
File Types
|
|
4722
4729
|
------------+-------------+-------------+-------------+------------
|
|
4723
|
-
360 r/w | DOCX r | ITC r |
|
|
4724
|
-
3FR r | DPX r | J2C r |
|
|
4725
|
-
3G2 r/w | DR4 r/w/c | JNG r/w |
|
|
4726
|
-
3GP r/w | DSS r | JP2 r/w |
|
|
4727
|
-
7Z r | DV r | JPEG r/w |
|
|
4728
|
-
A r | DVB r/w | JSON r |
|
|
4729
|
-
AA r | DVR-MS r | JXL r/w |
|
|
4730
|
-
AAC r | DYLIB r | K25 r |
|
|
4731
|
-
AAE r | EIP r | KDC r |
|
|
4732
|
-
AAX r/w | EPS r/w | KEY r |
|
|
4733
|
-
ACR r | EPUB r | LA r |
|
|
4734
|
-
AFM r | ERF r/w | LFP r |
|
|
4735
|
-
AI r/w | EXE r | LIF r |
|
|
4736
|
-
AIFF r | EXIF r/w/c | LNK r |
|
|
4737
|
-
APE r | EXR r | LRV r/w |
|
|
4738
|
-
ARQ r/w | EXV r/w/c | M2TS r |
|
|
4739
|
-
ARW r/w | F4A/V r/w | M4A/V r/w |
|
|
4740
|
-
ASF r | FFF r/w | MACOS r |
|
|
4741
|
-
AVI r | FITS r | MAX r |
|
|
4742
|
-
AVIF r/w | FLA r | MEF r/w |
|
|
4743
|
-
AZW r | FLAC r | MIE r/w/c |
|
|
4744
|
-
BMP r | FLIF r/w | MIFF r |
|
|
4745
|
-
BPG r | FLV r | MKA r |
|
|
4746
|
-
BTF r | FPF r | MKS r |
|
|
4747
|
-
C2PA r | FPX r | MKV r |
|
|
4748
|
-
CHM r | GIF r/w | MNG r/w |
|
|
4749
|
-
COS r | GLV r/w | MOBI r |
|
|
4750
|
-
CR2 r/w | GPR r/w | MODD r |
|
|
4751
|
-
CR3 r/w | GZ r | MOI r |
|
|
4752
|
-
CRM r/w | HDP r/w | MOS r/w |
|
|
4753
|
-
CRW r/w | HDR r | MOV r/w |
|
|
4754
|
-
CS1 r/w | HEIC r/w | MP3 r |
|
|
4755
|
-
CSV r | HEIF r/w | MP4 r/w |
|
|
4756
|
-
CUR r | HTML r | MPC r |
|
|
4757
|
-
CZI r | ICC r/w/c | MPG r |
|
|
4758
|
-
DCM r | ICO r | MPO r/w |
|
|
4759
|
-
DCP r/w | ICS r | MQV r/w |
|
|
4760
|
-
DCR r | IDML r | MRC r |
|
|
4761
|
-
DFONT r | IIQ r/w | MRW r/w |
|
|
4762
|
-
DIVX r | IND r/w | MXF r |
|
|
4763
|
-
DJVU r | INSP r/w | NEF r/w |
|
|
4764
|
-
DLL r | INSV r |
|
|
4765
|
-
DNG r/w | INX r |
|
|
4766
|
-
DOC r | ISO r |
|
|
4730
|
+
360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
|
|
4731
|
+
3FR r | DPX r | J2C r | NXD r | RIFF r
|
|
4732
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
|
|
4733
|
+
3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
|
|
4734
|
+
7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
|
|
4735
|
+
A r | DVB r/w | JSON r | ODT r | RWL r/w
|
|
4736
|
+
AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
|
|
4737
|
+
AAC r | DYLIB r | K25 r | OGG r | RM r
|
|
4738
|
+
AAE r | EIP r | KDC r | OGV r | SEQ r
|
|
4739
|
+
AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
|
|
4740
|
+
ACR r | EPUB r | LA r | OPUS r | SO r
|
|
4741
|
+
AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
|
|
4742
|
+
AI r/w | EXE r | LIF r | ORI r/w | SRF r
|
|
4743
|
+
AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
|
|
4744
|
+
APE r | EXR r | LRV r/w | PAC r | SVG r
|
|
4745
|
+
ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
|
|
4746
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
|
|
4747
|
+
ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
|
|
4748
|
+
AVI r | FITS r | MAX r | PCX r | TORRENT r
|
|
4749
|
+
AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
|
|
4750
|
+
AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
|
|
4751
|
+
BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
|
|
4752
|
+
BPG r | FLV r | MKA r | PFA r | VCF r
|
|
4753
|
+
BTF r | FPF r | MKS r | PFB r | VNT r
|
|
4754
|
+
C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
|
|
4755
|
+
CHM r | GIF r/w | MNG r/w | PGF r | VSD r
|
|
4756
|
+
COS r | GLV r/w | MOBI r | PGM r/w | WAV r
|
|
4757
|
+
CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
|
|
4758
|
+
CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
|
|
4759
|
+
CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
|
|
4760
|
+
CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
|
|
4761
|
+
CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
|
|
4762
|
+
CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
|
|
4763
|
+
CUR r | HTML r | MPC r | PPTX r | WTV r
|
|
4764
|
+
CZI r | ICC r/w/c | MPG r | PS r/w | WV r
|
|
4765
|
+
DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
|
|
4766
|
+
DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
|
|
4767
|
+
DCR r | IDML r | MRC r | PSP r | XISF r
|
|
4768
|
+
DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
|
|
4769
|
+
DIVX r | IND r/w | MXF r | R3D r | XLSX r
|
|
4770
|
+
DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
|
|
4771
|
+
DLL r | INSV r | NKA r | RAF r/w | ZIP r
|
|
4772
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
4773
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
4767
4774
|
|
|
4768
4775
|
Meta Information
|
|
4769
4776
|
----------------------+----------------------+---------------------
|
|
@@ -5677,7 +5684,7 @@ with this command:
|
|
|
5677
5684
|
|
|
5678
5685
|
produces output like this:
|
|
5679
5686
|
|
|
5680
|
-
-- Generated by ExifTool 12.
|
|
5687
|
+
-- Generated by ExifTool 12.89 --
|
|
5681
5688
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5682
5689
|
(f/5.6, 1/60s, ISO 100)
|
|
5683
5690
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5916,7 +5923,8 @@ processed file by using %C (upper case) instead of %c. This allows a
|
|
|
5916
5923
|
sequential number to be added to output file names, even if the names are
|
|
5917
5924
|
different. For %C, a copy number of zero is not omitted as it is with %c.
|
|
5918
5925
|
A leading '-' causes the number to be reset at the start of each new
|
|
5919
|
-
directory
|
|
5926
|
+
directory (in the original directory structure if the files are being
|
|
5927
|
+
moved), and '+' has no effect. The number before the decimal place gives
|
|
5920
5928
|
the starting index, the number after the decimal place gives the field
|
|
5921
5929
|
width. The following examples show the output filenames when used with the
|
|
5922
5930
|
command C<exiftool rose.jpg star.jpg jet.jpg ...>:
|
|
@@ -6117,7 +6125,9 @@ B<-if> and B<-fileOrder> options for details.
|
|
|
6117
6125
|
=item B<-fileOrder>[I<NUM>] [-]I<TAG>
|
|
6118
6126
|
|
|
6119
6127
|
Set file processing order according to the sorted value of the specified
|
|
6120
|
-
I<TAG>.
|
|
6128
|
+
I<TAG>. Without this option, files are processed in the order returned by
|
|
6129
|
+
the system, which is commonly by file name, but this is filesystem
|
|
6130
|
+
dependent. For example, to process files in order of date:
|
|
6121
6131
|
|
|
6122
6132
|
exiftool -fileOrder DateTimeOriginal DIR
|
|
6123
6133
|
|
|
@@ -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.13';
|
|
22
22
|
|
|
23
23
|
# information for time/date-based tags (time zero is Jan 1, 1904)
|
|
24
24
|
my %timeInfo = (
|
|
@@ -226,9 +226,13 @@ sub ProcessAIFF($$)
|
|
|
226
226
|
# AIFF chunks are padded to an even number of bytes
|
|
227
227
|
my $len2 = $len + ($len & 0x01);
|
|
228
228
|
if ($len2 > 100000000) {
|
|
229
|
-
if ($len2 >= 0x80000000
|
|
230
|
-
$et->
|
|
231
|
-
|
|
229
|
+
if ($len2 >= 0x80000000) {
|
|
230
|
+
if (not $et->Options('LargeFileSupport')) {
|
|
231
|
+
$et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
|
|
232
|
+
last;
|
|
233
|
+
} elsif ($et->Options('LargeFileSupport') eq '2') {
|
|
234
|
+
$et->WarnOnce('Skipping large chunk (LargeFileSupport is 2)');
|
|
235
|
+
}
|
|
232
236
|
}
|
|
233
237
|
if ($tagInfo) {
|
|
234
238
|
$et->Warn("Skipping large $$tagInfo{Name} chunk (> 100 MB)");
|
|
@@ -17,7 +17,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
17
17
|
use Image::ExifTool::Exif;
|
|
18
18
|
use Image::ExifTool::RIFF;
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.26';
|
|
21
21
|
|
|
22
22
|
sub ProcessASF($$;$);
|
|
23
23
|
sub ProcessContentDescription($$$);
|
|
@@ -780,6 +780,9 @@ sub ProcessASF($$;$)
|
|
|
780
780
|
if ($size > 0x7fffffff * 4294967296) {
|
|
781
781
|
$err = 'Invalid ASF object size';
|
|
782
782
|
} elsif ($et->Options('LargeFileSupport')) {
|
|
783
|
+
if ($et->Options('LargeFileSupport') eq '2') {
|
|
784
|
+
$et->WarnOnce('Skipping large ASF object (LargeFileSupport is 2)');
|
|
785
|
+
}
|
|
783
786
|
if ($raf->Seek($size, 1)) {
|
|
784
787
|
$et->VPrint(0, " Skipped large ASF object ($size bytes)\n");
|
|
785
788
|
$pos += $size;
|
|
@@ -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.58';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -98,6 +98,8 @@ my %tweakOrder = (
|
|
|
98
98
|
GIMP => 'Microsoft',
|
|
99
99
|
DarwinCore => 'AFCP',
|
|
100
100
|
MWG => 'Shortcuts',
|
|
101
|
+
'FujiFilm::RAF' => 'FujiFilm::RAFHeader',
|
|
102
|
+
'FujiFilm::RAFData' => 'FujiFilm::RAF',
|
|
101
103
|
);
|
|
102
104
|
|
|
103
105
|
# list of all recognized Format strings
|
|
@@ -423,11 +425,11 @@ parameters, as well as proprietary information written by many camera
|
|
|
423
425
|
models. Tags with a question mark after their name are not extracted unless
|
|
424
426
|
the L<Unknown|../ExifTool.html#Unknown> option is set.
|
|
425
427
|
|
|
426
|
-
When writing, ExifTool creates both QuickTime and XMP tags by
|
|
427
|
-
the group may be specified to write one or the other
|
|
428
|
-
location is specified, newly created QuickTime tags are
|
|
429
|
-
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
|
|
430
|
-
possible, otherwise in
|
|
428
|
+
When writing video files, ExifTool creates both QuickTime and XMP tags by
|
|
429
|
+
default, but the group may be specified to write one or the other
|
|
430
|
+
separately. If no location is specified, newly created QuickTime tags are
|
|
431
|
+
added in the L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
|
|
432
|
+
location if possible, otherwise in
|
|
431
433
|
L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
|
|
432
434
|
finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
|
|
433
435
|
but this order may be changed by setting the PREFERRED level of the
|
|
@@ -478,7 +480,7 @@ the original size by padding with nulls if necessary.
|
|
|
478
480
|
|
|
479
481
|
See
|
|
480
482
|
L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
|
|
481
|
-
for the official specification.
|
|
483
|
+
for the official QuickTime specification.
|
|
482
484
|
},
|
|
483
485
|
Photoshop => q{
|
|
484
486
|
Photoshop tags are found in PSD and PSB files, as well as inside embedded
|
|
@@ -600,7 +602,8 @@ running ExifTool the old information may be removed permanently using the
|
|
|
600
602
|
DNG => q{
|
|
601
603
|
The main DNG tags are found in the EXIF table. The tables below define only
|
|
602
604
|
information found within structures of these main DNG tag values. See
|
|
603
|
-
L<
|
|
605
|
+
L<https://helpx.adobe.com/camera-raw/digital-negative.html> for the official
|
|
606
|
+
DNG specification.
|
|
604
607
|
},
|
|
605
608
|
MPEG => q{
|
|
606
609
|
The MPEG format doesn't specify any file-level meta information. In lieu of
|
|
@@ -905,6 +908,9 @@ TagID: foreach $tagID (@keys) {
|
|
|
905
908
|
@infoArray = GetTagInfoList($table,$tagID);
|
|
906
909
|
}
|
|
907
910
|
foreach $tagInfo (@infoArray) {
|
|
911
|
+
if ($binaryTable and $$tagInfo{Writable} and $$tagInfo{Writable} ne '1') {
|
|
912
|
+
warn("$tableName $$tagInfo{Name} Writable should be 1, not $$tagInfo{Writable}\n");
|
|
913
|
+
}
|
|
908
914
|
my $name = $$tagInfo{Name};
|
|
909
915
|
if ($$tagInfo{WritePseudo}) {
|
|
910
916
|
push @writePseudo, $name;
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.78';
|
|
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)
|
|
@@ -630,6 +630,7 @@ $VERSION = '4.74';
|
|
|
630
630
|
'61182.53' => 'Canon RF 28mm F2.8 STM', #42
|
|
631
631
|
'61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
|
632
632
|
'61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
|
633
|
+
'61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
|
|
633
634
|
65535 => 'n/a',
|
|
634
635
|
);
|
|
635
636
|
|
|
@@ -2128,6 +2129,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2128
2129
|
TagTable => 'Image::ExifTool::Canon::RawBurstInfo',
|
|
2129
2130
|
}
|
|
2130
2131
|
},
|
|
2132
|
+
0x4059 => { #forum16111
|
|
2133
|
+
Name => 'LevelInfo',
|
|
2134
|
+
SubDirectory => {
|
|
2135
|
+
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
|
|
2136
|
+
TagTable => 'Image::ExifTool::Canon::LevelInfo',
|
|
2137
|
+
}
|
|
2138
|
+
},
|
|
2131
2139
|
);
|
|
2132
2140
|
|
|
2133
2141
|
#..............................................................................
|
|
@@ -2590,6 +2598,14 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2590
2598
|
},
|
|
2591
2599
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
|
2592
2600
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
|
2601
|
+
# 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
|
|
2602
|
+
51 => { #forum16036 (EOS R models)
|
|
2603
|
+
Name => 'Clarity',
|
|
2604
|
+
PrintConv => {
|
|
2605
|
+
OTHER => sub { shift },
|
|
2606
|
+
0x7fff => 'n/a',
|
|
2607
|
+
},
|
|
2608
|
+
},
|
|
2593
2609
|
);
|
|
2594
2610
|
|
|
2595
2611
|
# focal length information (MakerNotes tag 0x02)
|
|
@@ -4715,12 +4731,15 @@ my %ciMaxFocal = (
|
|
|
4715
4731
|
FIRST_ENTRY => 0,
|
|
4716
4732
|
PRIORITY => 0,
|
|
4717
4733
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4718
|
-
NOTES => 'CameraInfo tags for the EOS R6.',
|
|
4734
|
+
NOTES => 'CameraInfo tags for the EOS R5 and R6.',
|
|
4735
|
+
# (see forum16111 for more notes on these tags)
|
|
4736
|
+
# 0x0a5d - some sort of sequence number starting from 1 (ref forum16111)
|
|
4719
4737
|
0x0af1 => { #forum15210/15579
|
|
4720
4738
|
Name => 'ShutterCount',
|
|
4721
4739
|
Format => 'int32u',
|
|
4722
4740
|
Notes => 'includes electronic + mechanical shutter',
|
|
4723
4741
|
},
|
|
4742
|
+
# 0x0bb7 - counts down during focus stack (ref forum16111)
|
|
4724
4743
|
);
|
|
4725
4744
|
|
|
4726
4745
|
# ref https://exiftool.org/forum/index.php?topic=15356.0
|
|
@@ -6382,8 +6401,12 @@ my %ciMaxFocal = (
|
|
|
6382
6401
|
10 => 'AF Point Expansion (8 point)', #forum6237
|
|
6383
6402
|
11 => 'Flexizone Multi (49 point)', #PH (NC, EOS M, live view; 750D 49 points)
|
|
6384
6403
|
12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
|
|
6385
|
-
13 => 'Flexizone Single', #PH (EOS M default, live view)
|
|
6404
|
+
13 => 'Flexizone Single', #PH (EOS M default, live view) (R7 calls this '1-point AF', ref github268)
|
|
6386
6405
|
14 => 'Large Zone AF', #PH/forum6237 (7DmkII)
|
|
6406
|
+
19 => 'Flexible Zone AF 1', #github268 (R7)
|
|
6407
|
+
20 => 'Flexible Zone AF 2', #github268 (R7)
|
|
6408
|
+
21 => 'Flexible Zone AF 3', #github268 (R7)
|
|
6409
|
+
22 => 'Whole Area AF', #github268 (R7)
|
|
6387
6410
|
},
|
|
6388
6411
|
},
|
|
6389
6412
|
2 => {
|
|
@@ -6962,6 +6985,7 @@ my %ciMaxFocal = (
|
|
|
6962
6985
|
313 => 'Canon RF 28mm F2.8 STM', #42
|
|
6963
6986
|
314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
|
6964
6987
|
315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
|
6988
|
+
316 => 'Canon RF 35mm F1.4 L VCM', #42
|
|
6965
6989
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6966
6990
|
},
|
|
6967
6991
|
},
|
|
@@ -7031,7 +7055,7 @@ my %ciMaxFocal = (
|
|
|
7031
7055
|
},
|
|
7032
7056
|
},
|
|
7033
7057
|
2 => { #12
|
|
7034
|
-
Name => 'Sharpness',
|
|
7058
|
+
Name => 'Sharpness', # (unsharp mask strength for the EOS R5)
|
|
7035
7059
|
Notes => 'all models except the 20D and 350D',
|
|
7036
7060
|
Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
|
|
7037
7061
|
Priority => 0, # (maybe not as reliable as other sharpness values)
|
|
@@ -7077,6 +7101,8 @@ my %ciMaxFocal = (
|
|
|
7077
7101
|
Name => 'WBShiftGM',
|
|
7078
7102
|
Notes => 'positive is a shift toward green',
|
|
7079
7103
|
},
|
|
7104
|
+
14 => 'UnsharpMaskFineness', #forum16036
|
|
7105
|
+
15 => 'UnsharpMaskThreshold', #forum16036
|
|
7080
7106
|
);
|
|
7081
7107
|
|
|
7082
7108
|
# Color balance information (MakerNotes tag 0xa9) (ref PH)
|
|
@@ -8759,7 +8785,7 @@ my %ciMaxFocal = (
|
|
|
8759
8785
|
Name => 'DigitalLensOptimizer',
|
|
8760
8786
|
PrintConv => {
|
|
8761
8787
|
0 => 'Off',
|
|
8762
|
-
1 => '
|
|
8788
|
+
1 => 'Standard',
|
|
8763
8789
|
2 => 'High',
|
|
8764
8790
|
},
|
|
8765
8791
|
},
|
|
@@ -8992,20 +9018,32 @@ my %filterConv = (
|
|
|
8992
9018
|
4 => 'Focus High Priority',
|
|
8993
9019
|
},
|
|
8994
9020
|
},
|
|
8995
|
-
7 => { #
|
|
9021
|
+
7 => [{ #forum16068
|
|
9022
|
+
Name => 'USMLensElectronicMF',
|
|
9023
|
+
Condition => '$$self{Model} =~ /EOS R\d/',
|
|
9024
|
+
Notes => 'EOS R models',
|
|
9025
|
+
PrintConv => {
|
|
9026
|
+
0 => 'Disable After One-Shot',
|
|
9027
|
+
1 => 'One-Shot -> Enabled',
|
|
9028
|
+
2 => 'One-Shot -> Enabled (magnify)',
|
|
9029
|
+
3 => 'Disable in AF Mode',
|
|
9030
|
+
},
|
|
9031
|
+
},{ #52
|
|
8996
9032
|
Name => 'USMLensElectronicMF',
|
|
9033
|
+
Notes => 'Other models',
|
|
8997
9034
|
PrintConv => {
|
|
8998
9035
|
0 => 'Enable After AF',
|
|
8999
9036
|
1 => 'Disable After AF',
|
|
9000
9037
|
2 => 'Disable in AF Mode',
|
|
9001
9038
|
},
|
|
9002
|
-
},
|
|
9039
|
+
}],
|
|
9003
9040
|
8 => { #52
|
|
9004
9041
|
Name => 'AFAssistBeam',
|
|
9005
9042
|
PrintConv => {
|
|
9006
9043
|
0 => 'Enable',
|
|
9007
9044
|
1 => 'Disable',
|
|
9008
9045
|
2 => 'IR AF Assist Beam Only',
|
|
9046
|
+
3 => 'LED AF Assist Beam Only', #forum16068
|
|
9009
9047
|
},
|
|
9010
9048
|
},
|
|
9011
9049
|
9 => { #52
|
|
@@ -9104,6 +9142,19 @@ my %filterConv = (
|
|
|
9104
9142
|
2 => 'Auto', #PH (1DXmkII)
|
|
9105
9143
|
},
|
|
9106
9144
|
},
|
|
9145
|
+
20 => { #forum16068
|
|
9146
|
+
Name => 'SubjectToDetect',
|
|
9147
|
+
PrintConv => {
|
|
9148
|
+
0 => 'None',
|
|
9149
|
+
1 => 'People',
|
|
9150
|
+
2 => 'Animals',
|
|
9151
|
+
3 => 'Vehicles',
|
|
9152
|
+
},
|
|
9153
|
+
},
|
|
9154
|
+
24 => { #forum16068
|
|
9155
|
+
Name => 'EyeDetection',
|
|
9156
|
+
PrintConv => \%offOn,
|
|
9157
|
+
},
|
|
9107
9158
|
);
|
|
9108
9159
|
|
|
9109
9160
|
# RAW burst mode info (MakerNotes tag 0x403f) (ref 25)
|
|
@@ -9116,6 +9167,48 @@ my %filterConv = (
|
|
|
9116
9167
|
2 => 'RawBurstImageCount',
|
|
9117
9168
|
);
|
|
9118
9169
|
|
|
9170
|
+
# level information (ref forum16111, EOS R5)
|
|
9171
|
+
%Image::ExifTool::Canon::LevelInfo = (
|
|
9172
|
+
%binaryDataAttrs,
|
|
9173
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9174
|
+
FORMAT => 'int32s',
|
|
9175
|
+
FIRST_ENTRY => 1,
|
|
9176
|
+
4 => {
|
|
9177
|
+
Name => 'RollAngle',
|
|
9178
|
+
Notes => 'converted to degrees of clockwise camera rotation',
|
|
9179
|
+
ValueConv => '$val > 1800 and $val -= 3600; -$val / 10',
|
|
9180
|
+
ValueConvInv => '$val > 0 and $val -= 360; int(-$val * 10 + 0.5)',
|
|
9181
|
+
},
|
|
9182
|
+
5 => {
|
|
9183
|
+
Name => 'PitchAngle',
|
|
9184
|
+
Notes => 'converted to degrees of upward camera tilt',
|
|
9185
|
+
ValueConv => '$val > 1800 and $val -= 3600; $val / 10',
|
|
9186
|
+
ValueConvInv => '$val < 0 and $val += 360; int($val * 10 + 0.5)',
|
|
9187
|
+
},
|
|
9188
|
+
7 => {
|
|
9189
|
+
Name => 'FocalLength',
|
|
9190
|
+
ValueConv => '$val / 10',
|
|
9191
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9192
|
+
PrintConv => '"$val mm"',
|
|
9193
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9194
|
+
},
|
|
9195
|
+
8 => {
|
|
9196
|
+
Name => 'MinFocalLength',
|
|
9197
|
+
ValueConv => '$val / 10',
|
|
9198
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9199
|
+
PrintConv => '"$val mm"',
|
|
9200
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9201
|
+
},
|
|
9202
|
+
9 => {
|
|
9203
|
+
Name => 'MaxFocalLength',
|
|
9204
|
+
ValueConv => '$val / 10',
|
|
9205
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9206
|
+
PrintConv => '"$val mm"',
|
|
9207
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9208
|
+
},
|
|
9209
|
+
|
|
9210
|
+
);
|
|
9211
|
+
|
|
9119
9212
|
# Canon UUID atoms (ref PH, SX280)
|
|
9120
9213
|
%Image::ExifTool::Canon::uuid = (
|
|
9121
9214
|
GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
|
|
@@ -1212,9 +1212,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1212
1212
|
4 => 'Emphasize Center',
|
|
1213
1213
|
},
|
|
1214
1214
|
},
|
|
1215
|
+
0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
|
|
1215
1216
|
# 0x20800 - fmt=1: 0
|
|
1216
1217
|
# 0x20801 - fmt=1: 0
|
|
1217
|
-
0x2070b => { Name => 'DiffractionCorrectionOn', %noYes },
|
|
1218
1218
|
0x20900 => 'ColorHue',
|
|
1219
1219
|
0x20901 => 'SaturationAdj',
|
|
1220
1220
|
0x20910 => 'RedHSL',
|
|
@@ -1282,6 +1282,9 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1282
1282
|
# 0xf0521 - DLO data
|
|
1283
1283
|
# 0xf0520 - DLO data
|
|
1284
1284
|
# 0xf0530 - created when dust delete data applied (4 bytes, all zero)
|
|
1285
|
+
# 0xf0561 - 1932 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
|
|
1286
|
+
# 0xf0562 - 1596 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
|
|
1287
|
+
# 0xf0566 - 1520 bytes, related to Partial Adjustment Tool Palette (ref forum15660)
|
|
1285
1288
|
# 0xf0600 - fmt=253 (2308 bytes, JPG images)
|
|
1286
1289
|
# 0xf0601 - fmt=253 (2308 bytes, JPG images)
|
|
1287
1290
|
# 0x1ff52c - values: 129,130,132 (related to custom picture style somehow)
|
|
@@ -1303,7 +1306,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1303
1306
|
# 2 - value: 6
|
|
1304
1307
|
3 => {
|
|
1305
1308
|
Name => 'DR4CameraModel',
|
|
1306
|
-
|
|
1309
|
+
Format => 'int32u',
|
|
1307
1310
|
PrintHex => 1,
|
|
1308
1311
|
SeparateTable => 'Canon CanonModelID',
|
|
1309
1312
|
PrintConv => \%Image::ExifTool::Canon::canonModelID,
|
|
@@ -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
|
# DPX tags
|
|
21
21
|
%Image::ExifTool::DPX::Main = (
|
|
@@ -97,7 +97,7 @@ $VERSION = '1.06';
|
|
|
97
97
|
3 => 'Logarithmic',
|
|
98
98
|
4 => 'Unspecified video',
|
|
99
99
|
5 => 'SMPTE 274M',
|
|
100
|
-
6 => 'ITU-R
|
|
100
|
+
6 => 'ITU-R 709-4',
|
|
101
101
|
7 => 'ITU-R 601-5 system B or G (625)',
|
|
102
102
|
8 => 'ITU-R 601-5 system M (525)',
|
|
103
103
|
9 => 'Composite video (NTSC)',
|
|
@@ -124,7 +124,7 @@ $VERSION = '1.06';
|
|
|
124
124
|
1 => 'Printing density',
|
|
125
125
|
4 => 'Unspecified video',
|
|
126
126
|
5 => 'SMPTE 274M',
|
|
127
|
-
6 => 'ITU-R
|
|
127
|
+
6 => 'ITU-R 709-4',
|
|
128
128
|
7 => 'ITU-R 601-5 system B or G (625)',
|
|
129
129
|
8 => 'ITU-R 601-5 system M (525)',
|
|
130
130
|
9 => 'Composite video (NTSC)',
|