exiftool_vendored 13.37.0 → 13.40.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +41 -3
  3. data/bin/MANIFEST +7 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +49 -47
  7. data/bin/config_files/local_time.config +55 -0
  8. data/bin/exiftool +83 -70
  9. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  10. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
  11. data/bin/lib/Image/ExifTool/DJI.pm +256 -20
  12. data/bin/lib/Image/ExifTool/DSF.pm +138 -0
  13. data/bin/lib/Image/ExifTool/EXE.pm +3 -1
  14. data/bin/lib/Image/ExifTool/Font.pm +386 -118
  15. data/bin/lib/Image/ExifTool/Geolocation.pm +10 -7
  16. data/bin/lib/Image/ExifTool/Geotag.pm +21 -2
  17. data/bin/lib/Image/ExifTool/GoPro.pm +6 -3
  18. data/bin/lib/Image/ExifTool/Google.pm +16 -6
  19. data/bin/lib/Image/ExifTool/ID3.pm +11 -10
  20. data/bin/lib/Image/ExifTool/LNK.pm +63 -2
  21. data/bin/lib/Image/ExifTool/M2TS.pm +32 -23
  22. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  23. data/bin/lib/Image/ExifTool/OOXML.pm +3 -2
  24. data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
  25. data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
  26. data/bin/lib/Image/ExifTool/QuickTime.pm +3 -3
  27. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +44 -35
  28. data/bin/lib/Image/ExifTool/Sony.pm +19 -14
  29. data/bin/lib/Image/ExifTool/TagLookup.pm +35 -1
  30. data/bin/lib/Image/ExifTool/TagNames.pod +1383 -1217
  31. data/bin/lib/Image/ExifTool/WavPack.pm +144 -0
  32. data/bin/lib/Image/ExifTool/XMP.pm +12 -7
  33. data/bin/lib/Image/ExifTool/XMP2.pl +11 -5
  34. data/bin/lib/Image/ExifTool.pm +46 -26
  35. data/bin/lib/Image/ExifTool.pod +64 -56
  36. data/bin/perl-Image-ExifTool.spec +47 -46
  37. data/lib/exiftool_vendored/version.rb +1 -1
  38. metadata +4 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e99939a853444d1ebc80ab2738cd08bc29f2945044aa74ff682a9205e7e2e878
4
- data.tar.gz: 14cc3a3e709dd586a4d73d4056c52ee24e74c0020042ecba084211a17ce93381
3
+ metadata.gz: 9dfd10c8fad46a346537837a7eb4d95f6abf124bb6b3a9ca65479e447b6f4bac
4
+ data.tar.gz: 9ac3a94f1fa80f10cab26c6c595499b32431e39e1fa31d33255a45454b2c1465
5
5
  SHA512:
6
- metadata.gz: '098d4af617f88acbc7cba6dd401e894e6eac938b5475b889fab26de2c670aef6320040e3bb5acd1e951d06c95de022e6c76207e67c6f022117566efa13fca872'
7
- data.tar.gz: 72e570d5b590d04d5a39de9c32698f3946c0f1c0b8bdac6d9010b6c0b94e0418100b6991d16601c5064a093a6d04867290ddc286ae76478e0cc87900a9adb2e3
6
+ metadata.gz: 064efdbb744ee1a1e25c1df084286c86ecf791c85479e95d73c10b5aad589b2355068a19e1757ebc88bd26349af0550750b1c48cc0e945e833ac392583642559
7
+ data.tar.gz: 6e5d5cec5577836228ab18975639d2b7e2d27cd1a161bae004ebdb472ec7f1e669155589e2e0fb83873bf7a1bc3c592df6196e98afb7cc872b676b70564c3fea
data/bin/Changes CHANGED
@@ -7,6 +7,44 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.36. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Oct. 24, 2025 - Version 13.40
11
+
12
+ - Added read support for WOFF and WOFF2 font files (github #358)
13
+ - Added read support for Windows .URL files
14
+ - Added new XMP-iptcExt generative AI tags (thanks IPTC)
15
+ - Added config_files/local_time.config to the full distribution
16
+ - Enhanced CSV import allow SourceFile entries with a different case
17
+
18
+ Oct. 15, 2025 - Version 13.39
19
+
20
+ - Added a few new Sony lens types and improved support for a few new cameras
21
+ (thanks Jos Roost)
22
+ - Added a new Olympus LensType (thanks Karsten Gieselmann)
23
+ - Added some new Pentax PictureMode values (thanks Karsten Gieselmann)
24
+ - Decode GPS from a number of new DJI protobuf formats (thanks Juan Irache,
25
+ github #355)
26
+ - Improved identification of M4A audio files (github #80)
27
+ - Properly recognize VSDX files (github #357)
28
+ - Patched to use date from the previous RMC sentence when missing an RMC
29
+ sentence in timed GPS from the buggy NextBase 662GW
30
+ - API Changes:
31
+ - Added GeoHPosErr option to set GPSHPositioningError when geotagging
32
+
33
+ Sept. 30, 2025 - Version 13.38
34
+
35
+ - Added read support for DSF audio files (github #331)
36
+ - Decode a couple more GoPro tags
37
+ - Improved WavPack audio file support to recognize the WVP extension and
38
+ extract more than just RIFF metadata
39
+ - Updated Sony decoding for the ILCE-6400A (thanks Jos Roost)
40
+ - Set family 0 group name to "Composite" for approximated GPSDateTime in timed
41
+ video metadata
42
+ - Patched to recognize M2TS videos which begin in the middle of a packet
43
+ - Patched to attempt reading XMP which has an invalid encoding (github #348)
44
+ - Patched to avoid possible runtime warning when reading a EXE file with
45
+ corrupt resources (github #354)
46
+ - Fixed typo in a GoPro tag name
47
+
10
48
  Sept. 22, 2025 - Version 13.37
11
49
 
12
50
  - Added support for geotagging from Columbus GPS logger CSV files
@@ -15,12 +53,12 @@ Sept. 22, 2025 - Version 13.37
15
53
  - Added new Canon RFLensType and CanonModelID values (thanks Norbert Wasser
16
54
  and Hubert Figuiere, github #350)
17
55
  - Added a new FujiFilm FaceElementType value
56
+ - Decode Google HDRP maker notes (both text and Protobuf formats)
18
57
  - Decode Reconyx MicroFire and Hyperfire 4K maker notes (thanks Reconyx)
19
58
  - Decode a number of new Canon and Pentax tags and add a number of new values
20
59
  (thanks Karsten Gieselmann)
21
60
  - Decode maker notes from Ricoh GR III videos
22
61
  - Decode a new Sony tag (thanks Jos Roost)
23
- - Decode Google HDRP maker notes
24
62
  - Raised size limit on QuickTime atoms extracted for the -ee option, and added
25
63
  a minor warning and allow bypassing with the -m option if over this limit
26
64
  - Minor change to verbose output for XMP metadata
@@ -28,7 +66,7 @@ Sept. 22, 2025 - Version 13.37
28
66
  - Fixed incorrect FujiFilm PanoramaDirection values
29
67
  - API Changes:
30
68
  - Fixed GeoDir option so alternate languages are loaded properly when a
31
- relative path is used
69
+ relative path is specified
32
70
 
33
71
  Sept. 9, 2025 - Version 13.36 (production release)
34
72
 
@@ -3091,7 +3129,7 @@ Feb. 14, 2019 - Version 11.27
3091
3129
  Jan. 21, 2019 - Version 11.26
3092
3130
 
3093
3131
  - Added a new Nikon LensID (thanks LibRaw)
3094
- - Decode more tags for the Sony ICLE-6400 (thanks Jos Roost and LibRaw)
3132
+ - Decode more tags for the Sony ILCE-6400 (thanks Jos Roost and LibRaw)
3095
3133
  - Enhanced -htmldump feature to highlight IFD when mousing over IFD offset
3096
3134
 
3097
3135
  Jan. 15, 2019 - Version 11.25
data/bin/MANIFEST CHANGED
@@ -27,6 +27,7 @@ config_files/fotoware.config
27
27
  config_files/frameCount.config
28
28
  config_files/gps2utm.config
29
29
  config_files/guano.config
30
+ config_files/local_time.config
30
31
  config_files/nksc.config
31
32
  config_files/onone.config
32
33
  config_files/photoshop_paths.config
@@ -65,6 +66,7 @@ html/TagNames/DICOM.html
65
66
  html/TagNames/DJI.html
66
67
  html/TagNames/DNG.html
67
68
  html/TagNames/DPX.html
69
+ html/TagNames/DSF.html
68
70
  html/TagNames/DV.html
69
71
  html/TagNames/DarwinCore.html
70
72
  html/TagNames/DjVu.html
@@ -188,6 +190,7 @@ html/TagNames/VCard.html
188
190
  html/TagNames/Vorbis.html
189
191
  html/TagNames/WPG.html
190
192
  html/TagNames/WTV.html
193
+ html/TagNames/WavPack.html
191
194
  html/TagNames/XISF.html
192
195
  html/TagNames/XMP.html
193
196
  html/TagNames/ZIP.html
@@ -291,6 +294,7 @@ lib/Image/ExifTool/DICOM.pm
291
294
  lib/Image/ExifTool/DJI.pm
292
295
  lib/Image/ExifTool/DNG.pm
293
296
  lib/Image/ExifTool/DPX.pm
297
+ lib/Image/ExifTool/DSF.pm
294
298
  lib/Image/ExifTool/DV.pm
295
299
  lib/Image/ExifTool/DarwinCore.pm
296
300
  lib/Image/ExifTool/DjVu.pm
@@ -451,6 +455,7 @@ lib/Image/ExifTool/Validate.pm
451
455
  lib/Image/ExifTool/Vorbis.pm
452
456
  lib/Image/ExifTool/WPG.pm
453
457
  lib/Image/ExifTool/WTV.pm
458
+ lib/Image/ExifTool/WavPack.pm
454
459
  lib/Image/ExifTool/WriteCanonRaw.pl
455
460
  lib/Image/ExifTool/WriteExif.pl
456
461
  lib/Image/ExifTool/WriteIPTC.pl
@@ -691,6 +696,7 @@ t/KyoceraRaw.t
691
696
  t/KyoceraRaw_2.out
692
697
  t/LNK.t
693
698
  t/LNK_2.out
699
+ t/LNK_3.out
694
700
  t/Lang.t
695
701
  t/Lang_1.out
696
702
  t/Lang_10.out
@@ -1118,6 +1124,7 @@ t/images/Jpeg2000.jp2
1118
1124
  t/images/Kodak.jpg
1119
1125
  t/images/KyoceraRaw.raw
1120
1126
  t/images/LNK.lnk
1127
+ t/images/LNK.url
1121
1128
  t/images/Lytro.lfp
1122
1129
  t/images/M2TS.mts
1123
1130
  t/images/MIE.mie
data/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.37",
53
+ "version" : "13.40",
54
54
  "x_serialization_backend" : "JSON::PP version 4.06"
55
55
  }
data/bin/META.yml CHANGED
@@ -31,5 +31,5 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.37'
34
+ version: '13.40'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -14,51 +14,52 @@ supported by ExifTool (r = read, w = write, c = create):
14
14
 
15
15
  File Types
16
16
  ------------+-------------+-------------+-------------+------------
17
- 360 r/w | DPX r | JNG r/w | ODP r | RSRC r
18
- 3FR r | DR4 r/w/c | JP2 r/w | ODS r | RTF r
19
- 3G2 r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
20
- 3GP r/w | DV r | JSON r | OFR r | RWL r/w
21
- 7Z r | DVB r/w | JXL r/w | OGG r | RWZ r
22
- A r | DVR-MS r | K25 r | OGV r | RM r
23
- AA r | DYLIB r | KDC r | ONP r | SEQ r
24
- AAC r | EIP r | KEY r | OPUS r | SKETCH r
25
- AAE r | EPS r/w | LA r | ORF r/w | SO r
26
- AAX r/w | EPUB r | LFP r | ORI r/w | SR2 r/w
27
- ACR r | ERF r/w | LIF r | OTF r | SRF r
28
- AFM r | EXE r | LNK r | PAC r | SRW r/w
29
- AI r/w | EXIF r/w/c | LRV r/w | PAGES r | SVG r
30
- AIFF r | EXR r | M2TS r | PBM r/w | SWF r
31
- APE r | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
32
- ARQ r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
33
- ARW r/w | FFF r/w | MAX r | PCD r | TNEF r
34
- ASF r | FITS r | MEF r/w | PCX r | TORRENT r
35
- AVI r | FLA r | MIE r/w/c | PDB r | TTC r
36
- AVIF r/w | FLAC r | MIFF r | PDF r/w | TTF r
37
- AZW r | FLIF r/w | MKA r | PEF r/w | TXT r
38
- BMP r | FLV r | MKS r | PFA r | VCF r
39
- BPG r | FPF r | MKV r | PFB r | VNT r
40
- BTF r | FPX r | MNG r/w | PFM r | VRD r/w/c
41
- C2PA r | GIF r/w | MOBI r | PGF r | VSD r
42
- CHM r | GLV r/w | MODD r | PGM r/w | WAV r
43
- COS r | GPR r/w | MOI r | PLIST r | WDP r/w
44
- CR2 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
45
- CR3 r/w | HDP r/w | MOV r/w | PMP r | WEBM r
46
- CRM r/w | HDR r | MP3 r | PNG r/w | WMA r
47
- CRW r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
48
- CS1 r/w | HEIF r/w | MPC r | PPT r | WPG r
49
- CSV r | HTML r | MPG r | PPTX r | WTV r
50
- CUR r | ICC r/w/c | MPO r/w | PS r/w | WV r
51
- CZI r | ICO r | MQV r/w | PSB r/w | X3F r/w
52
- DCM r | ICS r | MRC r | PSD r/w | XCF r
53
- DCP r/w | IDML r | MRW r/w | PSP r | XISF r
54
- DCR r | IIQ r/w | MXF r | QTIF r/w | XLS r
55
- DFONT r | IND r/w | NEF r/w | R3D r | XLSX r
56
- DIVX r | INSP r/w | NKA r | RA r | XMP r/w/c
57
- DJVU r | INSV r | NKSC r/w | RAF r/w | ZIP r
58
- DLL r | INX r | NRW r/w | RAM r |
59
- DNG r/w | ISO r | NUMBERS r | RAR r |
60
- DOC r | ITC r | NXD r | RAW r/w |
61
- DOCX r | J2C r | O r | RIFF r |
17
+ 360 r/w | DR4 r/w/c | JP2 r/w | ODT r | RWL r/w
18
+ 3FR r | DSF r | JPEG r/w | OFR r | RWZ r
19
+ 3G2 r/w | DSS r | JSON r | OGG r | RM r
20
+ 3GP r/w | DV r | JXL r/w | OGV r | SEQ r
21
+ 7Z r | DVB r/w | K25 r | ONP r | SKETCH r
22
+ A r | DVR-MS r | KDC r | OPUS r | SO r
23
+ AA r | DYLIB r | KEY r | ORF r/w | SR2 r/w
24
+ AAC r | EIP r | LA r | ORI r/w | SRF r
25
+ AAE r | EPS r/w | LFP r | OTF r | SRW r/w
26
+ AAX r/w | EPUB r | LIF r | PAC r | SVG r
27
+ ACR r | ERF r/w | LNK r | PAGES r | SWF r
28
+ AFM r | EXE r | LRV r/w | PBM r/w | THM r/w
29
+ AI r/w | EXIF r/w/c | M2TS r | PCAP r | TIFF r/w
30
+ AIFF r | EXR r | M4A/V r/w | PCAPNG r | TNEF r
31
+ APE r | EXV r/w/c | MACOS r | PCD r | TORRENT r
32
+ ARQ r/w | F4A/V r/w | MAX r | PCX r | TTC r
33
+ ARW r/w | FFF r/w | MEF r/w | PDB r | TTF r
34
+ ASF r | FITS r | MIE r/w/c | PDF r/w | TXT r
35
+ AVI r | FLA r | MIFF r | PEF r/w | URL r
36
+ AVIF r/w | FLAC r | MKA r | PFA r | VCF r
37
+ AZW r | FLIF r/w | MKS r | PFB r | VNT r
38
+ BMP r | FLV r | MKV r | PFM r | VRD r/w/c
39
+ BPG r | FPF r | MNG r/w | PGF r | VSD r
40
+ BTF r | FPX r | MOBI r | PGM r/w | VSDX r
41
+ C2PA r | GIF r/w | MODD r | PLIST r | WAV r
42
+ CHM r | GLV r/w | MOI r | PICT r | WDP r/w
43
+ COS r | GPR r/w | MOS r/w | PMP r | WEBP r/w
44
+ CR2 r/w | GZ r | MOV r/w | PNG r/w | WEBM r
45
+ CR3 r/w | HDP r/w | MP3 r | PPM r/w | WMA r
46
+ CRM r/w | HDR r | MP4 r/w | PPT r | WMV r
47
+ CRW r/w | HEIC r/w | MPC r | PPTX r | WOFF r
48
+ CS1 r/w | HEIF r/w | MPG r | PS r/w | WOFF2 r
49
+ CSV r | HTML r | MPO r/w | PSB r/w | WPG r
50
+ CUR r | ICC r/w/c | MQV r/w | PSD r/w | WTV r
51
+ CZI r | ICO r | MRC r | PSP r | WV r
52
+ DCM r | ICS r | MRW r/w | QTIF r/w | X3F r/w
53
+ DCP r/w | IDML r | MXF r | R3D r | XCF r
54
+ DCR r | IIQ r/w | NEF r/w | RA r | XISF r
55
+ DFONT r | IND r/w | NKA r | RAF r/w | XLS r
56
+ DIVX r | INSP r/w | NKSC r/w | RAM r | XLSX r
57
+ DJVU r | INSV r | NRW r/w | RAR r | XMP r/w/c
58
+ DLL r | INX r | NUMBERS r | RAW r/w | ZIP r
59
+ DNG r/w | ISO r | NXD r | RIFF r |
60
+ DOC r | ITC r | O r | RSRC r |
61
+ DOCX r | J2C r | ODP r | RTF r |
62
+ DPX r | JNG r/w | ODS r | RW2 r/w |
62
63
 
63
64
  Meta Information
64
65
  ----------------------+----------------------+---------------------
@@ -110,8 +111,8 @@ your home directory, then you would type the following commands in a
110
111
  terminal window to extract and run ExifTool:
111
112
 
112
113
  cd ~/Desktop
113
- gzip -dc Image-ExifTool-13.37.tar.gz | tar -xf -
114
- cd Image-ExifTool-13.37
114
+ gzip -dc Image-ExifTool-13.40.tar.gz | tar -xf -
115
+ cd Image-ExifTool-13.40
115
116
  ./exiftool t/images/ExifTool.jpg
116
117
 
117
118
  Note: These commands extract meta information from one of the test images.
@@ -209,6 +210,7 @@ distribution package:
209
210
  frameCount.config - Extract FrameCount from MP4 videos
210
211
  gps2utm.config - Generate UTM coordinate tags from GPS info
211
212
  guano.config - Decode individual tags from Guano metadata
213
+ local_time.config - Determine local time from GPS information
212
214
  nksc.config - Decode tags in Nikon ViewNX NKSC files
213
215
  onone.config - Definitions for writing On1 XMP tags
214
216
  photoshop_paths.config - For extracting or copying Photoshop paths
@@ -0,0 +1,55 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: local_time.config
3
+ #
4
+ # Description: Determine local time based on GPS location and GPSDateTime
5
+ #
6
+ # Notes: 1. Requires that the API TimeZone option functions properly
7
+ # using an IANA time zone name (like "America/New_York"), so
8
+ # this may not work on Windows systems.
9
+ #
10
+ # 2. Time is based on GPSDateTime preferentially, otherwise
11
+ # DateTimeOriginal then CreateDate assuming the system time
12
+ # zone unless the corresponding OffsetTime tag exists.
13
+ #
14
+ # Usage: exiftool -config local_time.config -localtime FILE
15
+ #
16
+ # Requires: ExifTool version 12.78 or later
17
+ #
18
+ # Revisions: 2025-10-19 - P. Harvey Created
19
+ #------------------------------------------------------------------------------
20
+
21
+ %Image::ExifTool::UserDefined = (
22
+ 'Image::ExifTool::Composite' => {
23
+ LocalTime => {
24
+ Groups => { 2 => 'Time' },
25
+ Require => {
26
+ 0 => 'GPSLatitude',
27
+ 1 => 'GPSLongitude',
28
+ },
29
+ Desire => {
30
+ 2 => 'GPSDateTime',
31
+ 3 => 'SubSecDateTimeOriginal',
32
+ 4 => 'SubSecCreateDate',
33
+ 5 => 'DateTimeOriginal',
34
+ 6 => 'CreateDate',
35
+ },
36
+ ValueConv => q{
37
+ require Image::ExifTool::Geolocation;
38
+ my ($loc) = Image::ExifTool::Geolocation::Geolocate("$val[0],$val[1]");
39
+ return undef unless $loc;
40
+ my $time = $val[2] || $val[3] || $val[4] || $val[5] || $val[6];
41
+ return undef unless $time;
42
+ my $secs = Image::ExifTool::GetUnixTime($time, 1);
43
+ return undef unless $secs;
44
+ my @info = Image::ExifTool::Geolocation::GetEntry($$loc[0]);
45
+ $self->Options(TimeZone => $info[5]);
46
+ my $localTime = Image::ExifTool::ConvertUnixTime($secs, 1);
47
+ $self->Options(TimeZone => undef);
48
+ return $localTime;
49
+ },
50
+ },
51
+ },
52
+ );
53
+
54
+ 1; #end
55
+
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.37';
14
+ my $version = '13.40';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -1935,7 +1935,7 @@ if (@fileOrder) {
1935
1935
  # set file count for progress message
1936
1936
  $progressMax = scalar @files if defined $progress;
1937
1937
 
1938
- # store duplicate database information under absolute path
1938
+ # store duplicate database information under absolute path and with standardized case
1939
1939
  my @dbKeys = keys %database;
1940
1940
  if (@dbKeys) {
1941
1941
  if (eval { require Cwd }) {
@@ -1944,6 +1944,7 @@ if (@dbKeys) {
1944
1944
  foreach (@dbKeys) {
1945
1945
  my $db = $database{$_};
1946
1946
  tr/\\/\// and $database{$_} = $db; # allow for backslashes in SourceFile
1947
+ $database{lc} = $db unless $database{lc}; # duplicate entry with lower case
1947
1948
  # (punt on using ConvertFileName here, so $absPath may be a mix of encodings)
1948
1949
  my $absPath = AbsPath($_);
1949
1950
  if (defined $absPath) {
@@ -1951,6 +1952,7 @@ if (@dbKeys) {
1951
1952
  if ($verbose and $verbose > 1) {
1952
1953
  print $vout "Imported entry for '${_}' (full path: '${absPath}')\n";
1953
1954
  }
1955
+ $database{lc $absPath} = $db unless $database{lc $absPath};
1954
1956
  } elsif ($verbose and $verbose > 1) {
1955
1957
  print $vout "Imported entry for '${_}' (no full path)\n";
1956
1958
  }
@@ -3259,10 +3261,18 @@ sub SetImageInfo($$$)
3259
3261
  my $csvInfo = $database{$f};
3260
3262
  unless ($csvInfo) {
3261
3263
  next if $f eq '*';
3262
- # check absolute path
3264
+ # check absolute path and case-insensitive name
3263
3265
  # (punt on using ConvertFileName here, so $absPath may be a mix of encodings)
3264
3266
  my $absPath = AbsPath($f);
3265
- next unless defined $absPath and $csvInfo = $database{$absPath};
3267
+ if (defined $absPath and $database{$absPath}) {
3268
+ $csvInfo = $database{$absPath};
3269
+ } elsif ($database{lc $f}) {
3270
+ $csvInfo = $database{lc $f};
3271
+ } elsif (defined $absPath and $database{lc $absPath}) {
3272
+ $csvInfo = $database{lc $absPath};
3273
+ } else {
3274
+ next;
3275
+ }
3266
3276
  }
3267
3277
  $found = 1;
3268
3278
  if ($verbose) {
@@ -5079,51 +5089,52 @@ supported by ExifTool (r = read, w = write, c = create):
5079
5089
 
5080
5090
  File Types
5081
5091
  ------------+-------------+-------------+-------------+------------
5082
- 360 r/w | DPX r | JNG r/w | ODP r | RSRC r
5083
- 3FR r | DR4 r/w/c | JP2 r/w | ODS r | RTF r
5084
- 3G2 r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
5085
- 3GP r/w | DV r | JSON r | OFR r | RWL r/w
5086
- 7Z r | DVB r/w | JXL r/w | OGG r | RWZ r
5087
- A r | DVR-MS r | K25 r | OGV r | RM r
5088
- AA r | DYLIB r | KDC r | ONP r | SEQ r
5089
- AAC r | EIP r | KEY r | OPUS r | SKETCH r
5090
- AAE r | EPS r/w | LA r | ORF r/w | SO r
5091
- AAX r/w | EPUB r | LFP r | ORI r/w | SR2 r/w
5092
- ACR r | ERF r/w | LIF r | OTF r | SRF r
5093
- AFM r | EXE r | LNK r | PAC r | SRW r/w
5094
- AI r/w | EXIF r/w/c | LRV r/w | PAGES r | SVG r
5095
- AIFF r | EXR r | M2TS r | PBM r/w | SWF r
5096
- APE r | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
5097
- ARQ r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
5098
- ARW r/w | FFF r/w | MAX r | PCD r | TNEF r
5099
- ASF r | FITS r | MEF r/w | PCX r | TORRENT r
5100
- AVI r | FLA r | MIE r/w/c | PDB r | TTC r
5101
- AVIF r/w | FLAC r | MIFF r | PDF r/w | TTF r
5102
- AZW r | FLIF r/w | MKA r | PEF r/w | TXT r
5103
- BMP r | FLV r | MKS r | PFA r | VCF r
5104
- BPG r | FPF r | MKV r | PFB r | VNT r
5105
- BTF r | FPX r | MNG r/w | PFM r | VRD r/w/c
5106
- C2PA r | GIF r/w | MOBI r | PGF r | VSD r
5107
- CHM r | GLV r/w | MODD r | PGM r/w | WAV r
5108
- COS r | GPR r/w | MOI r | PLIST r | WDP r/w
5109
- CR2 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
5110
- CR3 r/w | HDP r/w | MOV r/w | PMP r | WEBM r
5111
- CRM r/w | HDR r | MP3 r | PNG r/w | WMA r
5112
- CRW r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
5113
- CS1 r/w | HEIF r/w | MPC r | PPT r | WPG r
5114
- CSV r | HTML r | MPG r | PPTX r | WTV r
5115
- CUR r | ICC r/w/c | MPO r/w | PS r/w | WV r
5116
- CZI r | ICO r | MQV r/w | PSB r/w | X3F r/w
5117
- DCM r | ICS r | MRC r | PSD r/w | XCF r
5118
- DCP r/w | IDML r | MRW r/w | PSP r | XISF r
5119
- DCR r | IIQ r/w | MXF r | QTIF r/w | XLS r
5120
- DFONT r | IND r/w | NEF r/w | R3D r | XLSX r
5121
- DIVX r | INSP r/w | NKA r | RA r | XMP r/w/c
5122
- DJVU r | INSV r | NKSC r/w | RAF r/w | ZIP r
5123
- DLL r | INX r | NRW r/w | RAM r |
5124
- DNG r/w | ISO r | NUMBERS r | RAR r |
5125
- DOC r | ITC r | NXD r | RAW r/w |
5126
- DOCX r | J2C r | O r | RIFF r |
5092
+ 360 r/w | DR4 r/w/c | JP2 r/w | ODT r | RWL r/w
5093
+ 3FR r | DSF r | JPEG r/w | OFR r | RWZ r
5094
+ 3G2 r/w | DSS r | JSON r | OGG r | RM r
5095
+ 3GP r/w | DV r | JXL r/w | OGV r | SEQ r
5096
+ 7Z r | DVB r/w | K25 r | ONP r | SKETCH r
5097
+ A r | DVR-MS r | KDC r | OPUS r | SO r
5098
+ AA r | DYLIB r | KEY r | ORF r/w | SR2 r/w
5099
+ AAC r | EIP r | LA r | ORI r/w | SRF r
5100
+ AAE r | EPS r/w | LFP r | OTF r | SRW r/w
5101
+ AAX r/w | EPUB r | LIF r | PAC r | SVG r
5102
+ ACR r | ERF r/w | LNK r | PAGES r | SWF r
5103
+ AFM r | EXE r | LRV r/w | PBM r/w | THM r/w
5104
+ AI r/w | EXIF r/w/c | M2TS r | PCAP r | TIFF r/w
5105
+ AIFF r | EXR r | M4A/V r/w | PCAPNG r | TNEF r
5106
+ APE r | EXV r/w/c | MACOS r | PCD r | TORRENT r
5107
+ ARQ r/w | F4A/V r/w | MAX r | PCX r | TTC r
5108
+ ARW r/w | FFF r/w | MEF r/w | PDB r | TTF r
5109
+ ASF r | FITS r | MIE r/w/c | PDF r/w | TXT r
5110
+ AVI r | FLA r | MIFF r | PEF r/w | URL r
5111
+ AVIF r/w | FLAC r | MKA r | PFA r | VCF r
5112
+ AZW r | FLIF r/w | MKS r | PFB r | VNT r
5113
+ BMP r | FLV r | MKV r | PFM r | VRD r/w/c
5114
+ BPG r | FPF r | MNG r/w | PGF r | VSD r
5115
+ BTF r | FPX r | MOBI r | PGM r/w | VSDX r
5116
+ C2PA r | GIF r/w | MODD r | PLIST r | WAV r
5117
+ CHM r | GLV r/w | MOI r | PICT r | WDP r/w
5118
+ COS r | GPR r/w | MOS r/w | PMP r | WEBP r/w
5119
+ CR2 r/w | GZ r | MOV r/w | PNG r/w | WEBM r
5120
+ CR3 r/w | HDP r/w | MP3 r | PPM r/w | WMA r
5121
+ CRM r/w | HDR r | MP4 r/w | PPT r | WMV r
5122
+ CRW r/w | HEIC r/w | MPC r | PPTX r | WOFF r
5123
+ CS1 r/w | HEIF r/w | MPG r | PS r/w | WOFF2 r
5124
+ CSV r | HTML r | MPO r/w | PSB r/w | WPG r
5125
+ CUR r | ICC r/w/c | MQV r/w | PSD r/w | WTV r
5126
+ CZI r | ICO r | MRC r | PSP r | WV r
5127
+ DCM r | ICS r | MRW r/w | QTIF r/w | X3F r/w
5128
+ DCP r/w | IDML r | MXF r | R3D r | XCF r
5129
+ DCR r | IIQ r/w | NEF r/w | RA r | XISF r
5130
+ DFONT r | IND r/w | NKA r | RAF r/w | XLS r
5131
+ DIVX r | INSP r/w | NKSC r/w | RAM r | XLSX r
5132
+ DJVU r | INSV r | NRW r/w | RAR r | XMP r/w/c
5133
+ DLL r | INX r | NUMBERS r | RAW r/w | ZIP r
5134
+ DNG r/w | ISO r | NXD r | RIFF r |
5135
+ DOC r | ITC r | O r | RSRC r |
5136
+ DOCX r | J2C r | ODP r | RTF r |
5137
+ DPX r | JNG r/w | ODS r | RW2 r/w |
5127
5138
 
5128
5139
  Meta Information
5129
5140
  ----------------------+----------------------+---------------------
@@ -5722,10 +5733,12 @@ as the exported file. The first row of the I<CSVFILE> must be the ExifTool
5722
5733
  tag names (with optional group names) for each column of the file, and
5723
5734
  values must be separated by commas. A special "SourceFile" column specifies
5724
5735
  the files associated with each row of information (and a SourceFile of "*"
5725
- may be used to define default tags to be imported for all files which are
5726
- combined with any tags specified for the specific SourceFile processed). The
5727
- B<-csvDelim> option may be used to change the input/output field delimiter
5728
- if something other than a comma is required.
5736
+ may be used to define default tags to be imported for all files, which are
5737
+ then combined with any tags specified for the specific SourceFile
5738
+ processed). To be clear, the imported CSV file acts as a lookup table to
5739
+ obtain the tags for import based on the files/directories and tags specified
5740
+ on the command line. The B<-csvDelim> option may be used to change the
5741
+ input/output field delimiter if something other than a comma is required.
5729
5742
 
5730
5743
  The following examples demonstrate basic use of the B<-csv> option:
5731
5744
 
@@ -5924,18 +5937,18 @@ convert arrays into strings. For example:
5924
5937
 
5925
5938
  exiftool -j -api structformat=jsonq -sep ", " ...
5926
5939
 
5927
- If I<JSONFILE> is specified, the file is imported and the tag definitions
5928
- from the file are used to set tag values on a per-file basis. The special
5929
- "SourceFile" entry in each JSON object associates the information with a
5930
- specific target file. An object with a missing SourceFile or a SourceFile
5931
- of "*" defines default tags for all target files which are combined with any
5932
- tags specified for the specific SourceFile processed. The imported JSON
5933
- file must have the same format as the exported JSON files with the exception
5934
- that options exporting JSON objects instead of simple values are not
5935
- compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
5936
- or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
5937
- tag names in the input JSON file may be suffixed with a C<#> to disable
5938
- print conversion.
5940
+ If I<JSONFILE> is specified, the JSON file is imported and the tag
5941
+ definitions from the JSON are used to set tag values on a per-file basis for
5942
+ each file specified on the command line. A special "SourceFile" entry in
5943
+ each JSON object associates the information with a specific target file. An
5944
+ object with a missing SourceFile or a SourceFile of "*" defines default tags
5945
+ for all target files which are combined with any tags specified for the
5946
+ specific SourceFile processed. The imported JSON file must have the same
5947
+ format as the exported JSON files with the exception that options exporting
5948
+ JSON objects instead of simple values are not compatible with the import
5949
+ file format (ie. export with B<-D>, B<-H>, B<-l>, or B<-T> is not
5950
+ compatible, and use B<-G> instead of B<-g>). Additionally, tag names in the
5951
+ input JSON file may be suffixed with a C<#> to disable print conversion.
5939
5952
 
5940
5953
  Specific tags may be imported from the JSON database by adding B<->I<TAG>
5941
5954
  options to the command, or excluded with B<-->I<TAG>, with exclusions taking
@@ -6082,7 +6095,7 @@ with this command:
6082
6095
 
6083
6096
  produces output like this:
6084
6097
 
6085
- -- Generated by ExifTool 13.37 --
6098
+ -- Generated by ExifTool 13.40 --
6086
6099
  File: a.jpg - 2003:10:31 15:44:19
6087
6100
  (f/5.6, 1/60s, ISO 100)
6088
6101
  File: b.jpg - 2006:05:23 11:57:38
@@ -7335,7 +7348,7 @@ used in file names.)
7335
7348
 
7336
7349
  Note that function names are case sensitive.
7337
7350
 
7338
- C<DateFmt>
7351
+ B<C<DateFmt>>
7339
7352
 
7340
7353
  Simplifies reformatting of individual date/time values. This function acts
7341
7354
  on a standard EXIF-formatted date/time value in C<$_> and formats it
@@ -7346,7 +7359,7 @@ used. For example:
7346
7359
 
7347
7360
  exiftool -p '${createdate#;DateFmt("%Y-%m-%d_%H%M%S")}' a.jpg
7348
7361
 
7349
- C<ShiftTime>
7362
+ B<C<ShiftTime>>
7350
7363
 
7351
7364
  Shifts EXIF-formatted date/time string by a specified amount. Start with a
7352
7365
  leading minus sign to shift backwards in time. See
@@ -7355,7 +7368,7 @@ shift syntax. For example, to shift a date/time value back by one year:
7355
7368
 
7356
7369
  exiftool -p '${createdate;ShiftTime("-1:0:0 0")}' a.jpg
7357
7370
 
7358
- C<NoDups>
7371
+ B<C<NoDups>>
7359
7372
 
7360
7373
  Removes duplicate items from a list with a separator specified by the
7361
7374
  B<-sep> option. This function is most useful when copying list-type tags.
@@ -7380,7 +7393,7 @@ sources. An equivalent to the above commands using this feature would be:
7380
7393
 
7381
7394
  exiftool -tagsfromfile @ -keywords -api nodups a.jpg
7382
7395
 
7383
- C<SetTags>
7396
+ B<C<SetTags>>
7384
7397
 
7385
7398
  Used to set tags in extracted images. With no arguments, copies all tags
7386
7399
  from the source file to the embedded image:
@@ -248,7 +248,7 @@ my %fixed2_30 = (
248
248
  );
249
249
 
250
250
  #------------------------------------------------------------------------------
251
- # Extract EXIF information from a BMP image
251
+ # Extract metadata from a BMP image
252
252
  # Inputs: 0) ExifTool object reference, 1) dirInfo reference
253
253
  # Returns: 1 on success, 0 if this wasn't a valid BMP file
254
254
  sub ProcessBMP($$)
@@ -74,7 +74,8 @@ my %tweakOrder = (
74
74
  DJI => 'Casio',
75
75
  FLIR => 'DJI',
76
76
  FujiFilm => 'FLIR',
77
- GoPro => 'GE',
77
+ Google => 'GE',
78
+ GoPro => 'Google',
78
79
  Kodak => 'JVC',
79
80
  Leaf => 'Kodak',
80
81
  Lytro => 'Leaf',
@@ -109,7 +110,6 @@ my %tweakOrder = (
109
110
  'FujiFilm::RAFData' => 'FujiFilm::RAF',
110
111
  'QuickTime::AudioKeys' => 'QuickTime::Keys',
111
112
  'QuickTime::VideoKeys' => 'QuickTime::AudioKeys',
112
- 'Google::HDRPText' => 'Google::HDRPlusMakerNote',
113
113
  );
114
114
 
115
115
  # list of all recognized Format strings