exiftool_vendored 12.63.0 → 12.64.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 +22 -1
- data/bin/MANIFEST +3 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +47 -46
- data/bin/config_files/guano.config +161 -0
- data/bin/exiftool +73 -53
- data/bin/lib/Image/ExifTool/Apple.pm +6 -3
- data/bin/lib/Image/ExifTool/CanonVRD.pm +4 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +4 -3
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1467 -202
- data/bin/lib/Image/ExifTool/Matroska.pm +16 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +419 -5
- data/bin/lib/Image/ExifTool/NikonCustom.pm +13 -3
- data/bin/lib/Image/ExifTool/PDF.pm +9 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +8 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +33 -9
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -1
- data/bin/lib/Image/ExifTool/README +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4719 -4640
- data/bin/lib/Image/ExifTool/TagNames.pod +175 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
- data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- data/bin/lib/Image/ExifTool/Writer.pl +21 -4
- data/bin/lib/Image/ExifTool/XMPStruct.pl +96 -28
- data/bin/lib/Image/ExifTool.pm +17 -10
- data/bin/lib/Image/ExifTool.pod +71 -51
- data/bin/perl-Image-ExifTool.spec +44 -44
- 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: dd7bba924fc8d29d342ec53188b3331ed2e8e9a28143eb169464ad1f65d8e404
|
4
|
+
data.tar.gz: 17f3c5d49583b5f614f70c861e2277aab6fdcce3b28203749bc77517150dcb55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bfff20448186ed9958ecc67b4aaee95e67563b8bdadbb374d1d7ae1bd2f9300f5c80ba4ac4bd8efc0a1b13b8a89be0425afa2d3a4357b7d00c2250b6a69b6d3
|
7
|
+
data.tar.gz: 87adab8506730664feccc82d398351791b4ff17732b7f090883dcae3607f74bf2c1049ada6107140a0052cc734cbe1e91044c9c025e9968384294eda5f3f1355
|
data/bin/Changes
CHANGED
@@ -7,6 +7,27 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.60. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
June 28, 2023 - Version 12.64
|
11
|
+
|
12
|
+
- Added a new Sony LensType (thanks Jos Roost)
|
13
|
+
- Added config_files/guano.config to the distribution (thanks StarGeek)
|
14
|
+
- Added support for Garmin Low-resolution Video (GLV) files
|
15
|
+
- Added JUMBF to the list of deletable groups
|
16
|
+
- Added (untested) read support for spherical video tags in Matroska videos
|
17
|
+
- Decode a number of new Nikon Z9 tags (thanks Warren Hatch)
|
18
|
+
- Decode AmbisonicAudio tags in spherical MP4 vidoes
|
19
|
+
- Decode another Apple tag
|
20
|
+
- Improved French translations (thanks Philippe Bonnaure of GraphicConverter)
|
21
|
+
- Patched to allow writing QuickTime-based videos where the audio/video sample
|
22
|
+
description comes after the sample pointers
|
23
|
+
- Fixed parsing of GPS from Insta360 videos to properly skip void fixes
|
24
|
+
- Fixed problem where Apple iPhone 14 images produced invalid XML in -X output
|
25
|
+
when using -struct option
|
26
|
+
- API Changes:
|
27
|
+
- Added StructFormat option to allow JSON-format serialized structures
|
28
|
+
- Added NoDups option to eliminate duplicate items from queued values when
|
29
|
+
writing List-type tags
|
30
|
+
|
10
31
|
June 8, 2023 - Version 12.63
|
11
32
|
|
12
33
|
- Added ability to read/write/create Brotli-compressed metadata in JXL images
|
@@ -15,7 +36,7 @@ June 8, 2023 - Version 12.63
|
|
15
36
|
- Added new EXIF tags
|
16
37
|
- Added MPF Original Preservation Image type
|
17
38
|
- Support for reading 'utf8' values (but still write only as 'string')
|
18
|
-
- Added support for Adobe HDR Gain Map
|
39
|
+
- Added support for Adobe XMP-hdrgm (HDR Gain Map) tags
|
19
40
|
- Added support for reading 7z files (thanks Amir Gooran, github #205) (but
|
20
41
|
currently this doesn't work for the Windows .exe version because I haven't
|
21
42
|
been able to install Compress::Raw::Lzma for ActivePerl)
|
data/bin/MANIFEST
CHANGED
@@ -25,6 +25,7 @@ config_files/example.config
|
|
25
25
|
config_files/fotoware.config
|
26
26
|
config_files/frameCount.config
|
27
27
|
config_files/gps2utm.config
|
28
|
+
config_files/guano.config
|
28
29
|
config_files/nksc.config
|
29
30
|
config_files/photoshop_paths.config
|
30
31
|
config_files/picasa_faces.config
|
@@ -634,6 +635,7 @@ t/JVC_3.out
|
|
634
635
|
t/JXL.t
|
635
636
|
t/JXL_2.out
|
636
637
|
t/JXL_3.out
|
638
|
+
t/JXL_4.out
|
637
639
|
t/Jpeg2000.t
|
638
640
|
t/Jpeg2000_2.out
|
639
641
|
t/Jpeg2000_3.out
|
@@ -1053,6 +1055,7 @@ t/images/JSON.json
|
|
1053
1055
|
t/images/JVC.jpg
|
1054
1056
|
t/images/JVC2.jpg
|
1055
1057
|
t/images/JXL.jxl
|
1058
|
+
t/images/JXL2.jxl
|
1056
1059
|
t/images/Jpeg2000.j2c
|
1057
1060
|
t/images/Jpeg2000.jp2
|
1058
1061
|
t/images/Kodak.jpg
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -14,49 +14,49 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
14
14
|
|
15
15
|
File Types
|
16
16
|
------------+-------------+-------------+-------------+------------
|
17
|
-
360 r/w | DPX r |
|
18
|
-
3FR r | DR4 r/w/c |
|
19
|
-
3G2 r/w | DSS r |
|
20
|
-
3GP r/w | DV r |
|
21
|
-
7Z r | DVB r/w |
|
22
|
-
A r | DVR-MS r |
|
23
|
-
AA r | DYLIB r |
|
24
|
-
AAE r | EIP r |
|
25
|
-
AAX r/w | EPS r/w |
|
26
|
-
ACR r | EPUB r |
|
27
|
-
AFM r | ERF r/w |
|
28
|
-
AI r/w | EXE r |
|
29
|
-
AIFF r | EXIF r/w/c |
|
30
|
-
APE r | EXR r |
|
31
|
-
ARQ r/w | EXV r/w/c |
|
32
|
-
ARW r/w | F4A/V r/w |
|
33
|
-
ASF r | FFF r/w |
|
34
|
-
AVI r | FITS r |
|
35
|
-
AVIF r/w | FLA r |
|
36
|
-
AZW r | FLAC r |
|
37
|
-
BMP r | FLIF r/w |
|
38
|
-
BPG r | FLV r |
|
39
|
-
BTF r | FPF r |
|
40
|
-
CHM r | FPX r |
|
41
|
-
COS r | GIF r/w |
|
42
|
-
CR2 r/w |
|
43
|
-
CR3 r/w |
|
44
|
-
CRM r/w |
|
45
|
-
CRW r/w |
|
46
|
-
CS1 r/w |
|
47
|
-
CSV r |
|
48
|
-
CUR r |
|
49
|
-
CZI r |
|
50
|
-
DCM r |
|
51
|
-
DCP r/w |
|
52
|
-
DCR r |
|
53
|
-
DFONT r |
|
54
|
-
DIVX r |
|
55
|
-
DJVU r |
|
56
|
-
DLL r |
|
57
|
-
DNG r/w |
|
58
|
-
DOC r |
|
59
|
-
DOCX r |
|
17
|
+
360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
|
18
|
+
3FR r | DR4 r/w/c | J2C r | O r | RIFF r
|
19
|
+
3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
|
20
|
+
3GP r/w | DV r | JP2 r/w | ODS r | RTF r
|
21
|
+
7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
22
|
+
A r | DVR-MS r | JSON r | OFR r | RWL r/w
|
23
|
+
AA r | DYLIB r | JXL r | OGG r | RWZ r
|
24
|
+
AAE r | EIP r | K25 r | OGV r | RM r
|
25
|
+
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
26
|
+
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
27
|
+
AFM r | ERF r/w | LA r | ORF r/w | SO r
|
28
|
+
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
|
29
|
+
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
|
30
|
+
APE r | EXR r | LNK r | PAC r | SRW r/w
|
31
|
+
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
|
32
|
+
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
|
33
|
+
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
|
34
|
+
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
|
35
|
+
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
|
36
|
+
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
|
37
|
+
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
|
38
|
+
BPG r | FLV r | MIFF r | PFA r | TXT r
|
39
|
+
BTF r | FPF r | MKA r | PFB r | VCF r
|
40
|
+
CHM r | FPX r | MKS r | PFM r | VNT r
|
41
|
+
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
|
42
|
+
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
|
43
|
+
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
44
|
+
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
|
45
|
+
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
46
|
+
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
47
|
+
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
48
|
+
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
|
49
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
|
50
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
|
51
|
+
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
52
|
+
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
53
|
+
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
54
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
55
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
|
56
|
+
DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
|
57
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
|
58
|
+
DOC r | INX r | NKSC r/w | RAM 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.64.tar.gz | tar -xf -
|
112
|
+
cd Image-ExifTool-12.64
|
113
113
|
./exiftool t/images/ExifTool.jpg
|
114
114
|
|
115
115
|
Note: These commands extract meta information from one of the test images.
|
@@ -205,10 +205,11 @@ distribution package:
|
|
205
205
|
fotoware.config - Definitions for writing Fotoware XMP tags
|
206
206
|
frameCount.config - Extract FrameCount from MP4 videos
|
207
207
|
gps2utm.config - Generate UTM coordinate tags from GPS info
|
208
|
-
|
208
|
+
guano.config - Decode individual tags from Guano metadata
|
209
209
|
nksc.config - Decode tags in Nikon ViewNX NKSC files
|
210
210
|
photoshop_paths.config - For extracting or copying Photoshop paths
|
211
211
|
picasa_faces.config - Convert from Picasa to MWG/MP face regions
|
212
|
+
pix4d.config - Definitions for writing Pix4D XMP tags
|
212
213
|
rotate_regions.config - Rotate MWG and MP region tags
|
213
214
|
tiff_version.config - Determine the version of a TIFF file
|
214
215
|
time_zone.config - Calculate time zone from EXIF tags
|
@@ -0,0 +1,161 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: Guano.config
|
3
|
+
#
|
4
|
+
# Description: User-defined Composite tag definitions to extract individual entries
|
5
|
+
# from the RIFF:Guano text block.
|
6
|
+
#
|
7
|
+
# Requires exiftool version 12.63+
|
8
|
+
#
|
9
|
+
# See GUANO - Grand Unified Acoustic Notation Ontology
|
10
|
+
# https://github.com/riggsd/guano-spec/blob/master/guano_specification.md
|
11
|
+
#
|
12
|
+
# The code itself is simply a regex match. If other entries are needed,
|
13
|
+
# then all that needs to be done is to copy/paste one of the blocks, change
|
14
|
+
# the name and edit the regex
|
15
|
+
#
|
16
|
+
# Examples:
|
17
|
+
# This will list the Make and Model from the Guano text block, if they exist
|
18
|
+
# exiftool -config Guano.config -GuanoModel -GuanoMake /path/to/files/
|
19
|
+
#
|
20
|
+
# Lists all the Guano entries in the Guano text block
|
21
|
+
# exiftool -config Guano.config -Guano* /path/to/files/
|
22
|
+
#
|
23
|
+
# Revisions: 2023/06/09 - Bryan K. Williams (aka StarGeek) Created
|
24
|
+
#------------------------------------------------------------------------------
|
25
|
+
|
26
|
+
%Image::ExifTool::UserDefined = (
|
27
|
+
'Image::ExifTool::Composite' => {
|
28
|
+
GuanoVersion => {
|
29
|
+
Require => 'Guano',
|
30
|
+
ValueConv => '$val =~ /GUANO\|Version:\s+(.*)/m ? $1 : undef',
|
31
|
+
},
|
32
|
+
GuanoMake => {
|
33
|
+
Require => 'Guano',
|
34
|
+
ValueConv => '$val =~ /Make:\s+(.*)/m ? $1 : undef',
|
35
|
+
},
|
36
|
+
GuanoModel => {
|
37
|
+
Require => 'Guano',
|
38
|
+
ValueConv => '$val =~ /Model:\s+(.*)/m ? $1 : undef',
|
39
|
+
},
|
40
|
+
GuanoFirmwareVersion => {
|
41
|
+
Require => 'Guano',
|
42
|
+
ValueConv => '$val =~ /Firmware Version:\s+(.*)/m ? $1 : undef',
|
43
|
+
},
|
44
|
+
GuanoSerial => {
|
45
|
+
Require => 'Guano',
|
46
|
+
ValueConv => '$val =~ /Serial:\s+(.*)/m ? $1 : undef',
|
47
|
+
},
|
48
|
+
GuanoTimestamp => {
|
49
|
+
Require => 'Guano',
|
50
|
+
Groups => { 2 => 'Time' },
|
51
|
+
ValueConv => '$val =~ /Timestamp:\s+(.*)/m ? $1 : undef',
|
52
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
53
|
+
},
|
54
|
+
GuanoLocPosition => {
|
55
|
+
Require => 'Guano',
|
56
|
+
Groups => { 2 => 'Location' },
|
57
|
+
ValueConv => '$val =~ /Loc Position:\s+(.*)/m ? $1 : undef',
|
58
|
+
PrintConv => q{
|
59
|
+
require Image::ExifTool::GPS;
|
60
|
+
my @v = split ' ', $val;
|
61
|
+
return Image::ExifTool::GPS::ToDMS($self, $v[0], 1, "N") . ', ' .
|
62
|
+
Image::ExifTool::GPS::ToDMS($self, $v[1], 1, "E");
|
63
|
+
},
|
64
|
+
},
|
65
|
+
GuanoLocElevation => {
|
66
|
+
Require => 'Guano',
|
67
|
+
Groups => { 2 => 'Location' },
|
68
|
+
ValueConv => '$val =~ /Loc Elevation:\s+(.*)/m ? $1 : undef',
|
69
|
+
},
|
70
|
+
GuanoTemperatureInt => {
|
71
|
+
Require => 'Guano',
|
72
|
+
ValueConv => '$val =~ /Temperature Int:\s+(.*)/m ? $1 : undef',
|
73
|
+
},
|
74
|
+
GuanoFilterHP => {
|
75
|
+
Require => 'Guano',
|
76
|
+
ValueConv => '$val =~ /^Filter HP:\s+(.*)/m ? $1 : undef',
|
77
|
+
},
|
78
|
+
GuanoAnabatBatteryVoltage => {
|
79
|
+
Require => 'Guano',
|
80
|
+
ValueConv => '$val =~ /Anabat\|Battery voltage:\s+(.*)/m ? $1 : undef',
|
81
|
+
},
|
82
|
+
GuanoAnabatMicrophone => {
|
83
|
+
Require => 'Guano',
|
84
|
+
ValueConv => '$val =~ /Anabat\|Microphone:\s+(.*)/m ? $1 : undef',
|
85
|
+
},
|
86
|
+
GuanoAnabatActivation => {
|
87
|
+
Require => 'Guano',
|
88
|
+
ValueConv => '$val =~ /Anabat\|Activation:\s+(.*)/m ? $1 : undef',
|
89
|
+
},
|
90
|
+
GuanoAnabatZcSensitivity => {
|
91
|
+
Require => 'Guano',
|
92
|
+
ValueConv => '$val =~ /Anabat\|Zc Sensitivity:\s+(.*)/m ? $1 : undef',
|
93
|
+
},
|
94
|
+
GuanoAnabatTriggerMinFreq => {
|
95
|
+
Require => 'Guano',
|
96
|
+
ValueConv => '$val =~ /Anabat\|Trigger min freq:\s+(.*)/m ? $1 : undef',
|
97
|
+
},
|
98
|
+
GuanoAnabatTriggerMaxFreq => {
|
99
|
+
Require => 'Guano',
|
100
|
+
ValueConv => '$val =~ /Anabat\|Trigger max freq:\s+(.*)/m ? $1 : undef',
|
101
|
+
},
|
102
|
+
GuanoAnabatMinEvent => {
|
103
|
+
Require => 'Guano',
|
104
|
+
ValueConv => '$val =~ /Anabat\|Min event:\s+(.*)/m ? $1 : undef',
|
105
|
+
},
|
106
|
+
GuanoAnabatTriggerWindow => {
|
107
|
+
Require => 'Guano',
|
108
|
+
ValueConv => '$val =~ /Anabat\|Trigger Window:\s+(.*)/m ? $1 : undef',
|
109
|
+
},
|
110
|
+
GuanoAnabatMaximumFileDuration => {
|
111
|
+
Require => 'Guano',
|
112
|
+
ValueConv => '$val =~ /Anabat\|Maximum File Duration:\s+(.*)/m ? $1 : undef',
|
113
|
+
},
|
114
|
+
GuanoSBVersion => {
|
115
|
+
Require => 'Guano',
|
116
|
+
ValueConv => '$val =~ /SB\|Version:\s+(.*)/m ? $1 : undef',
|
117
|
+
},
|
118
|
+
GuanoSBSpeciesAutoID => {
|
119
|
+
Require => 'Guano',
|
120
|
+
ValueConv => '$val =~ /SB\|Species Auto ID:\s+(.*)/m ? $1 : undef',
|
121
|
+
},
|
122
|
+
GuanoSpeciesAutoID => {
|
123
|
+
Require => 'Guano',
|
124
|
+
ValueConv => '$val =~ /Species Auto ID:\s+(.*)/m ? $1 : undef',
|
125
|
+
},
|
126
|
+
GuanoSpeciesManualID => {
|
127
|
+
Require => 'Guano',
|
128
|
+
ValueConv => '$val =~ /Species Manual ID:\s+(.*)/m ? $1 : undef',
|
129
|
+
},
|
130
|
+
GuanoSampleRate => {
|
131
|
+
Require => 'Guano',
|
132
|
+
ValueConv => '$val =~ /Samplerate:\s+(.*)/m ? $1 : undef',
|
133
|
+
},
|
134
|
+
GuanoLength => {
|
135
|
+
Require => 'Guano',
|
136
|
+
ValueConv => '$val =~ /Length:\s+(.*)/m ? $1 : undef',
|
137
|
+
},
|
138
|
+
GuanoTE => {
|
139
|
+
Require => 'Guano',
|
140
|
+
ValueConv => '$val =~ /TE:\s+(.*)/m ? $1 : undef',
|
141
|
+
},
|
142
|
+
GuanoSBFilterHP => {
|
143
|
+
Require => 'Guano',
|
144
|
+
ValueConv => '$val =~ /SB\|Filter HP:\s+(.*)/m ? $1 : undef',
|
145
|
+
},
|
146
|
+
GuanoNote => {
|
147
|
+
Require => 'Guano',
|
148
|
+
ValueConv => '$val =~ /Note:\s+(.*)/m ? $1 : undef',
|
149
|
+
},
|
150
|
+
GuanoSBRegion => {
|
151
|
+
Require => 'Guano',
|
152
|
+
ValueConv => '$val =~ /SB\|Region:\s+(.*)/m ? $1 : undef',
|
153
|
+
},
|
154
|
+
GuanoSBClassifier => {
|
155
|
+
Require => 'Guano',
|
156
|
+
ValueConv => '$val =~ /SB\|Classifier:\s+(.*)/m ? $1 : undef',
|
157
|
+
},
|
158
|
+
},
|
159
|
+
);
|
160
|
+
#------------------------------------------------------------------------------
|
161
|
+
1; #end
|
data/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.64';
|
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';
|
@@ -725,6 +726,13 @@ for (;;) {
|
|
725
726
|
print "ExifTool version $version$str$Image::ExifTool::RELEASE\n";
|
726
727
|
printf "Perl version %s%s\n", $], (defined ${^UNICODE} ? " (-C${^UNICODE})" : '');
|
727
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
|
+
}
|
728
736
|
print "Optional libraries:\n";
|
729
737
|
foreach (@recommends) {
|
730
738
|
next if /^Win32/ and $^O ne 'MSWin32';
|
@@ -2370,7 +2378,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2370
2378
|
next unless defined $val;
|
2371
2379
|
if ($structOpt and ref $val) {
|
2372
2380
|
# serialize structure if necessary
|
2373
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
2381
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val) unless $xml or $json;
|
2374
2382
|
} elsif (ref $val eq 'ARRAY') {
|
2375
2383
|
if (defined $listItem) {
|
2376
2384
|
# take only the specified item
|
@@ -2519,7 +2527,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2519
2527
|
my $tok = "$group:$tagName";
|
2520
2528
|
if ($outFormat > 0) {
|
2521
2529
|
if ($structOpt and ref $val) {
|
2522
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val);
|
2530
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
2523
2531
|
}
|
2524
2532
|
if ($escapeHTML) {
|
2525
2533
|
$val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./;
|
@@ -4614,49 +4622,49 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4614
4622
|
|
4615
4623
|
File Types
|
4616
4624
|
------------+-------------+-------------+-------------+------------
|
4617
|
-
360 r/w | DPX r |
|
4618
|
-
3FR r | DR4 r/w/c |
|
4619
|
-
3G2 r/w | DSS r |
|
4620
|
-
3GP r/w | DV r |
|
4621
|
-
7Z r | DVB r/w |
|
4622
|
-
A r | DVR-MS r |
|
4623
|
-
AA r | DYLIB r |
|
4624
|
-
AAE r | EIP r |
|
4625
|
-
AAX r/w | EPS r/w |
|
4626
|
-
ACR r | EPUB r |
|
4627
|
-
AFM r | ERF r/w |
|
4628
|
-
AI r/w | EXE r |
|
4629
|
-
AIFF r | EXIF r/w/c |
|
4630
|
-
APE r | EXR r |
|
4631
|
-
ARQ r/w | EXV r/w/c |
|
4632
|
-
ARW r/w | F4A/V r/w |
|
4633
|
-
ASF r | FFF r/w |
|
4634
|
-
AVI r | FITS r |
|
4635
|
-
AVIF r/w | FLA r |
|
4636
|
-
AZW r | FLAC r |
|
4637
|
-
BMP r | FLIF r/w |
|
4638
|
-
BPG r | FLV r |
|
4639
|
-
BTF r | FPF r |
|
4640
|
-
CHM r | FPX r |
|
4641
|
-
COS r | GIF r/w |
|
4642
|
-
CR2 r/w |
|
4643
|
-
CR3 r/w |
|
4644
|
-
CRM r/w |
|
4645
|
-
CRW r/w |
|
4646
|
-
CS1 r/w |
|
4647
|
-
CSV r |
|
4648
|
-
CUR r |
|
4649
|
-
CZI r |
|
4650
|
-
DCM r |
|
4651
|
-
DCP r/w |
|
4652
|
-
DCR r |
|
4653
|
-
DFONT r |
|
4654
|
-
DIVX r |
|
4655
|
-
DJVU r |
|
4656
|
-
DLL r |
|
4657
|
-
DNG r/w |
|
4658
|
-
DOC r |
|
4659
|
-
DOCX r |
|
4625
|
+
360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
|
4626
|
+
3FR r | DR4 r/w/c | J2C r | O r | RIFF r
|
4627
|
+
3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
|
4628
|
+
3GP r/w | DV r | JP2 r/w | ODS r | RTF r
|
4629
|
+
7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
4630
|
+
A r | DVR-MS r | JSON r | OFR r | RWL r/w
|
4631
|
+
AA r | DYLIB r | JXL r | OGG r | RWZ r
|
4632
|
+
AAE r | EIP r | K25 r | OGV r | RM r
|
4633
|
+
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
4634
|
+
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
4635
|
+
AFM r | ERF r/w | LA r | ORF r/w | SO r
|
4636
|
+
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
|
4637
|
+
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
|
4638
|
+
APE r | EXR r | LNK r | PAC r | SRW r/w
|
4639
|
+
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
|
4640
|
+
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
|
4641
|
+
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
|
4642
|
+
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
|
4643
|
+
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
|
4644
|
+
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
|
4645
|
+
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
|
4646
|
+
BPG r | FLV r | MIFF r | PFA r | TXT r
|
4647
|
+
BTF r | FPF r | MKA r | PFB r | VCF r
|
4648
|
+
CHM r | FPX r | MKS r | PFM r | VNT r
|
4649
|
+
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
|
4650
|
+
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
|
4651
|
+
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
4652
|
+
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
|
4653
|
+
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
4654
|
+
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
4655
|
+
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
4656
|
+
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
|
4657
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
|
4658
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
|
4659
|
+
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
4660
|
+
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
4661
|
+
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
4662
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
4663
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
|
4664
|
+
DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
|
4665
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
|
4666
|
+
DOC r | INX r | NKSC r/w | RAM r |
|
4667
|
+
DOCX r | ISO r | NRW r/w | RAR r |
|
4660
4668
|
|
4661
4669
|
Meta Information
|
4662
4670
|
----------------------+----------------------+---------------------
|
@@ -4936,7 +4944,9 @@ while C<-all:all=> deletes entire blocks.
|
|
4936
4944
|
5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG
|
4937
4945
|
application segments which are not associated with another deletable group.
|
4938
4946
|
For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
|
4939
|
-
segment because this is accomplished with C<-Adobe:All>.
|
4947
|
+
segment because this is accomplished with C<-Adobe:All>. But note that
|
4948
|
+
these unnamed APP segments may not be excluded with C<--APPxx:all>) when
|
4949
|
+
deleting all information.
|
4940
4950
|
|
4941
4951
|
6) When shifting a value, the shift is applied to the original value of the
|
4942
4952
|
tag, overriding any other values previously assigned to the tag on the same
|
@@ -5566,7 +5576,7 @@ with this command:
|
|
5566
5576
|
|
5567
5577
|
produces output like this:
|
5568
5578
|
|
5569
|
-
-- Generated by ExifTool 12.
|
5579
|
+
-- Generated by ExifTool 12.64 --
|
5570
5580
|
File: a.jpg - 2003:10:31 15:44:19
|
5571
5581
|
(f/5.6, 1/60s, ISO 100)
|
5572
5582
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6276,10 +6286,12 @@ for EXIF this is the individual IFD (the family 1 group).
|
|
6276
6286
|
When reading, causes information to be extracted from .gz and .bz2
|
6277
6287
|
compressed images (only one image per archive; requires gzip and bzip2 to be
|
6278
6288
|
available). When writing, causes compressed information to be written if
|
6279
|
-
supported by the metadata format (eg. compressed textual
|
6280
|
-
|
6281
|
-
|
6282
|
-
|
6289
|
+
supported by the metadata format (eg. PNG supports compressed textual
|
6290
|
+
metadata, JXL supports compressed EXIF and XML, and MIE supports any
|
6291
|
+
compressed metadata), disables the recommended padding in embedded XMP
|
6292
|
+
(saving 2424 bytes when writing XMP in a file), and writes XMP in shorthand
|
6293
|
+
format -- the equivalent of setting the API Compress=1 and
|
6294
|
+
Compact="NoPadding,Shorthand".
|
6283
6295
|
|
6284
6296
|
=back
|
6285
6297
|
|
@@ -6764,6 +6776,14 @@ rewritten unnecessarily:
|
|
6764
6776
|
|
6765
6777
|
Note that function names are case sensitive.
|
6766
6778
|
|
6779
|
+
ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
|
6780
|
+
function largely redundant, with all the functionality except the ability to
|
6781
|
+
avoid rewriting the file if there are no duplicates, but with the advantage
|
6782
|
+
the duplicates may be removed when accumulating list items from multiple
|
6783
|
+
sources. An equivalent to the above commands using this feature would be:
|
6784
|
+
|
6785
|
+
exiftool -tagsfromfile @ -keywords -api nodups a.jpg
|
6786
|
+
|
6767
6787
|
=head1 WINDOWS UNICODE FILE NAMES
|
6768
6788
|
|
6769
6789
|
In Windows, command-line arguments are specified using the current code page
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool::Exif;
|
17
17
|
use Image::ExifTool::PLIST;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.09';
|
20
20
|
|
21
21
|
sub ConvertPLIST($$);
|
22
22
|
|
@@ -182,7 +182,10 @@ sub ConvertPLIST($$);
|
|
182
182
|
# 0x0028 - int32s (UBMethod, ref 2)
|
183
183
|
# 0x0029 - string (SpatialOverCaptureGroupIdentifier, ref 2)
|
184
184
|
# 0x002A - (iCloudServerSoftwareVersionForDynamicallyGeneratedMedia, ref 2)
|
185
|
-
|
185
|
+
0x002b => {
|
186
|
+
Name => 'PhotoIdentifier', #2
|
187
|
+
Writable => 'string',
|
188
|
+
},
|
186
189
|
# 0x002C - (SpatialOverCaptureImageType, ref 2)
|
187
190
|
# 0x002D - (CCT, ref 2)
|
188
191
|
# 0x002E - (ApsMode, ref 2)
|
@@ -308,7 +311,7 @@ sub ConvertPLIST($$)
|
|
308
311
|
$val = $$dirInfo{Value};
|
309
312
|
if (ref $val eq 'HASH' and not $et->Options('Struct')) {
|
310
313
|
require 'Image/ExifTool/XMPStruct.pl';
|
311
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val);
|
314
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
312
315
|
}
|
313
316
|
return $val;
|
314
317
|
}
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
24
24
|
use Image::ExifTool::Canon;
|
25
25
|
|
26
|
-
$VERSION = '1.
|
26
|
+
$VERSION = '1.36';
|
27
27
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
29
29
|
sub WriteCanonVRD($$;$);
|
@@ -187,6 +187,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
187
187
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
188
188
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
189
189
|
WRITABLE => 1,
|
190
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
190
191
|
FIRST_ENTRY => 0,
|
191
192
|
GROUPS => { 2 => 'Image' },
|
192
193
|
DATAMEMBER => [ 0x002 ], # necessary for writing
|
@@ -485,6 +486,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
485
486
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
486
487
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
487
488
|
WRITABLE => 1,
|
489
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
488
490
|
FIRST_ENTRY => 0,
|
489
491
|
FORMAT => 'int16s',
|
490
492
|
DATAMEMBER => [ 0x58, 0xdc, 0xdf, 0xe0 ], # (required for DataMember and var-format tags)
|
@@ -999,6 +1001,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
999
1001
|
PROCESS_PROC => \&ProcessDR4,
|
1000
1002
|
WRITE_PROC => \&ProcessDR4,
|
1001
1003
|
WRITABLE => 1,
|
1004
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
1002
1005
|
GROUPS => { 1 => 'CanonDR4', 2 => 'Image' },
|
1003
1006
|
VARS => { HEX_ID => 1, SORT_PROC => \&SortDR4 },
|
1004
1007
|
NOTES => q{
|