exiftool-vendored.exe 12.62.0 → 12.65.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.
Files changed (50) hide show
  1. package/LICENSE +254 -254
  2. package/bin/exiftool_files/Changes +76 -1
  3. package/bin/exiftool_files/Makefile.PL +7 -1
  4. package/bin/exiftool_files/README +50 -46
  5. package/bin/exiftool_files/config_files/guano.config +161 -0
  6. package/bin/exiftool_files/exiftool.pl +105 -74
  7. package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +793 -0
  8. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +14 -7
  9. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +8 -1
  10. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +4 -1
  11. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +4 -4
  12. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +4 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +31 -14
  14. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +8 -2
  15. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -3
  16. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +226 -28
  19. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1467 -202
  20. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +2 -1
  21. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +16 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  23. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +939 -31
  24. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +874 -63
  25. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +23 -5
  26. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +8 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +6 -6
  28. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +5 -5
  29. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +91 -30
  30. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +20 -19
  31. package/bin/exiftool_files/lib/Image/ExifTool/README +2 -2
  32. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +11 -9
  33. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +227 -227
  34. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +2 -1
  35. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +4 -4
  36. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +229 -30
  37. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4757 -4633
  38. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +706 -18
  39. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +17 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -7
  41. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +2 -2
  43. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +35 -12
  44. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +14 -2
  45. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +32 -0
  46. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +96 -28
  47. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +5 -5
  48. package/bin/exiftool_files/lib/Image/ExifTool.pm +176 -128
  49. package/bin/exiftool_files/lib/Image/ExifTool.pod +109 -53
  50. package/package.json +3 -2
@@ -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 | DR4 r/w/c | JNG r/w | ODP r | RSRC r
18
- 3FR r | DSS r | JP2 r/w | ODS r | RTF r
19
- 3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w
20
- 3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w
21
- A r | DVR-MS r | JXL r | OGG r | RWZ r
22
- AA r | DYLIB r | K25 r | OGV r | RM r
23
- AAE r | EIP r | KDC r | ONP r | SEQ r
24
- AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
25
- ACR r | EPUB r | LA r | ORF r/w | SO r
26
- AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
27
- AI r/w | EXE r | LIF r | OTF r | SRF r
28
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
29
- APE r | EXR r | LRV r/w | PAGES r | SVG r
30
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
31
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
32
- ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
33
- AVI r | FITS r | MAX r | PDB r | TORRENT r
34
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
35
- AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
36
- BMP r | FLIF r/w | MIFF r | PFA r | TXT r
37
- BPG r | FLV r | MKA r | PFB r | VCF r
38
- BTF r | FPF r | MKS r | PFM r | VNT r
39
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
40
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
41
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
42
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
43
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
44
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
45
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
46
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
47
- CUR r | HTML r | MP4 r/w | PPTX r | WPG r
48
- CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
49
- DCM r | ICO r | MPG r | PSB r/w | WV r
50
- DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
51
- DCR r | IDML r | MQV r/w | PSP r | XCF r
52
- DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
53
- DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
54
- DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
55
- DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
56
- DNG r/w | INX r | NKSC r/w | RAM r |
57
- DOC r | ISO r | NRW r/w | RAR r |
58
- DOCX r | ITC r | NUMBERS r | RAW r/w |
59
- DPX r | J2C r | O r | RIFF 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.62.tar.gz | tar -xf -
112
- cd Image-ExifTool-12.62
111
+ gzip -dc Image-ExifTool-12.65.tar.gz | tar -xf -
112
+ cd Image-ExifTool-12.65
113
113
  ./exiftool t/images/ExifTool.jpg
114
114
 
115
115
  Note: These commands extract meta information from one of the test images.
@@ -158,8 +158,11 @@ for calculating digest values and providing other features listed below:
158
158
  Win32::API (for proper handling of Windows file times)
159
159
  Win32::FindFile (for Windows Unicode directory support, app only)
160
160
  Win32API::File (for Windows Unicode file names and file times)
161
+ Compress::Raw::Lzma (for reading encoded 7z files)
161
162
  IO::Compress::RawDeflate (for writing FLIF images)
162
163
  IO::Uncompress::RawInflate (for reading FLIF images)
164
+ IO::Compress::Brotli (for writing compressed JXL metadata)
165
+ IO::Uncompress::Brotli (for reading compressed JXL metadata)
163
166
 
164
167
  COPYRIGHT AND LICENSE
165
168
 
@@ -202,10 +205,11 @@ distribution package:
202
205
  fotoware.config - Definitions for writing Fotoware XMP tags
203
206
  frameCount.config - Extract FrameCount from MP4 videos
204
207
  gps2utm.config - Generate UTM coordinate tags from GPS info
205
- gpsdatetime.config - Make GPSDateTime from CreateDate+SampleTime
208
+ guano.config - Decode individual tags from Guano metadata
206
209
  nksc.config - Decode tags in Nikon ViewNX NKSC files
207
210
  photoshop_paths.config - For extracting or copying Photoshop paths
208
211
  picasa_faces.config - Convert from Picasa to MWG/MP face regions
212
+ pix4d.config - Definitions for writing Pix4D XMP tags
209
213
  rotate_regions.config - Rotate MWG and MP region tags
210
214
  tiff_version.config - Determine the version of a TIFF file
211
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
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.62';
14
+ my $version = '12.65';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -290,8 +290,11 @@ my @recommends = qw(
290
290
  POSIX::strptime
291
291
  Time::Local
292
292
  Unicode::LineBreak
293
+ Compress::Raw::Lzma
293
294
  IO::Compress::RawDeflate
294
295
  IO::Uncompress::RawInflate
296
+ IO::Compress::Brotli
297
+ IO::Uncompress::Brotli
295
298
  Win32::API
296
299
  Win32::FindFile
297
300
  Win32API::File
@@ -736,6 +739,13 @@ for (;;) {
736
739
  print "ExifTool version $version$str$Image::ExifTool::RELEASE\n";
737
740
  printf "Perl version %s%s\n", $], (defined ${^UNICODE} ? " (-C${^UNICODE})" : '');
738
741
  print "Platform: $^O\n";
742
+ if ($verbose > 8) {
743
+ print "Current Dir: " . Cwd::getcwd() . "\n" if (eval { require Cwd });
744
+ print "Script Name: $0\n";
745
+ print "Exe Name: $^X\n";
746
+ print "Exe Dir: $Image::ExifTool::exeDir\n";
747
+ print "Exe Path: $exePath\n";
748
+ }
739
749
  print "Optional libraries:\n";
740
750
  foreach (@recommends) {
741
751
  next if /^Win32/ and $^O ne 'MSWin32';
@@ -817,11 +827,17 @@ for (;;) {
817
827
  /^(-?)(a|duplicates)$/i and $mt->Options(Duplicates => ($1 ? 0 : 1)), next;
818
828
  if ($a eq 'api') {
819
829
  my $opt = shift;
820
- defined $opt or Error("Expected OPT[=VAL] argument for -api option\n"), $badCmd=1, next;
821
- my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
822
- # empty string means an undefined value unless ^= is used
823
- $val = undef unless $opt =~ s/\^$// or length $val;
824
- $mt->Options($opt => $val);
830
+ if (defined $opt and length $opt) {
831
+ my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
832
+ # empty string means an undefined value unless ^= is used
833
+ $val = undef unless $opt =~ s/\^$// or length $val;
834
+ $mt->Options($opt => $val);
835
+ } else {
836
+ print "Available API Options:\n";
837
+ my $availableOptions = Image::ExifTool::AvailableOptions();
838
+ printf(" %-17s - %s\n", $$_[0], $$_[2]) foreach @$availableOptions;
839
+ $helped = 1;
840
+ }
825
841
  next;
826
842
  }
827
843
  /^arg(s|format)$/i and $argFormat = 1, next;
@@ -1463,6 +1479,10 @@ if ($csv and $csv eq 'CSV' and not $isWriting) {
1463
1479
  $binaryOutput = 0;
1464
1480
  $setCharset = 'default' unless defined $setCharset;
1465
1481
  }
1482
+ if (%printFmt) {
1483
+ Warn "The -csv option has no effect when -p is used\n";
1484
+ undef $csv;
1485
+ }
1466
1486
  require Image::ExifTool::XMP if $setCharset;
1467
1487
  }
1468
1488
 
@@ -2361,7 +2381,7 @@ TAG: foreach $tag (@foundTags) {
2361
2381
  next unless defined $val;
2362
2382
  if ($structOpt and ref $val) {
2363
2383
  # serialize structure if necessary
2364
- $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
2384
+ $val = Image::ExifTool::XMP::SerializeStruct($et, $val) unless $xml or $json;
2365
2385
  } elsif (ref $val eq 'ARRAY') {
2366
2386
  if (defined $listItem) {
2367
2387
  # take only the specified item
@@ -2510,7 +2530,7 @@ TAG: foreach $tag (@foundTags) {
2510
2530
  my $tok = "$group:$tagName";
2511
2531
  if ($outFormat > 0) {
2512
2532
  if ($structOpt and ref $val) {
2513
- $val = Image::ExifTool::XMP::SerializeStruct($val);
2533
+ $val = Image::ExifTool::XMP::SerializeStruct($et, $val);
2514
2534
  }
2515
2535
  if ($escapeHTML) {
2516
2536
  $val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./;
@@ -2857,7 +2877,7 @@ sub SetImageInfo($$$)
2857
2877
  }
2858
2878
  unless ($isStdout) {
2859
2879
  $outfile = NextUnusedFilename($outfile);
2860
- if ($et->Exists($outfile) and not $doSetFileName) {
2880
+ if ($et->Exists($outfile, 1) and not $doSetFileName) {
2861
2881
  Warn "Error: '${outfile}' already exists - $infile\n";
2862
2882
  EFile($infile);
2863
2883
  ++$countBadWr;
@@ -2988,7 +3008,7 @@ sub SetImageInfo($$$)
2988
3008
  $outfile = Image::ExifTool::GetNewFileName(defined $outfile ? $outfile : $file, $newDir);
2989
3009
  }
2990
3010
  $outfile = NextUnusedFilename($outfile, $infile);
2991
- if ($et->Exists($outfile)) {
3011
+ if ($et->Exists($outfile, 1)) {
2992
3012
  if ($infile eq $outfile) {
2993
3013
  undef $outfile; # not changing the file name after all
2994
3014
  # (allow for case-insensitive filesystems)
@@ -4068,6 +4088,8 @@ sub SuggestedExtension($$$)
4068
4088
  $ext = 'dr4';
4069
4089
  } elsif ($$valPt =~ /^(.{10}|.{522})(\x11\x01|\x00\x11)/s) {
4070
4090
  $ext = 'pict';
4091
+ } elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
4092
+ $ext = 'jxl';
4071
4093
  } else {
4072
4094
  $ext = 'dat';
4073
4095
  }
@@ -4214,7 +4236,7 @@ sub NextUnusedFilename($;$)
4214
4236
  }
4215
4237
  $filename .= substr($fmt, $pos); # add rest of file name
4216
4238
  # return now with filename unless file exists
4217
- return $filename unless ($mt->Exists($filename) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
4239
+ return $filename unless ($mt->Exists($filename, 1) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
4218
4240
  if (defined $okfile) {
4219
4241
  return $filename if $filename eq $okfile;
4220
4242
  my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
@@ -4294,7 +4316,7 @@ sub OpenOutputFile($;@)
4294
4316
  $outfile .= $textOut;
4295
4317
  }
4296
4318
  my $mode = '>';
4297
- if ($mt->Exists($outfile)) {
4319
+ if ($mt->Exists($outfile, 1)) {
4298
4320
  unless ($textOverwrite) {
4299
4321
  Warn "Output file $outfile already exists for $file\n";
4300
4322
  return ();
@@ -4614,49 +4636,49 @@ DESCRIPTION
4614
4636
 
4615
4637
  File Types
4616
4638
  ------------+-------------+-------------+-------------+------------
4617
- 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RSRC r
4618
- 3FR r | DSS r | JP2 r/w | ODS r | RTF r
4619
- 3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w
4620
- 3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w
4621
- A r | DVR-MS r | JXL r | OGG r | RWZ r
4622
- AA r | DYLIB r | K25 r | OGV r | RM r
4623
- AAE r | EIP r | KDC r | ONP r | SEQ r
4624
- AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
4625
- ACR r | EPUB r | LA r | ORF r/w | SO r
4626
- AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
4627
- AI r/w | EXE r | LIF r | OTF r | SRF r
4628
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
4629
- APE r | EXR r | LRV r/w | PAGES r | SVG r
4630
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
4631
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
4632
- ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
4633
- AVI r | FITS r | MAX r | PDB r | TORRENT r
4634
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
4635
- AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
4636
- BMP r | FLIF r/w | MIFF r | PFA r | TXT r
4637
- BPG r | FLV r | MKA r | PFB r | VCF r
4638
- BTF r | FPF r | MKS r | PFM r | VNT r
4639
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
4640
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
4641
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4642
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
4643
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
4644
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4645
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
4646
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
4647
- CUR r | HTML r | MP4 r/w | PPTX r | WPG r
4648
- CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
4649
- DCM r | ICO r | MPG r | PSB r/w | WV r
4650
- DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
4651
- DCR r | IDML r | MQV r/w | PSP r | XCF r
4652
- DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
4653
- DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
4654
- DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
4655
- DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
4656
- DNG r/w | INX r | NKSC r/w | RAM r |
4657
- DOC r | ISO r | NRW r/w | RAR r |
4658
- DOCX r | ITC r | NUMBERS r | RAW r/w |
4659
- DPX r | J2C r | O r | RIFF r |
4639
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
4640
+ 3FR r | DR4 r/w/c | J2C r | O r | RIFF r
4641
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
4642
+ 3GP r/w | DV r | JP2 r/w | ODS r | RTF r
4643
+ 7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
4644
+ A r | DVR-MS r | JSON r | OFR r | RWL r/w
4645
+ AA r | DYLIB r | JXL r | OGG r | RWZ r
4646
+ AAE r | EIP r | K25 r | OGV r | RM r
4647
+ AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
4648
+ ACR r | EPUB r | KEY r | OPUS r | SKETCH r
4649
+ AFM r | ERF r/w | LA r | ORF r/w | SO r
4650
+ AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
4651
+ AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
4652
+ APE r | EXR r | LNK r | PAC r | SRW r/w
4653
+ ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
4654
+ ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
4655
+ ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
4656
+ AVI r | FITS r | MACOS r | PCX r | TIFF r/w
4657
+ AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
4658
+ AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
4659
+ BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
4660
+ BPG r | FLV r | MIFF r | PFA r | TXT r
4661
+ BTF r | FPF r | MKA r | PFB r | VCF r
4662
+ CHM r | FPX r | MKS r | PFM r | VNT r
4663
+ COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
4664
+ CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
4665
+ CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4666
+ CRM r/w | GZ r | MODD r | PICT r | WDP r/w
4667
+ CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
4668
+ CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4669
+ CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
4670
+ CUR r | HEIF r/w | MP3 r | PPT r | WMV r
4671
+ CZI r | HTML r | MP4 r/w | PPTX r | WPG r
4672
+ DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
4673
+ DCP r/w | ICO r | MPG r | PSB r/w | WV r
4674
+ DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
4675
+ DFONT r | IDML r | MQV r/w | PSP r | XCF r
4676
+ DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
4677
+ DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
4678
+ DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
4679
+ DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
4680
+ DOC r | INX r | NKSC r/w | RAM r |
4681
+ DOCX r | ISO r | NRW r/w | RAR r |
4660
4682
 
4661
4683
  Meta Information
4662
4684
  ----------------------+----------------------+---------------------
@@ -4867,8 +4889,8 @@ OPTIONS
4867
4889
  may be used to conditionally delete or replace a tag (see "WRITING
4868
4890
  EXAMPLES" for examples). "^=" is used to write an empty string
4869
4891
  instead of deleting the tag when no *VALUE* is given, but otherwise
4870
- it is equivalent to "=", but note that the caret must be quoted on
4871
- the Windows command line.
4892
+ it is equivalent to "=". (Note that the caret must be quoted on the
4893
+ Windows command line.)
4872
4894
 
4873
4895
  *TAG* may contain one or more leading family 0, 1, 2 or 7 group
4874
4896
  names, prefixed by optional family numbers, and separated colons.
@@ -4939,7 +4961,8 @@ OPTIONS
4939
4961
  delete JPEG application segments which are not associated with
4940
4962
  another deletable group. For example, specifying "-APP14:All=" will
4941
4963
  NOT delete the APP14 "Adobe" segment because this is accomplished
4942
- with "-Adobe:All".
4964
+ with "-Adobe:All". But note that these unnamed APP segments may not
4965
+ be excluded with "--APPxx:all" when deleting all information.
4943
4966
 
4944
4967
  6) When shifting a value, the shift is applied to the original
4945
4968
  value of the tag, overriding any other values previously assigned
@@ -5581,7 +5604,7 @@ OPTIONS
5581
5604
 
5582
5605
  produces output like this:
5583
5606
 
5584
- -- Generated by ExifTool 12.62 --
5607
+ -- Generated by ExifTool 12.65 --
5585
5608
  File: a.jpg - 2003:10:31 15:44:19
5586
5609
  (f/5.6, 1/60s, ISO 100)
5587
5610
  File: b.jpg - 2006:05:23 11:57:38
@@ -6110,13 +6133,10 @@ OPTIONS
6110
6133
  Perl variables, if used, require a double "$", and regular
6111
6134
  expressions ending in $/ must use $$/ instead.
6112
6135
 
6113
- 4) The condition may only test tags from the file being processed.
6114
- To process one file based on tags from another, two steps are
6115
- required. For example, to process XMP sidecar files in directory
6116
- "DIR" based on tags from the associated NEF:
6117
-
6118
- exiftool -if EXPR -p '$directory/$filename' -ext nef DIR > nef.txt
6119
- exiftool -@ nef.txt -srcfile %d%f.xmp ...
6136
+ 4) The condition accesses only tags from the file being processed
6137
+ unless the -fileNUM option is used to read an alternate file and
6138
+ the corresponding family 8 group name is specified for the tag. See
6139
+ the -fileNUM option details for more information.
6120
6140
 
6121
6141
  5) The -a option has no effect on the evaluation of the expression,
6122
6142
  and the values of duplicate tags are accessible only by specifying
@@ -6303,11 +6323,12 @@ OPTIONS
6303
6323
  When reading, causes information to be extracted from .gz and .bz2
6304
6324
  compressed images (only one image per archive; requires gzip and
6305
6325
  bzip2 to be available). When writing, causes compressed information
6306
- to be written if supported by the metadata format (eg. compressed
6307
- textual metadata in PNG), disables the recommended padding in
6308
- embedded XMP (saving 2424 bytes when writing XMP in a file), and
6309
- writes XMP in shorthand format -- the equivalent of setting the API
6310
- Compress=1 and Compact="NoPadding,Shorthand".
6326
+ to be written if supported by the metadata format (eg. PNG supports
6327
+ compressed textual metadata, JXL supports compressed EXIF and XML,
6328
+ and MIE supports any compressed metadata), disables the recommended
6329
+ padding in embedded XMP (saving 2424 bytes when writing XMP in a
6330
+ file), and writes XMP in shorthand format -- the equivalent of
6331
+ setting the API Compress=1 and Compact="NoPadding,Shorthand".
6311
6332
 
6312
6333
  Other options
6313
6334
  -@ *ARGFILE*
@@ -6507,12 +6528,13 @@ OPTIONS
6507
6528
  improve performance in multi-pass processing by reducing the overhead
6508
6529
  required to load exiftool for each invocation.
6509
6530
 
6510
- -api *OPT[[^]=[VAL]]*
6531
+ -api [*OPT[[^]=[VAL]]*]
6511
6532
  Set ExifTool API option. *OPT* is an API option name. The option
6512
6533
  value is set to 1 if *=VAL* is omitted. If *VAL* is omitted, the
6513
6534
  option value is set to undef if "=" is used, or an empty string
6514
- with "^=". See Image::ExifTool Options for a list of available API
6515
- options. This overrides API options set via the config file.
6535
+ with "^=". If *OPT* is not specified a list of available options is
6536
+ returned. See Image::ExifTool Options for option details. This
6537
+ overrides API options set via the config file.
6516
6538
 
6517
6539
  -common_args
6518
6540
  Specifies that all arguments following this option are common to
@@ -6763,6 +6785,15 @@ OPTIONS
6763
6785
 
6764
6786
  Note that function names are case sensitive.
6765
6787
 
6788
+ ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
6789
+ function largely redundant, with all the functionality except the
6790
+ ability to avoid rewriting the file if there are no duplicates, but with
6791
+ the advantage the duplicates may be removed when accumulating list items
6792
+ from multiple sources. An equivalent to the above commands using this
6793
+ feature would be:
6794
+
6795
+ exiftool -tagsfromfile @ -keywords -api nodups a.jpg
6796
+
6766
6797
  WINDOWS UNICODE FILE NAMES
6767
6798
  In Windows, command-line arguments are specified using the current code
6768
6799
  page and are recoded automatically to the system code page. This