exiftool_vendored 12.63.0 → 12.64.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 +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{
|