exiftool_vendored 13.31.0 → 13.33.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +38 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +47 -46
  7. data/bin/exiftool +81 -56
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
  9. data/bin/lib/Image/ExifTool/Canon.pm +10 -2
  10. data/bin/lib/Image/ExifTool/Exif.pm +5 -3
  11. data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
  12. data/bin/lib/Image/ExifTool/FujiFilm.pm +10 -3
  13. data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
  14. data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
  15. data/bin/lib/Image/ExifTool/LNK.pm +4 -1
  16. data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
  17. data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
  18. data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
  19. data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
  20. data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
  21. data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
  22. data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
  23. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
  24. data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
  25. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Nikon.pm +71 -37
  27. data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
  28. data/bin/lib/Image/ExifTool/Olympus.pm +240 -35
  29. data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
  30. data/bin/lib/Image/ExifTool/Pentax.pm +271 -53
  31. data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
  32. data/bin/lib/Image/ExifTool/Sony.pm +5 -2
  33. data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
  34. data/bin/lib/Image/ExifTool/TagLookup.pm +4373 -4264
  35. data/bin/lib/Image/ExifTool/TagNames.pod +249 -17
  36. data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
  37. data/bin/lib/Image/ExifTool/Writer.pl +15 -11
  38. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  39. data/bin/lib/Image/ExifTool.pm +11 -4
  40. data/bin/lib/Image/ExifTool.pod +45 -44
  41. data/bin/perl-Image-ExifTool.spec +46 -45
  42. data/lib/exiftool_vendored/version.rb +1 -1
  43. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 294fadd1a8ca95bacd65ceb7ccbe1e1bcad11e1c54be1614b2a97268f34b4fef
4
- data.tar.gz: f9e486c3194561137b60596a608d121e6c836d2f1cbcc6377c8452d4187a2a8a
3
+ metadata.gz: 5188f2fb9bb03c179101219cd17d5129411b4f517c3e6acd10c915336d0fa89e
4
+ data.tar.gz: 953b6ce7f3f1a259cbc4f34e7b72a4851460d762297132f9498306644aede5e5
5
5
  SHA512:
6
- metadata.gz: c7432115839881c5b0076b2ae50264ccceb0de022923b9c7cfe1a0f1aec10a019c111d92f6beb7420e3b24b54852495acdb9e380b47837228771dfb446a582d5
7
- data.tar.gz: fa0028c4e342601dc7ee84a823c94f728a9ef04a2fdc93ae131ae0cb73259571377916ea88802af733012a442d6581f9edbdf3d851516eda289d18181ee61aa2
6
+ metadata.gz: 6bc2708043ba0de2e7f492c456f0257a342771e7d962a306620ded3ce97a30727087a0d5200ed615ac083b394f8dee318b4e7e68e472739028df1c98d91e17fa
7
+ data.tar.gz: b2ce97b5597a47050ed22df9baec8a3b760f3da83956fd7c842e0d4eddbcc6b44597b0c40f024bfca54421141f27c954aae6bee6f51dbdb3eba271fa84cfb69f
data/bin/Changes CHANGED
@@ -7,6 +7,43 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.30. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ July 25, 2025 - Version 13.33
11
+
12
+ - Added read support for TNEF files (eg. "winmail.dat")
13
+ - Added a new Canon HighlightTonePriority value (github #339)
14
+ - Decode Canon FocusBracketing tag (github #340)
15
+ - Decode more tags for newer Nikon Z models (thanks Warren Hatch)
16
+ - Decode a few more Olympus tags (thanks Karsten Gieselmann)
17
+ - Decode a few more FujiFilm tags (github #343)
18
+ - Handle Olympus RawDev2IFD tag 0x8000 (named it RawDevSubIFD)
19
+ - Improved recognition of some Sony lenses (github #342)
20
+ - Enhanced the -p option to cycle through sub-subdocuments
21
+ - Improved extraction of GoPro timed GPS to use sub-subdocuments to separate
22
+ the individual fixes, allowing -p to extract all fixes at sub-second
23
+ resolution (althought for earlier models these don't all contain timestamps)
24
+ - Extract EXIF information from Sigma fp MOV videos
25
+ - Patched to avoid "multi-segment EXIF with external pointers" error when
26
+ writing Olympus OM-1 JPG files converted by some utilities
27
+ - Fixed decoding of Panasonic LongExposureNRUsed (thanks AndrewJ)
28
+ - Fixed long-standing bug when using special characters in the -d option
29
+ argument
30
+
31
+ July 2, 2025 - Version 13.32
32
+
33
+ - Added a new Olympus CameraType (thanks Herb and Albert Shan)
34
+ - Added a new Sony LensType (github #335)
35
+ - Added a new Nikon CropHiSpeed value (thanks Albert Shan)
36
+ - Added a warning if a tag value couldn't be packed for writing to a binary
37
+ data structure
38
+ - Decode more Ricoh/Pentax AF tags for some models (thanks Karsten Gieselmann)
39
+ - Decode Canon HDR-PQ tag (github #336)
40
+ - Extract a couple more EXIF tags
41
+ - Patched to allow a dot (.) in the name of a structure element when writing
42
+ - Fixed "uninitialized value" bug when using -w with the -stay_open feature
43
+ - Fixed bug in -file option when using tag names to specify the name of the
44
+ alternate file (the tags were taken only from the first input file unless a
45
+ file name formatting code was also specified)
46
+
10
47
  June 19, 2025 - Version 13.31
11
48
 
12
49
  - Added a new CanonModelID and RFLensType (thanks Norbert Wasser)
@@ -407,7 +444,7 @@ Nov. 12, 2024 - Version 13.03
407
444
  Nov. 5, 2024 - Version 13.02
408
445
 
409
446
  - Enhanced -j -l output to add optional "fmt" and "hex" fields
410
- - Enhanced -geotag option to support Android "Export Timeline data" JSON
447
+ - Enhanced -geotag option to support Google Maps "Export Timeline data" JSON
411
448
  format
412
449
  - Changed ProductVersion of Windows launcher to match ExifTool version
413
450
  - Patched to use empty group name instead of "Copy0" for family 4 group name
data/bin/MANIFEST CHANGED
@@ -177,6 +177,7 @@ html/TagNames/SigmaRaw.html
177
177
  html/TagNames/Sony.html
178
178
  html/TagNames/SonyIDC.html
179
179
  html/TagNames/Stim.html
180
+ html/TagNames/TNEF.html
180
181
  html/TagNames/Text.html
181
182
  html/TagNames/Theora.html
182
183
  html/TagNames/Torrent.html
@@ -434,6 +435,7 @@ lib/Image/ExifTool/SigmaRaw.pm
434
435
  lib/Image/ExifTool/Sony.pm
435
436
  lib/Image/ExifTool/SonyIDC.pm
436
437
  lib/Image/ExifTool/Stim.pm
438
+ lib/Image/ExifTool/TNEF.pm
437
439
  lib/Image/ExifTool/TagInfoXML.pm
438
440
  lib/Image/ExifTool/TagLookup.pm
439
441
  lib/Image/ExifTool/TagNames.pod
@@ -887,6 +889,8 @@ t/Sony.t
887
889
  t/Sony_2.out
888
890
  t/Sony_3.out
889
891
  t/Sony_5.out
892
+ t/TNEF.t
893
+ t/TNEF_2.out
890
894
  t/TestLib.pm
891
895
  t/Text.t
892
896
  t/Text_2.out
@@ -1179,6 +1183,7 @@ t/images/Sigma.x3f
1179
1183
  t/images/SigmaDP2.x3f
1180
1184
  t/images/Sony.jpg
1181
1185
  t/images/Sony.pmp
1186
+ t/images/TNEF.tnef
1182
1187
  t/images/Text.csv
1183
1188
  t/images/Text1.txt
1184
1189
  t/images/Text2.txt
data/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.31",
53
+ "version" : "13.33",
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.31'
34
+ version: '13.33'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -14,50 +14,51 @@ supported by ExifTool (r = read, w = write, c = create):
14
14
 
15
15
  File Types
16
16
  ------------+-------------+-------------+-------------+------------
17
- 360 r/w | DOCX r | ITC r | NUMBERS r | RAM r
18
- 3FR r | DPX r | J2C r | NXD r | RAR r
19
- 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RAW r/w
20
- 3GP r/w | DSS r | JP2 r/w | ODP r | RIFF r
21
- 7Z r | DV r | JPEG r/w | ODS r | RSRC r
22
- A r | DVB r/w | JSON r | ODT r | RTF r
23
- AA r | DVR-MS r | JXL r/w | OFR r | RW2 r/w
24
- AAC r | DYLIB r | K25 r | OGG r | RWL r/w
25
- AAE r | EIP r | KDC r | OGV r | RWZ r
26
- AAX r/w | EPS r/w | KEY r | ONP r | RM r
27
- ACR r | EPUB r | LA r | OPUS r | SEQ r
28
- AFM r | ERF r/w | LFP r | ORF r/w | SKETCH r
29
- AI r/w | EXE r | LIF r | ORI r/w | SO r
30
- AIFF r | EXIF r/w/c | LNK r | OTF r | SR2 r/w
31
- APE r | EXR r | LRV r/w | PAC r | SRF r
32
- ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SRW r/w
33
- ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | SVG r
34
- ASF r | FFF r/w | MACOS r | PCAP r | SWF r
35
- AVI r | FITS r | MAX r | PCAPNG r | THM r/w
36
- AVIF r/w | FLA r | MEF r/w | PCD r | TIFF r/w
37
- AZW r | FLAC r | MIE r/w/c | PCX r | TORRENT r
38
- BMP r | FLIF r/w | MIFF r | PDB r | TTC r
39
- BPG r | FLV r | MKA r | PDF r/w | TTF r
40
- BTF r | FPF r | MKS r | PEF r/w | TXT r
41
- C2PA r | FPX r | MKV r | PFA r | VCF r
42
- CHM r | GIF r/w | MNG r/w | PFB r | VNT r
43
- COS r | GLV r/w | MOBI r | PFM r | VRD r/w/c
44
- CR2 r/w | GPR r/w | MODD r | PGF r | VSD r
45
- CR3 r/w | GZ r | MOI r | PGM r/w | WAV r
46
- CRM r/w | HDP r/w | MOS r/w | PLIST r | WDP r/w
47
- CRW r/w | HDR r | MOV r/w | PICT r | WEBP r/w
48
- CS1 r/w | HEIC r/w | MP3 r | PMP r | WEBM r
49
- CSV r | HEIF r/w | MP4 r/w | PNG r/w | WMA r
50
- CUR r | HTML r | MPC r | PPM r/w | WMV r
51
- CZI r | ICC r/w/c | MPG r | PPT r | WPG r
52
- DCM r | ICO r | MPO r/w | PPTX r | WTV r
53
- DCP r/w | ICS r | MQV r/w | PS r/w | WV r
54
- DCR r | IDML r | MRC r | PSB r/w | X3F r/w
55
- DFONT r | IIQ r/w | MRW r/w | PSD r/w | XCF r
56
- DIVX r | IND r/w | MXF r | PSP r | XISF r
57
- DJVU r | INSP r/w | NEF r/w | QTIF r/w | XLS r
58
- DLL r | INSV r | NKA r | R3D r | XLSX r
59
- DNG r/w | INX r | NKSC r/w | RA r | XMP r/w/c
60
- DOC r | ISO r | NRW r/w | RAF r/w | ZIP r
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 |
61
62
 
62
63
  Meta Information
63
64
  ----------------------+----------------------+---------------------
@@ -109,8 +110,8 @@ your home directory, then you would type the following commands in a
109
110
  terminal window to extract and run ExifTool:
110
111
 
111
112
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-13.31.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.31
113
+ gzip -dc Image-ExifTool-13.33.tar.gz | tar -xf -
114
+ cd Image-ExifTool-13.33
114
115
  ./exiftool t/images/ExifTool.jpg
115
116
 
116
117
  Note: These commands extract meta information from one of the test images.
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.31';
14
+ my $version = '13.33';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -101,9 +101,9 @@ my @csvFiles; # list of files when reading with CSV option (in ExifTool Ch
101
101
  my @csvTags; # order of tags for first file with CSV option (lower case)
102
102
  my @delFiles; # list of files to delete
103
103
  my @dynamicFiles; # list of -tagsFromFile files with dynamic names and -TAG<=FMT pairs
104
+ my (@echo3, @echo4);# stdout and stderr echo after processing is complete
104
105
  my @efile; # files for writing list of error/fail/same file names
105
106
  my @exclude; # list of excluded tags
106
- my (@echo3, @echo4);# stdout and stderr echo after processing is complete
107
107
  my @files; # list of files and directories to scan
108
108
  my @moreArgs; # more arguments to process after -stay_open -@
109
109
  my @newValues; # list of new tag values to set
@@ -118,7 +118,6 @@ my %csvTags; # lookup for all found tags with CSV option (lower case keys
118
118
  my %database; # lookup for database information based on file name (in ExifTool Charset)
119
119
  my %filterExt; # lookup for filtered extensions
120
120
  my %ignore; # directory names to ignore
121
- my $ignoreHidden; # flag to ignore hidden files
122
121
  my %outComma; # flag that output text file needs a comma
123
122
  my %outTrailer; # trailer for output text file
124
123
  my %preserveTime; # preserved timestamps for files
@@ -130,6 +129,7 @@ my %usedFileName; # lookup for file names we already used in TestName feature
130
129
  my %utf8FileName; # lookup for file names that are UTF-8 encoded
131
130
  my %warnedOnce; # lookup for once-only warnings
132
131
  my %wext; # -W extensions to write
132
+ my %wroteHEAD; # list of output txt files to which we wrote HEAD
133
133
  my $allGroup; # show group name for all tags
134
134
  my $altEnc; # alternate character encoding if not UTF-8
135
135
  my $argFormat; # use exiftool argument-format output
@@ -175,6 +175,7 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
175
175
  my $geoOnly; # flag to extract Geolocation tags only
176
176
  my $helped; # flag to avoid printing help if no tags specified
177
177
  my $html; # flag for html-formatted output (2=html dump)
178
+ my $ignoreHidden; # flag to ignore hidden files
178
179
  my $interrupted; # flag set if CTRL-C is pressed during a critical process
179
180
  my $isBinary; # true if value is a SCALAR ref
180
181
  my $isWriting; # flag set if we are writing tags
@@ -227,7 +228,6 @@ my $validFile; # flag indicating we processed a valid file
227
228
  my $verbose; # verbose setting
228
229
  my $vout; # verbose output file reference (\*STDOUT or \*STDERR by default)
229
230
  my $windowTitle; # title for console window
230
- my %wroteHEAD; # list of output txt files to which we wrote HEAD
231
231
  my $xml; # flag for XML-formatted output
232
232
 
233
233
  # flag to keep the input -@ argfile open:
@@ -451,8 +451,10 @@ undef @efile;
451
451
  undef @exclude;
452
452
  undef @files;
453
453
  undef @newValues;
454
+ undef @requestTags;
454
455
  undef @srcFmt;
455
456
  undef @tags;
457
+ undef %altFile;
456
458
  undef %appended;
457
459
  undef %countLink;
458
460
  undef %created;
@@ -472,6 +474,7 @@ undef %usedFileName;
472
474
  undef %utf8FileName;
473
475
  undef %warnedOnce;
474
476
  undef %wext;
477
+ undef %wroteHEAD;
475
478
  undef $allGroup;
476
479
  undef $altEnc;
477
480
  undef $argFormat;
@@ -488,8 +491,8 @@ undef $doSetFileName;
488
491
  undef $doUnzip;
489
492
  undef $end;
490
493
  undef $endDir;
491
- undef $escapeHTML;
492
494
  undef $escapeC;
495
+ undef $escapeHTML;
493
496
  undef $evalWarning;
494
497
  undef $executeID;
495
498
  undef $failCondition;
@@ -500,18 +503,22 @@ undef $fixLen;
500
503
  undef $forcePrint;
501
504
  undef $geoOnly;
502
505
  undef $ignoreHidden;
506
+ undef $isBinary;
503
507
  undef $joinLists;
504
508
  undef $langOpt;
509
+ undef $listDir;
505
510
  undef $listItem;
506
511
  undef $multiFile;
507
512
  undef $noBinary;
508
513
  undef $outOpt;
514
+ undef $plot;
509
515
  undef $preserveTime;
510
516
  undef $progress;
511
517
  undef $progressCount;
512
518
  undef $progressIncr;
513
519
  undef $progressMax;
514
520
  undef $progressNext;
521
+ undef $rafStdin;
515
522
  undef $recurse;
516
523
  undef $scanWritable;
517
524
  undef $sectHeader;
@@ -521,6 +528,7 @@ undef $showTagID;
521
528
  undef $structOpt;
522
529
  undef $tagOut;
523
530
  undef $textOut;
531
+ undef $textOut2;
524
532
  undef $textOverwrite;
525
533
  undef $tmpFile;
526
534
  undef $tmpText;
@@ -2529,7 +2537,7 @@ T2: foreach $t2 (@tags2) {
2529
2537
  # print the results for this file
2530
2538
  if (%printFmt) {
2531
2539
  # output using print format file (-p) option
2532
- my ($type, $doc, $grp, $lastDoc, $cache);
2540
+ my ($type, @doc, $grp, $lastDoc, $cache);
2533
2541
  $fileTrailer = '';
2534
2542
  # repeat for each embedded document if necessary (only if -ee used)
2535
2543
  if ($et->Options('ExtractEmbedded')) {
@@ -2538,7 +2546,8 @@ T2: foreach $t2 (@tags2) {
2538
2546
  } else {
2539
2547
  $lastDoc = 0;
2540
2548
  }
2541
- for ($doc=0; $doc<=$lastDoc; ++$doc) {
2549
+ for ($doc[0]=0; $doc[0]<=$lastDoc; ) {
2550
+ my $doc = join '-', @doc;
2542
2551
  my ($skipBody, $opt);
2543
2552
  foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
2544
2553
  my $prf = $printFmt{$type} or next;
@@ -2548,7 +2557,7 @@ T2: foreach $t2 (@tags2) {
2548
2557
  }
2549
2558
  next if $type eq 'BODY' and $skipBody;
2550
2559
  # silence "IF" warnings and warnings for subdocuments > 1
2551
- if ($type eq 'IF' or ($doc > 1 and not $$et{OPTIONS}{IgnoreMinorErrors})) {
2560
+ if ($type eq 'IF' or (($doc[0] > 1 or @doc > 1) and not $$et{OPTIONS}{IgnoreMinorErrors})) {
2552
2561
  $opt = 'Silent';
2553
2562
  } else {
2554
2563
  $opt = 'Warn';
@@ -2587,6 +2596,14 @@ T2: foreach $t2 (@tags2) {
2587
2596
  print $fp @lines;
2588
2597
  }
2589
2598
  }
2599
+ # find next available doc-subdoc
2600
+ push @doc, 1;
2601
+ while (@doc > 1) {
2602
+ my $nextDoc = join '-', @doc;
2603
+ last if $$et{HAS_DOC}{$nextDoc};
2604
+ pop @doc;
2605
+ ++$doc[-1];
2606
+ }
2590
2607
  }
2591
2608
  delete $printFmt{HEAD} unless defined $outfile; # print header only once per output file
2592
2609
  my $errs = $et->GetInfo('Warning', 'Error');
@@ -4518,6 +4535,10 @@ sub SuggestedExtension($$$)
4518
4535
  } elsif ($$valPt =~ /^.{4}ftyp(3gp|mp4|f4v|qt )/s) {
4519
4536
  my %movType = ( 'qt ' => 'mov' );
4520
4537
  $ext = $movType{$1} || $1;
4538
+ } elsif ($$valPt =~ /^<(!DOCTYPE )?html/i) {
4539
+ $ext = 'html';
4540
+ } elsif ($$valPt =~ /^[\n\r]*\{[\n\r]*\\rtf/) {
4541
+ $ext = 'rtf';
4521
4542
  } elsif ($$valPt !~ /^.{0,4096}\0/s) {
4522
4543
  $ext = 'txt';
4523
4544
  } elsif ($$valPt =~ /^BM.{15}\0/s) {
@@ -5054,50 +5075,51 @@ supported by ExifTool (r = read, w = write, c = create):
5054
5075
 
5055
5076
  File Types
5056
5077
  ------------+-------------+-------------+-------------+------------
5057
- 360 r/w | DOCX r | ITC r | NUMBERS r | RAM r
5058
- 3FR r | DPX r | J2C r | NXD r | RAR r
5059
- 3G2 r/w | DR4 r/w/c | JNG r/w | O r | RAW r/w
5060
- 3GP r/w | DSS r | JP2 r/w | ODP r | RIFF r
5061
- 7Z r | DV r | JPEG r/w | ODS r | RSRC r
5062
- A r | DVB r/w | JSON r | ODT r | RTF r
5063
- AA r | DVR-MS r | JXL r/w | OFR r | RW2 r/w
5064
- AAC r | DYLIB r | K25 r | OGG r | RWL r/w
5065
- AAE r | EIP r | KDC r | OGV r | RWZ r
5066
- AAX r/w | EPS r/w | KEY r | ONP r | RM r
5067
- ACR r | EPUB r | LA r | OPUS r | SEQ r
5068
- AFM r | ERF r/w | LFP r | ORF r/w | SKETCH r
5069
- AI r/w | EXE r | LIF r | ORI r/w | SO r
5070
- AIFF r | EXIF r/w/c | LNK r | OTF r | SR2 r/w
5071
- APE r | EXR r | LRV r/w | PAC r | SRF r
5072
- ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SRW r/w
5073
- ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | SVG r
5074
- ASF r | FFF r/w | MACOS r | PCAP r | SWF r
5075
- AVI r | FITS r | MAX r | PCAPNG r | THM r/w
5076
- AVIF r/w | FLA r | MEF r/w | PCD r | TIFF r/w
5077
- AZW r | FLAC r | MIE r/w/c | PCX r | TORRENT r
5078
- BMP r | FLIF r/w | MIFF r | PDB r | TTC r
5079
- BPG r | FLV r | MKA r | PDF r/w | TTF r
5080
- BTF r | FPF r | MKS r | PEF r/w | TXT r
5081
- C2PA r | FPX r | MKV r | PFA r | VCF r
5082
- CHM r | GIF r/w | MNG r/w | PFB r | VNT r
5083
- COS r | GLV r/w | MOBI r | PFM r | VRD r/w/c
5084
- CR2 r/w | GPR r/w | MODD r | PGF r | VSD r
5085
- CR3 r/w | GZ r | MOI r | PGM r/w | WAV r
5086
- CRM r/w | HDP r/w | MOS r/w | PLIST r | WDP r/w
5087
- CRW r/w | HDR r | MOV r/w | PICT r | WEBP r/w
5088
- CS1 r/w | HEIC r/w | MP3 r | PMP r | WEBM r
5089
- CSV r | HEIF r/w | MP4 r/w | PNG r/w | WMA r
5090
- CUR r | HTML r | MPC r | PPM r/w | WMV r
5091
- CZI r | ICC r/w/c | MPG r | PPT r | WPG r
5092
- DCM r | ICO r | MPO r/w | PPTX r | WTV r
5093
- DCP r/w | ICS r | MQV r/w | PS r/w | WV r
5094
- DCR r | IDML r | MRC r | PSB r/w | X3F r/w
5095
- DFONT r | IIQ r/w | MRW r/w | PSD r/w | XCF r
5096
- DIVX r | IND r/w | MXF r | PSP r | XISF r
5097
- DJVU r | INSP r/w | NEF r/w | QTIF r/w | XLS r
5098
- DLL r | INSV r | NKA r | R3D r | XLSX r
5099
- DNG r/w | INX r | NKSC r/w | RA r | XMP r/w/c
5100
- DOC r | ISO r | NRW r/w | RAF r/w | ZIP r
5078
+ 360 r/w | DPX r | JNG r/w | ODP r | RSRC r
5079
+ 3FR r | DR4 r/w/c | JP2 r/w | ODS r | RTF r
5080
+ 3G2 r/w | DSS r | JPEG r/w | ODT r | RW2 r/w
5081
+ 3GP r/w | DV r | JSON r | OFR r | RWL r/w
5082
+ 7Z r | DVB r/w | JXL r/w | OGG r | RWZ r
5083
+ A r | DVR-MS r | K25 r | OGV r | RM r
5084
+ AA r | DYLIB r | KDC r | ONP r | SEQ r
5085
+ AAC r | EIP r | KEY r | OPUS r | SKETCH r
5086
+ AAE r | EPS r/w | LA r | ORF r/w | SO r
5087
+ AAX r/w | EPUB r | LFP r | ORI r/w | SR2 r/w
5088
+ ACR r | ERF r/w | LIF r | OTF r | SRF r
5089
+ AFM r | EXE r | LNK r | PAC r | SRW r/w
5090
+ AI r/w | EXIF r/w/c | LRV r/w | PAGES r | SVG r
5091
+ AIFF r | EXR r | M2TS r | PBM r/w | SWF r
5092
+ APE r | EXV r/w/c | M4A/V r/w | PCAP r | THM r/w
5093
+ ARQ r/w | F4A/V r/w | MACOS r | PCAPNG r | TIFF r/w
5094
+ ARW r/w | FFF r/w | MAX r | PCD r | TNEF r
5095
+ ASF r | FITS r | MEF r/w | PCX r | TORRENT r
5096
+ AVI r | FLA r | MIE r/w/c | PDB r | TTC r
5097
+ AVIF r/w | FLAC r | MIFF r | PDF r/w | TTF r
5098
+ AZW r | FLIF r/w | MKA r | PEF r/w | TXT r
5099
+ BMP r | FLV r | MKS r | PFA r | VCF r
5100
+ BPG r | FPF r | MKV r | PFB r | VNT r
5101
+ BTF r | FPX r | MNG r/w | PFM r | VRD r/w/c
5102
+ C2PA r | GIF r/w | MOBI r | PGF r | VSD r
5103
+ CHM r | GLV r/w | MODD r | PGM r/w | WAV r
5104
+ COS r | GPR r/w | MOI r | PLIST r | WDP r/w
5105
+ CR2 r/w | GZ r | MOS r/w | PICT r | WEBP r/w
5106
+ CR3 r/w | HDP r/w | MOV r/w | PMP r | WEBM r
5107
+ CRM r/w | HDR r | MP3 r | PNG r/w | WMA r
5108
+ CRW r/w | HEIC r/w | MP4 r/w | PPM r/w | WMV r
5109
+ CS1 r/w | HEIF r/w | MPC r | PPT r | WPG r
5110
+ CSV r | HTML r | MPG r | PPTX r | WTV r
5111
+ CUR r | ICC r/w/c | MPO r/w | PS r/w | WV r
5112
+ CZI r | ICO r | MQV r/w | PSB r/w | X3F r/w
5113
+ DCM r | ICS r | MRC r | PSD r/w | XCF r
5114
+ DCP r/w | IDML r | MRW r/w | PSP r | XISF r
5115
+ DCR r | IIQ r/w | MXF r | QTIF r/w | XLS r
5116
+ DFONT r | IND r/w | NEF r/w | R3D r | XLSX r
5117
+ DIVX r | INSP r/w | NKA r | RA r | XMP r/w/c
5118
+ DJVU r | INSV r | NKSC r/w | RAF r/w | ZIP r
5119
+ DLL r | INX r | NRW r/w | RAM r |
5120
+ DNG r/w | ISO r | NUMBERS r | RAR r |
5121
+ DOC r | ITC r | NXD r | RAW r/w |
5122
+ DOCX r | J2C r | O r | RIFF r |
5101
5123
 
5102
5124
  Meta Information
5103
5125
  ----------------------+----------------------+---------------------
@@ -5979,7 +6001,7 @@ translation, follow these steps (you must have Perl installed for this):
5979
6001
  6. Edit the generated language module lib/Image/ExifTool/Lang/ru.pm, and
5980
6002
  search and replace all 'MISSING' strings in the file with your translations.
5981
6003
 
5982
- 7. Email the module ('ru.pm' in this example) to philharvey66 at gmail.com
6004
+ 7. Email the module ('ru.pm' in this example) to exiftool.team@gmail.com
5983
6005
 
5984
6006
  8. Thank you!!
5985
6007
 
@@ -6054,7 +6076,7 @@ with this command:
6054
6076
 
6055
6077
  produces output like this:
6056
6078
 
6057
- -- Generated by ExifTool 13.31 --
6079
+ -- Generated by ExifTool 13.33 --
6058
6080
  File: a.jpg - 2003:10:31 15:44:19
6059
6081
  (f/5.6, 1/60s, ISO 100)
6060
6082
  File: b.jpg - 2006:05:23 11:57:38
@@ -6631,6 +6653,9 @@ condition (ie. "$OK").
6631
6653
  7) The API RequestTags option is automatically set for all tags used in the
6632
6654
  B<-if> condition.
6633
6655
 
6656
+ 8) The condition fails if a Perl error occurs. This could happen for
6657
+ instance if an undefined value (eg. a missing tag) is used improperly.
6658
+
6634
6659
  =item B<-m> (B<-ignoreMinorErrors>)
6635
6660
 
6636
6661
  Ignore minor errors and warnings. This enables writing to files with minor
@@ -7298,6 +7323,8 @@ used in file names.)
7298
7323
 
7299
7324
  =head4 Helper functions
7300
7325
 
7326
+ Note that function names are case sensitive.
7327
+
7301
7328
  C<DateFmt>
7302
7329
 
7303
7330
  Simplifies reformatting of individual date/time values. This function acts
@@ -7335,8 +7362,6 @@ rewritten unnecessarily:
7335
7362
 
7336
7363
  exiftool -sep '##' '-keywords<${keywords;NoDups(1)}' a.jpg
7337
7364
 
7338
- Note that function names are case sensitive.
7339
-
7340
7365
  ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
7341
7366
  function largely redundant, with all the functionality except the ability to
7342
7367
  avoid rewriting the file if there are no duplicates, but with the advantage
@@ -271,11 +271,11 @@ tags remain.
271
271
 
272
272
  The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
273
273
  other tags which are not part of the EXIF specification, but may co-exist
274
- with EXIF tags in some images. Tags which are part of the EXIF 2.32
274
+ with EXIF tags in some images. Tags which are part of the EXIF 3.0
275
275
  specification have an underlined B<Tag Name> in the HTML version of this
276
276
  documentation. See
277
- L<https://web.archive.org/web/20190624045241if_/http://www.cipa.jp:80/std/documents/e/DC-008-Translation-2019-E.pdf>
278
- for the official EXIF 2.32 specification.
277
+ L<https://www.cipa.jp/std/documents/download_e.html?CIPA_DC-008-2024-E>
278
+ for the official EXIF 3.0 specification.
279
279
  },
280
280
  GPS => q{
281
281
  These GPS tags are part of the EXIF standard, and are stored in a separate
@@ -2338,7 +2338,8 @@ sub WriteTagNames($$)
2338
2338
  my ($hid, $showGrp);
2339
2339
  # widths of the different columns in the POD documentation
2340
2340
  my ($wID,$wTag,$wReq,$wGrp) = (8,36,24,10);
2341
- my ($composite, $derived, $notes, $longTags, $wasLong, $prefix);
2341
+ my ($composite, $derived, $notes, $longTags, $prefix);
2342
+ my $wasLong = 0;
2342
2343
  if ($short eq 'Shortcuts') {
2343
2344
  $derived = '<th>Refers To</th>';
2344
2345
  $composite = 2;
@@ -2396,7 +2397,7 @@ sub WriteTagNames($$)
2396
2397
  $wID -= $longTag - $wTag;
2397
2398
  $wTag = $longTag;
2398
2399
  }
2399
- $wasLong = 1 if $wID <= $self->{LONG_ID}->{$tableName};
2400
+ ++$wasLong if $wID <= $self->{LONG_ID}->{$tableName};
2400
2401
  }
2401
2402
  } elsif ($composite) {
2402
2403
  $wTag += $wID - $wReq;
@@ -2471,6 +2472,7 @@ sub WriteTagNames($$)
2471
2472
  if ($over <= $wTag - length($$tagNames[0])) {
2472
2473
  $wTag2 -= $over;
2473
2474
  $w += $over;
2475
+ --$wasLong;
2474
2476
  } else {
2475
2477
  # put tag name on next line if ID is too long
2476
2478
  $idStr = " $tagIDstr\n " . (' ' x $w);
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.92';
91
+ $VERSION = '4.94';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -2621,6 +2621,10 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2621
2621
  # 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
2622
2622
  # (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
2623
2623
  # 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
2624
+ 50 => { #github340
2625
+ Name => 'FocusBracketing',
2626
+ PrintConv => { 0 => 'Disable', 1 => 'Enable' },
2627
+ },
2624
2628
  51 => { #forum16036 (EOS R models)
2625
2629
  Name => 'Clarity',
2626
2630
  PrintConv => {
@@ -2628,6 +2632,10 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2628
2632
  0x7fff => 'n/a',
2629
2633
  },
2630
2634
  },
2635
+ 52 => { #github336
2636
+ Name => 'HDR-PQ',
2637
+ PrintConv => { %offOn, -1 => 'n/a' },
2638
+ },
2631
2639
  );
2632
2640
 
2633
2641
  # focal length information (MakerNotes tag 0x02)
@@ -8931,7 +8939,7 @@ my %ciMaxFocal = (
8931
8939
  },
8932
8940
  3 => {
8933
8941
  Name => 'HighlightTonePriority',
8934
- PrintConv => \%offOn,
8942
+ PrintConv => { %offOn, 2 => 'Enhanced' }, #github339 (Enhanced)
8935
8943
  },
8936
8944
  4 => {
8937
8945
  Name => 'LongExposureNoiseReduction',