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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5bcdd4158df5698b7521e14641fdcfe659cb5bed67734064a451c9fac1d0fc62
4
- data.tar.gz: 78ef5d31656980e6be8ecd87203592f552e6e7e61c75b88c244d8099a88f1e48
3
+ metadata.gz: dd7bba924fc8d29d342ec53188b3331ed2e8e9a28143eb169464ad1f65d8e404
4
+ data.tar.gz: 17f3c5d49583b5f614f70c861e2277aab6fdcce3b28203749bc77517150dcb55
5
5
  SHA512:
6
- metadata.gz: b18bf009aab420d9d2f2d6e97cd48dfc03d51891e4bf1671bb6c623c592e820065f8391aaa874c257405d57844a652a11275541968a17dde22bf131ed849fe3b
7
- data.tar.gz: d197476c398027c729b30c0f7fb6ddc91d61ae87e9c5097ca7a5dc93858a37b56ffbdbb26753fe28baa54db806c118043cbbc638ce8b41f21b144a60646e0abe
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 (hdrgm) XMP tags
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
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.63"
53
+ "version" : "12.64"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: 0
32
32
  requires:
33
33
  perl: 5.004
34
- version: 12.63
34
+ version: 12.64
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 | J2C r | O r | RIFF r
18
- 3FR r | DR4 r/w/c | JNG r/w | ODP r | RSRC r
19
- 3G2 r/w | DSS r | JP2 r/w | ODS r | RTF r
20
- 3GP r/w | DV r | JPEG r/w | ODT r | RW2 r/w
21
- 7Z r | DVB r/w | JSON r | OFR r | RWL r/w
22
- A r | DVR-MS r | JXL r | OGG r | RWZ r
23
- AA r | DYLIB r | K25 r | OGV r | RM r
24
- AAE r | EIP r | KDC r | ONP r | SEQ r
25
- AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
26
- ACR r | EPUB r | LA r | ORF r/w | SO r
27
- AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
28
- AI r/w | EXE r | LIF r | OTF r | SRF r
29
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
30
- APE r | EXR r | LRV r/w | PAGES r | SVG r
31
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
32
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
33
- ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
34
- AVI r | FITS r | MAX r | PDB r | TORRENT r
35
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
36
- AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
37
- BMP r | FLIF r/w | MIFF r | PFA r | TXT r
38
- BPG r | FLV r | MKA r | PFB r | VCF r
39
- BTF r | FPF r | MKS r | PFM r | VNT r
40
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
41
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
42
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
43
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
44
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
45
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
46
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
47
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
48
- CUR r | HTML r | MP4 r/w | PPTX r | WPG r
49
- CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
50
- DCM r | ICO r | MPG r | PSB r/w | WV r
51
- DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
52
- DCR r | IDML r | MQV r/w | PSP r | XCF r
53
- DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
54
- DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
55
- DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
56
- DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
57
- DNG r/w | INX r | NKSC r/w | RAM r |
58
- DOC r | ISO r | NRW r/w | RAR r |
59
- DOCX r | ITC r | NUMBERS r | RAW r/w |
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.63.tar.gz | tar -xf -
112
- cd Image-ExifTool-12.63
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
- gpsdatetime.config - Make GPSDateTime from CreateDate+SampleTime
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.63';
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
- my $exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
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 | J2C r | O r | RIFF r
4618
- 3FR r | DR4 r/w/c | JNG r/w | ODP r | RSRC r
4619
- 3G2 r/w | DSS r | JP2 r/w | ODS r | RTF r
4620
- 3GP r/w | DV r | JPEG r/w | ODT r | RW2 r/w
4621
- 7Z r | DVB r/w | JSON r | OFR r | RWL r/w
4622
- A r | DVR-MS r | JXL r | OGG r | RWZ r
4623
- AA r | DYLIB r | K25 r | OGV r | RM r
4624
- AAE r | EIP r | KDC r | ONP r | SEQ r
4625
- AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
4626
- ACR r | EPUB r | LA r | ORF r/w | SO r
4627
- AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
4628
- AI r/w | EXE r | LIF r | OTF r | SRF r
4629
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
4630
- APE r | EXR r | LRV r/w | PAGES r | SVG r
4631
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
4632
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
4633
- ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
4634
- AVI r | FITS r | MAX r | PDB r | TORRENT r
4635
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
4636
- AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
4637
- BMP r | FLIF r/w | MIFF r | PFA r | TXT r
4638
- BPG r | FLV r | MKA r | PFB r | VCF r
4639
- BTF r | FPF r | MKS r | PFM r | VNT r
4640
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
4641
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
4642
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4643
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
4644
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
4645
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4646
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
4647
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
4648
- CUR r | HTML r | MP4 r/w | PPTX r | WPG r
4649
- CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
4650
- DCM r | ICO r | MPG r | PSB r/w | WV r
4651
- DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
4652
- DCR r | IDML r | MQV r/w | PSP r | XCF r
4653
- DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
4654
- DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
4655
- DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
4656
- DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
4657
- DNG r/w | INX r | NKSC r/w | RAM r |
4658
- DOC r | ISO r | NRW r/w | RAR r |
4659
- DOCX r | ITC r | NUMBERS r | RAW r/w |
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.63 --
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 metadata in PNG),
6280
- disables the recommended padding in embedded XMP (saving 2424 bytes when
6281
- writing XMP in a file), and writes XMP in shorthand format -- the equivalent
6282
- of setting the API Compress=1 and Compact="NoPadding,Shorthand".
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.08';
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
- # 0x002B - (PhotoIdentifier, ref 2)
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.35';
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{