exiftool_vendored 12.70.0 → 12.72.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +36 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +10 -10
- data/bin/exiftool +21 -14
- data/bin/lib/Image/ExifTool/AAC.pm +175 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- data/bin/lib/Image/ExifTool/Canon.pm +21 -6
- data/bin/lib/Image/ExifTool/Exif.pm +30 -9
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ID3.pm +7 -4
- data/bin/lib/Image/ExifTool/JSON.pm +4 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +21 -16
- data/bin/lib/Image/ExifTool/Nikon.pm +158 -90
- data/bin/lib/Image/ExifTool/Pentax.pm +15 -6
- data/bin/lib/Image/ExifTool/QuickTime.pm +29 -10
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
- data/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +3 -2
- data/bin/lib/Image/ExifTool/Sony.pm +83 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +4862 -4828
- data/bin/lib/Image/ExifTool/TagNames.pod +147 -42
- data/bin/lib/Image/ExifTool/WriteExif.pl +19 -4
- data/bin/lib/Image/ExifTool/Writer.pl +81 -14
- data/bin/lib/Image/ExifTool.pm +18 -6
- data/bin/lib/Image/ExifTool.pod +19 -14
- data/bin/perl-Image-ExifTool.spec +9 -9
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1f510ba188ef652b3d3d2b5cf0a8f317c7ce8eb1ef27448b0de2d6ea326e67d
|
4
|
+
data.tar.gz: 8221ec58b898f84a00d6739e79a88417d83b57e481b473216d2a4001f34e7909
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c294ea7e4739692d2e938409230f791474b64e427a494d0abc984165415dd59a18a3e33ec5c37a8deddbf809d61adc338936762993d6cd43462b717be22be5d3
|
7
|
+
data.tar.gz: 8083b7e1418ecf28253e5fef7ec3a1125e430b1235feb820cf85c7796af1d94a65ac7c5521ca36162916c4908da5f2f9a8a8598bf9ecf06d07c0d757166f21a4
|
data/bin/Changes
CHANGED
@@ -7,7 +7,42 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.70. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
-
|
10
|
+
Dec. 29, 2023 - Version 12.72
|
11
|
+
|
12
|
+
- Added read support for AAC audio files
|
13
|
+
- Added a new QuickTime Keys Android tag
|
14
|
+
- Added a number of new values for some Ricoh GR III tags
|
15
|
+
- Decode timed metadata from Intsa360 Ace Pro MP4 videos
|
16
|
+
- Decode GPSDateTime milliseconds in timed Insta360 metadata
|
17
|
+
- Decode timed metadata from INNOV K5 TS videos
|
18
|
+
- Decode a number of new GoPro timed-metadata tags
|
19
|
+
- Decode a few new Xiaomi EXIF tags
|
20
|
+
- Fixed writing of JPG/ARW images from some newer Sony models to preserve
|
21
|
+
HiddenData
|
22
|
+
|
23
|
+
Dec. 21, 2023 - Version 12.71
|
24
|
+
|
25
|
+
- Added a warning if there was an error reading an alternate file with the
|
26
|
+
-fileNUM option
|
27
|
+
- Added the ability to write QuickTime Keys:Encoder
|
28
|
+
- Added a few new Canon LensType values (thanks Norbert Wasser)
|
29
|
+
- Added a new, obscure EXIF tag (thanks Neal Krawetz)
|
30
|
+
- Decode real-time metadata from Ricoh Theta videos
|
31
|
+
- Decode SpecularWhiteLevel for more Canon models (github #232)
|
32
|
+
- Decode Canon DualPixelRaw tag (thanks John Moyer)
|
33
|
+
- Decode a few new Nikon tags (thanks Warren Hatch)
|
34
|
+
- Decode more FujiFilm M-RAW tags (thanks Greybeard)
|
35
|
+
- Improved generation of tag names for some JSON tag ID's containing colons
|
36
|
+
- Fixed "Undefined subroutine" error when writing makernotes as a block
|
37
|
+
- Fixed missing ID in family 7 group name for ID3 tags which are not valid for
|
38
|
+
the specified ID3 version
|
39
|
+
- Fixed bug where some tags from alternate files (with the -fileNUM option)
|
40
|
+
could show up as "not defined" when used in expressions even though they did
|
41
|
+
exist
|
42
|
+
- API Changes:
|
43
|
+
- Added NoMandatory option
|
44
|
+
|
45
|
+
Nov. 19, 2023 - Version 12.70 (production release) - "20th Anniversary"
|
11
46
|
|
12
47
|
- This marks the 20th anniversary of the initial ExifTool release!
|
13
48
|
- Added ability to read/delete C2PA CAI JUMBF metadata from TIFF-based images
|
data/bin/MANIFEST
CHANGED
@@ -41,6 +41,7 @@ fmt_files/kml_track.fmt
|
|
41
41
|
html/ExifTool.html
|
42
42
|
html/MIE1.1-20070121.pdf
|
43
43
|
html/Shift.html
|
44
|
+
html/TagNames/AAC.html
|
44
45
|
html/TagNames/AFCP.html
|
45
46
|
html/TagNames/AIFF.html
|
46
47
|
html/TagNames/APE.html
|
@@ -214,6 +215,7 @@ lib/File/RandomAccess.pod
|
|
214
215
|
lib/Image/ExifTool.pm
|
215
216
|
lib/Image/ExifTool.pod
|
216
217
|
lib/Image/ExifTool/7Z.pm
|
218
|
+
lib/Image/ExifTool/AAC.pm
|
217
219
|
lib/Image/ExifTool/AES.pm
|
218
220
|
lib/Image/ExifTool/AFCP.pm
|
219
221
|
lib/Image/ExifTool/AIFF.pm
|
@@ -441,6 +443,8 @@ lib/Image/ExifTool/ZIP.pm
|
|
441
443
|
lib/Image/ExifTool/ZISRAW.pm
|
442
444
|
lib/Image/ExifTool/iWork.pm
|
443
445
|
perl-Image-ExifTool.spec
|
446
|
+
t/AAC.t
|
447
|
+
t/AAC_2.out
|
444
448
|
t/AFCP.t
|
445
449
|
t/AFCP_2.out
|
446
450
|
t/AFCP_3.out
|
@@ -979,6 +983,7 @@ t/ZIP_7.out
|
|
979
983
|
t/ZIP_8.out
|
980
984
|
t/ZISRAW.t
|
981
985
|
t/ZISRAW_2.out
|
986
|
+
t/images/AAC.aac
|
982
987
|
t/images/AFCP.jpg
|
983
988
|
t/images/AIFF.aif
|
984
989
|
t/images/APE.ape
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -14,13 +14,14 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
14
14
|
|
15
15
|
File Types
|
16
16
|
------------+-------------+-------------+-------------+------------
|
17
|
-
360 r/w |
|
18
|
-
3FR r |
|
19
|
-
3G2 r/w |
|
20
|
-
3GP r/w |
|
21
|
-
7Z r |
|
22
|
-
A r |
|
23
|
-
AA r |
|
17
|
+
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
|
18
|
+
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
|
19
|
+
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
|
20
|
+
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
|
21
|
+
7Z r | DV r | JP2 r/w | ODS r | RTF r
|
22
|
+
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
23
|
+
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
|
24
|
+
AAC r | DYLIB r | JXL r | OGG r | RWZ r
|
24
25
|
AAE r | EIP r | K25 r | OGV r | RM r
|
25
26
|
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
26
27
|
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
@@ -56,7 +57,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
56
57
|
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
57
58
|
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
58
59
|
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
59
|
-
DOCX r | ISO r | NRW r/w | RAR r |
|
60
60
|
|
61
61
|
Meta Information
|
62
62
|
----------------------+----------------------+---------------------
|
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
|
|
108
108
|
terminal window to extract and run ExifTool:
|
109
109
|
|
110
110
|
cd ~/Desktop
|
111
|
-
gzip -dc Image-ExifTool-12.
|
112
|
-
cd Image-ExifTool-12.
|
111
|
+
gzip -dc Image-ExifTool-12.72.tar.gz | tar -xf -
|
112
|
+
cd Image-ExifTool-12.72
|
113
113
|
./exiftool t/images/ExifTool.jpg
|
114
114
|
|
115
115
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '12.
|
14
|
+
my $version = '12.72';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -1642,7 +1642,10 @@ if (@newValues) {
|
|
1642
1642
|
if ($tag =~ /^(All)?TagsFromFile$/i) {
|
1643
1643
|
defined $newVal or Error("Need file name for -tagsFromFile\n"), next Command;
|
1644
1644
|
++$isWriting;
|
1645
|
-
if ($newVal eq '@' or not defined FilenameSPrintf($newVal)
|
1645
|
+
if ($newVal eq '@' or not defined FilenameSPrintf($newVal) or
|
1646
|
+
# can't set tags yet if we are using tags from other files with the -fileNUM option
|
1647
|
+
grep /\bfile\d+:/i, @{$setTags{$newVal}})
|
1648
|
+
{
|
1646
1649
|
push @dynamicFiles, $newVal;
|
1647
1650
|
next; # set tags from dynamic file later
|
1648
1651
|
}
|
@@ -4628,13 +4631,14 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4628
4631
|
|
4629
4632
|
File Types
|
4630
4633
|
------------+-------------+-------------+-------------+------------
|
4631
|
-
360 r/w |
|
4632
|
-
3FR r |
|
4633
|
-
3G2 r/w |
|
4634
|
-
3GP r/w |
|
4635
|
-
7Z r |
|
4636
|
-
A r |
|
4637
|
-
AA r |
|
4634
|
+
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
|
4635
|
+
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
|
4636
|
+
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
|
4637
|
+
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
|
4638
|
+
7Z r | DV r | JP2 r/w | ODS r | RTF r
|
4639
|
+
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
4640
|
+
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
|
4641
|
+
AAC r | DYLIB r | JXL r | OGG r | RWZ r
|
4638
4642
|
AAE r | EIP r | K25 r | OGV r | RM r
|
4639
4643
|
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
4640
4644
|
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
@@ -4670,7 +4674,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4670
4674
|
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
4671
4675
|
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
4672
4676
|
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
4673
|
-
DOCX r | ISO r | NRW r/w | RAR r |
|
4674
4677
|
|
4675
4678
|
Meta Information
|
4676
4679
|
----------------------+----------------------+---------------------
|
@@ -5440,7 +5443,7 @@ tags specified for the specific SourceFile processed. The imported JSON
|
|
5440
5443
|
file must have the same format as the exported JSON files with the exception
|
5441
5444
|
that options exporting JSON objects instead of simple values are not
|
5442
5445
|
compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
|
5443
|
-
or B<-T> is not
|
5446
|
+
or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
|
5444
5447
|
tag names in the input JSON file may be suffixed with a C<#> to disable
|
5445
5448
|
print conversion.
|
5446
5449
|
|
@@ -5582,7 +5585,7 @@ with this command:
|
|
5582
5585
|
|
5583
5586
|
produces output like this:
|
5584
5587
|
|
5585
|
-
-- Generated by ExifTool 12.
|
5588
|
+
-- Generated by ExifTool 12.72 --
|
5586
5589
|
File: a.jpg - 2003:10:31 15:44:19
|
5587
5590
|
(f/5.6, 1/60s, ISO 100)
|
5588
5591
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6605,8 +6608,12 @@ Rights from the original file could look like this:
|
|
6605
6608
|
|
6606
6609
|
exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
|
6607
6610
|
|
6608
|
-
|
6609
|
-
|
6611
|
+
Subtle note: If a B<-tagsFromFile> option is used, tags in the I<ALTFILE>
|
6612
|
+
argument come from the I<SRCFILE> that applies to the first argument
|
6613
|
+
accessing tags from the corresponding C<FileNUM> group.
|
6614
|
+
|
6615
|
+
User-defined Composite tags may access tags from alternate files using the
|
6616
|
+
appropriate (case-sensitive) family 8 group name.
|
6610
6617
|
|
6611
6618
|
=item B<-list_dir>
|
6612
6619
|
|
@@ -0,0 +1,175 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: AAC.pm
|
3
|
+
#
|
4
|
+
# Description: Read AAC audio files
|
5
|
+
#
|
6
|
+
# Revisions: 2023-12-29 - P. Harvey Created
|
7
|
+
#------------------------------------------------------------------------------
|
8
|
+
|
9
|
+
package Image::ExifTool::AAC;
|
10
|
+
|
11
|
+
use strict;
|
12
|
+
use vars qw($VERSION);
|
13
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
14
|
+
use Image::ExifTool::FLAC;
|
15
|
+
|
16
|
+
$VERSION = '1.00';
|
17
|
+
|
18
|
+
my %convSampleRate = (
|
19
|
+
0 => 96000, 7 => 22050,
|
20
|
+
1 => 88200, 8 => 16000,
|
21
|
+
2 => 64000, 9 => 12000,
|
22
|
+
3 => 48000, 10 => 11025,
|
23
|
+
4 => 44100, 11 => 8000,
|
24
|
+
5 => 32000, 12 => 7350,
|
25
|
+
6 => 24000,
|
26
|
+
);
|
27
|
+
|
28
|
+
%Image::ExifTool::AAC::Main = (
|
29
|
+
PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream,
|
30
|
+
GROUPS => { 2 => 'Audio' },
|
31
|
+
# Bit000-011 - sync word (all 1's)
|
32
|
+
# Bit012 - ID (seems to be always 0)
|
33
|
+
# Bit013-014 - layer (00)
|
34
|
+
# Bit015 - CRC absent (0=crc exists, 1=no crc)
|
35
|
+
'Bit016-017' => {
|
36
|
+
Name => 'ProfileType',
|
37
|
+
PrintConv => {
|
38
|
+
0 => 'Main',
|
39
|
+
1 => 'Low Complexity',
|
40
|
+
2 => 'Scalable Sampling Rate',
|
41
|
+
},
|
42
|
+
},
|
43
|
+
'Bit018-021' => {
|
44
|
+
Name => 'SampleRate',
|
45
|
+
ValueConv => \%convSampleRate,
|
46
|
+
},
|
47
|
+
# Bit022 - private
|
48
|
+
'Bit023-025' => {
|
49
|
+
Name => 'Channels',
|
50
|
+
PrintConv => {
|
51
|
+
0 => '?',
|
52
|
+
1 => 1,
|
53
|
+
2 => 2,
|
54
|
+
3 => 3,
|
55
|
+
4 => 4,
|
56
|
+
5 => 5,
|
57
|
+
6 => '5+1',
|
58
|
+
7 => '7+1',
|
59
|
+
},
|
60
|
+
},
|
61
|
+
# Bit026 - original/copy
|
62
|
+
# Bit027 - home
|
63
|
+
# Bit028 - copyright ID
|
64
|
+
# Bit029 - copyright start
|
65
|
+
# Bit030-042 - FrameLength
|
66
|
+
# Bit043-053 - buffer fullness
|
67
|
+
# Bit054-055 - BlocksInFrame (minus 1)
|
68
|
+
# Note: Bitrate for frame = FrameLength * 8 * SampleRate / ((BlocksInFrame+1) * 1024)
|
69
|
+
# - but all frames must be scanned to calculate average bitrate
|
70
|
+
Encoder => {
|
71
|
+
Name => 'Encoder',
|
72
|
+
Notes => 'taken from filler payload of first frame',
|
73
|
+
},
|
74
|
+
);
|
75
|
+
|
76
|
+
#------------------------------------------------------------------------------
|
77
|
+
# Read information from an AAC file
|
78
|
+
# Inputs: 0) ExifTool object reference, 1) Directory information reference
|
79
|
+
# Returns: 1 on success, 0 if this wasn't a valid AAC file
|
80
|
+
sub ProcessAAC($$)
|
81
|
+
{
|
82
|
+
my ($et, $dirInfo) = @_;
|
83
|
+
my $raf = $$dirInfo{RAF};
|
84
|
+
my ($buff, $buf2);
|
85
|
+
|
86
|
+
# format of frame header (7 bytes):
|
87
|
+
# SSSS SSSS SSSS ILLC PPRR RRpC CCoh csff ffff ffff fffb bbbb bbbb bbNN
|
88
|
+
# 1111 1111 1111 0001 0110 0000 0100 0000 0000 0101 0101 1111 1111 1100 (eg.)
|
89
|
+
# S = sync word o = original/copy
|
90
|
+
# I = ID h = home
|
91
|
+
# L = layer (00) c = copyright ID
|
92
|
+
# C = CRC absent s = copyright start
|
93
|
+
# P = profile object type f = frame length
|
94
|
+
# R = sampling rate index b = buffer fullness
|
95
|
+
# p = private N = number of raw data blocks in frame
|
96
|
+
# C = channel configuration
|
97
|
+
|
98
|
+
$raf->Read($buff, 7) == 7 or return 0;
|
99
|
+
return 0 unless $buff =~ /^\xff[\xf0\xf1]/;
|
100
|
+
my @t = unpack('NnC', $buff);
|
101
|
+
return 0 if (($t[0] >> 16) & 0x03) == 3; # (reserved profile type)
|
102
|
+
return 0 if (($t[0] >> 12) & 0x0f) > 12; # validate sampling frequency index
|
103
|
+
my $len = (($t[0] << 11) & 0x1800) | (($t[1] >> 5) & 0x07ff);
|
104
|
+
return 0 if $len < 7;
|
105
|
+
|
106
|
+
$et->SetFileType();
|
107
|
+
|
108
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::AAC::Main');
|
109
|
+
$et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr);
|
110
|
+
|
111
|
+
# read the first frame data to check for a filler with the encoder name
|
112
|
+
if ($len > 8 and $raf->Read($buff, $len-7) == $len-7) {
|
113
|
+
my $noCRC = ($t[0] & 0x00010000);
|
114
|
+
my $blocks = ($t[2] & 0x03);
|
115
|
+
my $pos = 0;
|
116
|
+
$pos += 2 + 2 * $blocks unless $noCRC;
|
117
|
+
last if $pos + 2 > length($buff);
|
118
|
+
my $tmp = unpack("x${pos}n", $buff);
|
119
|
+
my $id = $tmp >> 13;
|
120
|
+
# read filler payload
|
121
|
+
if ($id == 6) {
|
122
|
+
my $cnt = ($tmp >> 9) & 0x0f;
|
123
|
+
++$pos;
|
124
|
+
if ($cnt == 15) {
|
125
|
+
$cnt += (($tmp >> 1) & 0xff) - 1 if $cnt == 15;
|
126
|
+
++$pos;
|
127
|
+
}
|
128
|
+
if ($pos + $cnt < length($buff)) {
|
129
|
+
my $dat = substr($buff, $pos, $cnt);
|
130
|
+
$dat =~ s/^\0+//;
|
131
|
+
$dat =~ s/\0+$//;
|
132
|
+
$et->HandleTag($tagTablePtr, Encoder => $dat) if $dat =~ /^[\x20-\x7e]+$/;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
return 1;
|
138
|
+
}
|
139
|
+
|
140
|
+
1; # end
|
141
|
+
|
142
|
+
__END__
|
143
|
+
|
144
|
+
=head1 NAME
|
145
|
+
|
146
|
+
Image::ExifTool::AAC - Read AAC audio files
|
147
|
+
|
148
|
+
=head1 SYNOPSIS
|
149
|
+
|
150
|
+
This module is used by Image::ExifTool
|
151
|
+
|
152
|
+
=head1 DESCRIPTION
|
153
|
+
|
154
|
+
This module contains definitions required by Image::ExifTool to read AAC
|
155
|
+
audio files.
|
156
|
+
|
157
|
+
=head1 NOTES
|
158
|
+
|
159
|
+
Since ISO charges money for the official AAC specification, this module is
|
160
|
+
based on unofficial sources which may be incomplete, inaccurate or outdated.
|
161
|
+
|
162
|
+
=head1 AUTHOR
|
163
|
+
|
164
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
165
|
+
|
166
|
+
This library is free software; you can redistribute it and/or modify it
|
167
|
+
under the same terms as Perl itself.
|
168
|
+
|
169
|
+
=head1 SEE ALSO
|
170
|
+
|
171
|
+
L<Image::ExifTool::TagNames/AAC Tags>,
|
172
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
173
|
+
|
174
|
+
=cut
|
175
|
+
|
@@ -219,7 +219,8 @@ writable directly, but is written automatically by ExifTool (often when a
|
|
219
219
|
corresponding L<Composite|Image::ExifTool::TagNames/Composite Tags> or
|
220
220
|
L<Extra|Image::ExifTool::TagNames/Extra Tags> tag is written). A colon
|
221
221
|
(C<:>) indicates a I<Mandatory> tag which may be added automatically when
|
222
|
-
writing
|
222
|
+
writing (use the API L<NoMandatory|../ExifTool.html#NoMandatory> option to avoid creating mandatory EXIF
|
223
|
+
tags). Normally MakerNotes tags may not be deleted individually, but a
|
223
224
|
caret (C<^>) indicates a I<Deletable> MakerNotes tag.
|
224
225
|
|
225
226
|
The HTML version of these tables also lists possible B<Values> for
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.72';
|
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)
|
@@ -627,7 +627,8 @@ $VERSION = '4.71';
|
|
627
627
|
'61182.51' => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
|
628
628
|
'61182.52' => 'Canon RF 10-20mm F4 L IS STM', #42
|
629
629
|
'61182.53' => 'Canon RF 28mm F2.8 STM', #42
|
630
|
-
|
630
|
+
'61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
631
|
+
'61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
631
632
|
65535 => 'n/a',
|
632
633
|
);
|
633
634
|
|
@@ -4726,7 +4727,7 @@ my %ciMaxFocal = (
|
|
4726
4727
|
FIRST_ENTRY => 0,
|
4727
4728
|
PRIORITY => 0,
|
4728
4729
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4729
|
-
NOTES => 'CameraInfo tags for the
|
4730
|
+
NOTES => 'CameraInfo tags for the PowerShot G5 X Mark II.',
|
4730
4731
|
0x0293 => {
|
4731
4732
|
Name => 'ShutterCount',
|
4732
4733
|
Format => 'int32u',
|
@@ -6950,8 +6951,13 @@ my %ciMaxFocal = (
|
|
6950
6951
|
306 => 'Canon RF 100-300mm F2.8L IS USM', #42
|
6951
6952
|
307 => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
|
6952
6953
|
308 => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
|
6954
|
+
309 => 'Canon RF 200-800mm F6.3-9 IS USM', #42
|
6955
|
+
310 => 'Canon RF 200-800mm F6.3-9 IS USM + RF1.4x', #42
|
6956
|
+
311 => 'Canon RF 200-800mm F6.3-9 IS USM + RF2x', #42
|
6953
6957
|
312 => 'Canon RF 10-20mm F4 L IS STM', #42
|
6954
6958
|
313 => 'Canon RF 28mm F2.8 STM', #42
|
6959
|
+
314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
6960
|
+
315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
6955
6961
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
6956
6962
|
},
|
6957
6963
|
},
|
@@ -7468,7 +7474,7 @@ my %ciMaxFocal = (
|
|
7468
7474
|
RawConv => '$$self{ColorDataVersion} = $val',
|
7469
7475
|
PrintConv => {
|
7470
7476
|
2 => '2 (1DmkIII)',
|
7471
|
-
3 => '3 (40D)',
|
7477
|
+
3 => '3 (40D)', # (doesn't record SpecularWhiteLevel, ref github#233)
|
7472
7478
|
4 => '4 (1DSmkIII)',
|
7473
7479
|
5 => '5 (450D/1000D)',
|
7474
7480
|
6 => '6 (50D/5DmkII)',
|
@@ -7778,10 +7784,15 @@ my %ciMaxFocal = (
|
|
7778
7784
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib2' }
|
7779
7785
|
},
|
7780
7786
|
0x108=> { #IB
|
7781
|
-
Name => 'PerChannelBlackLevel',
|
7787
|
+
Name => 'PerChannelBlackLevel', # (or perhaps AverageBlackLevel?, ref github#232)
|
7782
7788
|
Condition => '$$self{ColorDataVersion} == -3',
|
7783
7789
|
Format => 'int16s[4]',
|
7784
7790
|
},
|
7791
|
+
0x296 => { #github#232
|
7792
|
+
Name => 'SpecularWhiteLevel',
|
7793
|
+
Condition => '$$self{ColorDataVersion} == -3',
|
7794
|
+
Format => 'int16u',
|
7795
|
+
},
|
7785
7796
|
0x14d=> { #IB
|
7786
7797
|
Name => 'PerChannelBlackLevel',
|
7787
7798
|
Condition => '$$self{ColorDataVersion} == -4',
|
@@ -8696,7 +8707,7 @@ my %ciMaxFocal = (
|
|
8696
8707
|
},
|
8697
8708
|
);
|
8698
8709
|
|
8699
|
-
# Auto Lighting
|
8710
|
+
# Auto Lighting Optimizer information (MakerNotes tag 0x4018) (ref PH)
|
8700
8711
|
%Image::ExifTool::Canon::LightingOpt = (
|
8701
8712
|
%binaryDataAttrs,
|
8702
8713
|
FORMAT => 'int32s',
|
@@ -8748,6 +8759,10 @@ my %ciMaxFocal = (
|
|
8748
8759
|
2 => 'High',
|
8749
8760
|
},
|
8750
8761
|
},
|
8762
|
+
11 => { #forum15445
|
8763
|
+
Name => 'DualPixelRaw',
|
8764
|
+
PrintConv => \%offOn,
|
8765
|
+
},
|
8751
8766
|
);
|
8752
8767
|
|
8753
8768
|
# Lens information (MakerNotes tag 0x4019) (ref 20)
|
@@ -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.48';
|
61
61
|
|
62
62
|
sub ProcessExif($$$);
|
63
63
|
sub WriteExif($$$);
|
@@ -1426,12 +1426,12 @@ my %opcodeInfo = (
|
|
1426
1426
|
Count => 6,
|
1427
1427
|
Priority => 0,
|
1428
1428
|
},
|
1429
|
-
# 0x220 - int32u: 0 (IFD0,
|
1430
|
-
# 0x221 - int32u: 0 (IFD0,
|
1431
|
-
# 0x222 - int32u: 0 (IFD0,
|
1432
|
-
# 0x223 - int32u: 0 (IFD0,
|
1433
|
-
# 0x224 - int32u: 0,1 (IFD0,
|
1434
|
-
# 0x225 - string: "" (IFD0,
|
1429
|
+
# 0x220 - int32u: 0 (IFD0, Xiaomi Redmi models)
|
1430
|
+
# 0x221 - int32u: 0 (IFD0, Xiaomi Redmi models)
|
1431
|
+
# 0x222 - int32u: 0 (IFD0, Xiaomi Redmi models)
|
1432
|
+
# 0x223 - int32u: 0 (IFD0, Xiaomi Redmi models)
|
1433
|
+
# 0x224 - int32u: 0,1 (IFD0, Xiaomi Redmi models)
|
1434
|
+
# 0x225 - string: "" (IFD0, Xiaomi Redmi models)
|
1435
1435
|
0x22f => 'StripRowCounts',
|
1436
1436
|
0x2bc => {
|
1437
1437
|
Name => 'ApplicationNotes', # (writable directory!)
|
@@ -1445,6 +1445,16 @@ my %opcodeInfo = (
|
|
1445
1445
|
TagTable => 'Image::ExifTool::XMP::Main',
|
1446
1446
|
},
|
1447
1447
|
},
|
1448
|
+
0x303 => { #https://learn.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-constant-property-item-descriptions
|
1449
|
+
Name => 'RenderingIntent',
|
1450
|
+
Format => 'int8u',
|
1451
|
+
PrintConv => {
|
1452
|
+
0 => 'Perceptual',
|
1453
|
+
1 => 'Relative Colorimetric',
|
1454
|
+
2 => 'Saturation',
|
1455
|
+
3 => 'Absolute colorimetric',
|
1456
|
+
},
|
1457
|
+
},
|
1448
1458
|
0x3e7 => 'USPTOMiscellaneous', #20
|
1449
1459
|
0x1000 => { #5
|
1450
1460
|
Name => 'RelatedImageFileFormat',
|
@@ -2523,8 +2533,18 @@ my %opcodeInfo = (
|
|
2523
2533
|
Name => 'CameraElevationAngle',
|
2524
2534
|
Writable => 'rational64s',
|
2525
2535
|
},
|
2526
|
-
|
2527
|
-
|
2536
|
+
0x9999 => { # (ExifIFD, Xiaomi)
|
2537
|
+
Name => 'XiaomiSettings', # (writable directory!)
|
2538
|
+
Writable => 'string',
|
2539
|
+
Protected => 1,
|
2540
|
+
SubDirectory => { TagTable => 'Image::ExifTool::JSON::Main' },
|
2541
|
+
},
|
2542
|
+
0x9a00 => {
|
2543
|
+
Name => 'XiaomiModel',
|
2544
|
+
Writable => 'string',
|
2545
|
+
Protected => 1,
|
2546
|
+
},
|
2547
|
+
# 0x9aaa - int8u[2048/2176]: ? (ExifIFD, Xiaomi POCO F1)
|
2528
2548
|
0x9c9b => {
|
2529
2549
|
Name => 'XPTitle',
|
2530
2550
|
Format => 'undef',
|
@@ -2976,6 +2996,7 @@ my %opcodeInfo = (
|
|
2976
2996
|
0xa480 => { Name => 'GDALMetadata', Writable => 'string', WriteGroup => 'IFD0' }, #3
|
2977
2997
|
0xa481 => { Name => 'GDALNoData', Writable => 'string', WriteGroup => 'IFD0' }, #3
|
2978
2998
|
0xa500 => { Name => 'Gamma', Writable => 'rational64u' },
|
2999
|
+
# 0xa661 - string: ? (ExifIFD, Xiaomi)
|
2979
3000
|
0xafc0 => 'ExpandSoftware', #JD (Opanda)
|
2980
3001
|
0xafc1 => 'ExpandLens', #JD (Opanda)
|
2981
3002
|
0xafc2 => 'ExpandFilm', #JD (Opanda)
|
@@ -1468,12 +1468,15 @@ my %faceCategories = (
|
|
1468
1468
|
},
|
1469
1469
|
1 => { Name => 'RawImageNumber', Format => 'int32u' },
|
1470
1470
|
# 3 - seen "0 100", "-300 100" and "300 100" for a sequence of 3 images
|
1471
|
-
3 => { Name => '
|
1471
|
+
3 => { Name => 'ExposureCompensation', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
|
1472
1472
|
# 4 - (same value as 3 in all my samples)
|
1473
|
-
4 => { Name => '
|
1473
|
+
4 => { Name => 'ExposureCompensation2', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
|
1474
1474
|
# 5 - seen "10 1600", "10 6800", "10 200", "10 35000" etc
|
1475
|
+
5 => { Name => 'ExposureTime', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)' },
|
1475
1476
|
# 6 - seen "450 100", "400 100" (all images in RAF have same value)
|
1477
|
+
6 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)' },
|
1476
1478
|
# 7 - seen 200, 125, 250, 2000
|
1479
|
+
7 => 'ISO',
|
1477
1480
|
# 8 - seen 0
|
1478
1481
|
);
|
1479
1482
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
use Image::ExifTool::QuickTime;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.08';
|
20
20
|
|
21
21
|
sub ProcessGoPro($$$);
|
22
22
|
sub ProcessString($$$);
|
@@ -401,6 +401,21 @@ my %addUnits = (
|
|
401
401
|
ORIO => 'OutputOrientation',
|
402
402
|
UNIF => 'InputUniformity',
|
403
403
|
SROT => 'SensorReadoutTime',
|
404
|
+
# the following are ref https://exiftool.org/forum/index.php?topic=15517.0
|
405
|
+
CORI => { Name => 'CameraOrientation', Binary => 1, Notes => 'quaternions 0-1' },
|
406
|
+
AALP => { Name => 'AudioLevel', Notes => 'dBFS' },
|
407
|
+
GPSA => 'GPSAltitudeSystem', # (eg. 'MSLV')
|
408
|
+
GRAV => { Name => 'GravityVector', Binary => 1 },
|
409
|
+
HUES => 'PrediminantHue',
|
410
|
+
IORI => { Name => 'ImageOrientation', Binary => 1, Notes => 'quaternions 0-1' },
|
411
|
+
# LRVO - ? Part of LRV Frame Skip
|
412
|
+
# LRVS - ? Part of LRV Frame Skip
|
413
|
+
# LSKP - LRV Frame Skip
|
414
|
+
# MSKP - MRV Frame Skip
|
415
|
+
MWET => 'MicrophoneWet',
|
416
|
+
SCEN => 'SceneClassification', # (SNOW,URBA,INDO,WATR,VEGE,BEAC + probability)
|
417
|
+
WNDM => 'WindProcessing',
|
418
|
+
YAVG => 'LumaAverage',
|
404
419
|
);
|
405
420
|
|
406
421
|
# GoPro GPS5 tags (ref 2) (Hero5,Hero6)
|
@@ -18,7 +18,7 @@ use strict;
|
|
18
18
|
use vars qw($VERSION);
|
19
19
|
use Image::ExifTool qw(:DataAccess :Utils);
|
20
20
|
|
21
|
-
$VERSION = '1.
|
21
|
+
$VERSION = '1.60';
|
22
22
|
|
23
23
|
sub ProcessID3v2($$$);
|
24
24
|
sub ProcessPrivate($$$);
|
@@ -825,8 +825,8 @@ my %id3v2_common = (
|
|
825
825
|
|
826
826
|
# lookup to check for existence of tags in other ID3 versions
|
827
827
|
my %otherTable = (
|
828
|
-
\%Image::ExifTool::ID3::v2_4 =>
|
829
|
-
\%Image::ExifTool::ID3::v2_3 =>
|
828
|
+
\%Image::ExifTool::ID3::v2_4 => 'Image::ExifTool::ID3::v2_3',
|
829
|
+
\%Image::ExifTool::ID3::v2_3 => 'Image::ExifTool::ID3::v2_4',
|
830
830
|
);
|
831
831
|
|
832
832
|
# ID3 Composite tags
|
@@ -1098,6 +1098,7 @@ sub ProcessID3v2($$$)
|
|
1098
1098
|
my $vers = $$dirInfo{Version};
|
1099
1099
|
my $verbose = $et->Options('Verbose');
|
1100
1100
|
my $len; # frame data length
|
1101
|
+
my $otherTable;
|
1101
1102
|
|
1102
1103
|
$et->VerboseDir($tagTablePtr->{GROUPS}->{1}, 0, $size);
|
1103
1104
|
$et->VerboseDump($dataPt, Len => $size, Start => $offset);
|
@@ -1144,7 +1145,9 @@ sub ProcessID3v2($$$)
|
|
1144
1145
|
last if $offset + $len > $size;
|
1145
1146
|
my $tagInfo = $et->GetTagInfo($tagTablePtr, $id);
|
1146
1147
|
unless ($tagInfo) {
|
1147
|
-
|
1148
|
+
if (not $otherTable and $otherTable{$tagTablePtr}) {
|
1149
|
+
$otherTable = GetTagTable($otherTable{$tagTablePtr});
|
1150
|
+
}
|
1148
1151
|
$tagInfo = $et->GetTagInfo($otherTable, $id) if $otherTable;
|
1149
1152
|
if ($tagInfo) {
|
1150
1153
|
$et->WarnOnce("Frame '${id}' is not valid for this ID3 version", 1);
|