exiftool-vendored.pl 13.42.0 → 13.43.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.
package/bin/Changes CHANGED
@@ -7,6 +7,18 @@ 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
+ Dec. 4, 2025 - Version 13.43
11
+
12
+ - Added support for a couple of new Android QuickTime Keys tags
13
+ - Added date/time formatting for RIFF DateCreated
14
+ - Added ability to read/write (but not create/delete) the HEIF Mirroring tag
15
+ - Added a new SonyModelID
16
+ - Added a new Canon LensType (thanks Matthias)
17
+ - Decode ShutterCount for the Canon EOS R6 Mark III
18
+ - Decode another Samsung trailer tag
19
+ - Convert invalid Panasonic AFPointPosition to 'n/a'
20
+ - Fixed issue extracting timed GPS from some Wolfbox G900 MP4 videos
21
+
10
22
  Nov. 17, 2025 - Version 13.42
11
23
 
12
24
  - Added warning if tag arguments come before -csv= or -json= in a command
package/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.42",
53
+ "version" : "13.43",
54
54
  "x_serialization_backend" : "JSON::PP version 4.06"
55
55
  }
package/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.42'
34
+ version: '13.43'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
package/bin/README CHANGED
@@ -111,8 +111,8 @@ your home directory, then you would type the following commands in a
111
111
  terminal window to extract and run ExifTool:
112
112
 
113
113
  cd ~/Desktop
114
- gzip -dc Image-ExifTool-13.42.tar.gz | tar -xf -
115
- cd Image-ExifTool-13.42
114
+ gzip -dc Image-ExifTool-13.43.tar.gz | tar -xf -
115
+ cd Image-ExifTool-13.43
116
116
  ./exiftool t/images/ExifTool.jpg
117
117
 
118
118
  Note: These commands extract meta information from one of the test images.
package/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.42';
14
+ my $version = '13.43';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -5459,7 +5459,8 @@ option for more details). Note that quotes are required around this
5459
5459
  argument to prevent shell redirection since it contains a C<E<lt>> symbol.
5460
5460
  If I<DATFILE>/I<FMT> is not provided, the effect is the same as C<-TAG=>,
5461
5461
  and the tag is simply deleted. C<+E<lt>=> or C<-E<lt>=> may also be used to
5462
- add or delete specific list entries, or to shift date/time values.
5462
+ add or delete specific list entries, to conditionally delete tags, or to
5463
+ shift date/time values.
5463
5464
 
5464
5465
  =item B<-tagsFromFile> I<SRCFILE> or I<FMT>
5465
5466
 
@@ -5514,8 +5515,8 @@ destination group is specified, the information is written to the preferred
5514
5515
  group. Whitespace around the C<E<gt>> or C<E<lt>> is ignored. As a
5515
5516
  convenience, C<-tagsFromFile @> is assumed for any redirected tags which are
5516
5517
  specified without a prior B<-tagsFromFile> option. Copied tags may also be
5517
- added or deleted from a list with arguments of the form
5518
- E<quot>'-I<SRCTAG>+E<lt>I<DSTTAG>'E<quot> or
5518
+ added or deleted from a list, or conditionally deleted with arguments of the
5519
+ form E<quot>'-I<SRCTAG>+E<lt>I<DSTTAG>'E<quot> or
5519
5520
  E<quot>'-I<SRCTAG>-E<lt>I<DSTTAG>'E<quot> (but see Note 5 below).
5520
5521
 
5521
5522
  An extension of the redirection feature allows strings involving tag names
@@ -6127,7 +6128,7 @@ with this command:
6127
6128
 
6128
6129
  produces output like this:
6129
6130
 
6130
- -- Generated by ExifTool 13.42 --
6131
+ -- Generated by ExifTool 13.43 --
6131
6132
  File: a.jpg - 2003:10:31 15:44:19
6132
6133
  (f/5.6, 1/60s, ISO 100)
6133
6134
  File: b.jpg - 2006:05:23 11:57:38
@@ -7376,6 +7377,10 @@ expression is empty (ie. C<${TAG;}>). This removes the characters / \ ? * :
7376
7377
  illegal in Windows file names, so this feature is useful if tag values are
7377
7378
  used in file names.)
7378
7379
 
7380
+ Note that the expression is not evaluated for undefined (non-existant) tags,
7381
+ which may have other values if either the B<-m> or B<-f> command-line option
7382
+ or the API MissingTagValue option is used.
7383
+
7379
7384
  =head4 Helper functions
7380
7385
 
7381
7386
  Note that function names are case sensitive.
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.99';
91
+ $VERSION = '5.00';
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)
@@ -492,6 +492,7 @@ $VERSION = '4.99';
492
492
  '368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
493
493
  '368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
494
494
  '368.14' => 'Sigma 18-300mm f/3.5-6.3 DC Macro OS HSM | C', #forum15280 (014)
495
+ '368.15' => 'Sigma 24mm F1.4 DG HSM | A', #50 (015)
495
496
  # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
496
497
  488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
497
498
  489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
@@ -1423,6 +1424,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1423
1424
  Condition => '$$self{Model} =~ /\bEOS (R6m2|R8|R50)$/',
1424
1425
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
1425
1426
  },
1427
+ {
1428
+ Name => 'CanonCameraInfoR6m3',
1429
+ Condition => '$$self{Model} =~ /\bEOS R6 Mark III$/',
1430
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m3' },
1431
+ },
1426
1432
  {
1427
1433
  Name => 'CanonCameraInfoG5XII',
1428
1434
  Condition => '$$self{Model} =~ /\bG5 X Mark II$/',
@@ -4794,6 +4800,22 @@ my %ciMaxFocal = (
4794
4800
  },
4795
4801
  );
4796
4802
 
4803
+ %Image::ExifTool::Canon::CameraInfoR6m3 = (
4804
+ %binaryDataAttrs,
4805
+ FIRST_ENTRY => 0,
4806
+ PRIORITY => 0,
4807
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4808
+ NOTES => 'CameraInfo tags for the EOS R6 Mark II.',
4809
+ 0x086d => { #forum17745
4810
+ Name => 'ShutterCount',
4811
+ Format => 'int32u',
4812
+ # (upper 2 bytes are currently unknown for this tag in JPEG images --
4813
+ # we need samples ideally spanning the 65536 count)
4814
+ RawConv => '$$self{PATH}[2] eq "UUID-Canon" ? $val : $val & 0xffff',
4815
+ Notes => 'includes electronic + mechanical shutter',
4816
+ },
4817
+ );
4818
+
4797
4819
  # ref https://exiftool.org/forum/index.php?topic=15356.0
4798
4820
  %Image::ExifTool::Canon::CameraInfoG5XII = (
4799
4821
  %binaryDataAttrs,
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.26';
40
+ $VERSION = '2.27';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -916,13 +916,21 @@ my %shootingMode = (
916
916
  Name => 'AFPointPosition',
917
917
  Writable => 'rational64u',
918
918
  Count => 2,
919
- Notes => 'X Y coordinates of primary AF area center, in the range 0.0 to 1.0',
919
+ Notes => q{
920
+ X Y coordinates of primary AF area center, in the range 0.0 to 1.0, or
921
+ "n/a" or "none" for invalid values
922
+ },
920
923
  PrintConv => q{
921
924
  return 'none' if $val eq '16777216 16777216';
925
+ return 'n/a' if $val =~ /^4194303\.9/;
922
926
  my @a = split ' ', $val;
923
927
  sprintf("%.2g %.2g",@a);
924
928
  },
925
- PrintConvInv => '$val eq "none" ? "16777216 16777216" : $val',
929
+ PrintConvInv => q{
930
+ return '16777216 16777216' if $val eq 'none';
931
+ return '4294967295/1024 4294967295/1024' if $val eq 'n/a';
932
+ return $val;
933
+ },
926
934
  },
927
935
  0x4e => { #PH
928
936
  Name => 'FaceDetInfo',
@@ -1441,8 +1449,8 @@ my %shootingMode = (
1441
1449
  Writable => 'rational64u',
1442
1450
  Notes => 'relative to size of image. "n/a" for manual focus',
1443
1451
  Count => 2,
1444
- PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
1445
- PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',
1452
+ PrintConv => '$val =~ /^4194303\.9/ ? "n/a" : $val',
1453
+ PrintConvInv => '$val eq "n/a" ? "4294967295/1024 4294967295/1024" : $val',
1446
1454
  },
1447
1455
  0xe4 => { #IB
1448
1456
  Name => 'LensTypeModel',
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
49
49
  use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
 
52
- $VERSION = '3.23';
52
+ $VERSION = '3.24';
53
53
 
54
54
  sub ProcessMOV($$;$);
55
55
  sub ProcessKeys($$$);
@@ -494,6 +494,7 @@ my %qtFlags = ( #12
494
494
  ispe => 1, # primary item must have an ispe and pixi, so no need to inherit these
495
495
  pixi => 1,
496
496
  irot => 1, # (tmap may have a different irot)
497
+ imir => 1, # (ditto)
497
498
  pasp => 1, # (NC)
498
499
  hvcC => 2, # (hvcC is a property of hvc1 referred to by primary grid)
499
500
  colr => 2, # (colr is a property of primary grid or hvc1 referred to by primary)
@@ -2970,7 +2971,6 @@ my %userDefined = (
2970
2971
  Condition => '$$valPt =~ /^(prof|rICC)/',
2971
2972
  # (don't do this because Apple Preview won't display an HEIC with a 0-length profile)
2972
2973
  # Permanent => 0, # (in QuickTime, this writes a zero-length box instead of deleting)
2973
- Permanent => 1,
2974
2974
  SubDirectory => {
2975
2975
  TagTable => 'Image::ExifTool::ICC_Profile::Main',
2976
2976
  Start => 4,
@@ -2991,6 +2991,22 @@ my %userDefined = (
2991
2991
  3 => 'Rotate 90 CW',
2992
2992
  },
2993
2993
  },
2994
+ imir => { # (applied before rotation)
2995
+ Name => 'Mirroring',
2996
+ Format => 'int8u',
2997
+ # yes, I realize this making this writable is useless without the ability to
2998
+ # create/delete this box because it is the existence of this box that is
2999
+ # significant. (The people who wrote the specification succeeded in making
3000
+ # this as complicated as possible because creating/deleting boxes from the
3001
+ # item property container is a real pain in the ass!)
3002
+ Writable => 'int8u',
3003
+ Protected => 1,
3004
+ PrintConv => {
3005
+ 0 => 'Vertical',
3006
+ 1 => 'Horizontal',
3007
+ # (it would have been great if the specification allowed for a "no mirroring" value)
3008
+ },
3009
+ },
2994
3010
  ispe => {
2995
3011
  Name => 'ImageSpatialExtent',
2996
3012
  Condition => '$$valPt =~ /^\0{4}/', # (version/flags == 0/0)
@@ -6622,7 +6638,7 @@ my %userDefined = (
6622
6638
  This directory contains a list of key names which are used to decode tags
6623
6639
  written by the "mdta" handler. Also in this table are a few tags found in
6624
6640
  timed metadata that are not yet writable by ExifTool. The prefix of
6625
- "com.apple.quicktime." has been removed from the TagID's below. These tags
6641
+ "com.apple.quicktime." has been removed from most TagID's below. These tags
6626
6642
  support alternate languages in the same way as the
6627
6643
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> tags. Note
6628
6644
  that by default,
@@ -6716,14 +6732,17 @@ my %userDefined = (
6716
6732
  'encoder' => { }, # forum15418 (written by ffmpeg)
6717
6733
  #
6718
6734
  # the following tags aren't in the com.apple.quicktime namespace:
6735
+ # (Note: must add any non-'com' prefix to %fullKeysID in WriteQuickTime.pl
6736
+ # to avoid adding the 'com.apple.quicktime' prefix when writing)
6719
6737
  #
6720
6738
  'com.android.version' => 'AndroidVersion',
6721
6739
  'com.android.capture.fps' => { Name => 'AndroidCaptureFPS', Writable => 'float' },
6722
6740
  'com.android.manufacturer' => 'AndroidMake',
6723
6741
  'com.android.model' => 'AndroidModel',
6724
6742
  'com.xiaomi.preview_video_cover' => { Name => 'XiaomiPreviewVideoCover', Writable => 'int32s' },
6725
- 'xiaomi.exifInfo.videoinfo' => 'XiaomiExifInfo',
6726
6743
  'com.xiaomi.hdr10' => { Name => 'XiaomiHDR10', Writable => 'int32s' },
6744
+ 'xiaomi.exifInfo.videoinfo' => 'XiaomiExifInfo',
6745
+ 'samsung.android.utc_offset' => { Name => 'AndroidTimeZone', Groups => { 2 => 'Time' } },
6727
6746
  #
6728
6747
  # also seen
6729
6748
  #
@@ -9776,6 +9795,7 @@ sub ProcessKeys($$$)
9776
9795
  $name = "Tag_$name" if length $name < 2;
9777
9796
  $newInfo = { Name => $name, Groups => { 1 => 'Keys' } };
9778
9797
  $msg = ' (Unknown)';
9798
+ $et->VPrint(0, $$et{INDENT}, "[adding Keys:$tag]\n");
9779
9799
  }
9780
9800
  # substitute this tag in the ItemList table with the given index
9781
9801
  my $id = $$et{KeysCount} . '.' . $index;
@@ -211,7 +211,7 @@ my %insvLimit = (
211
211
  },
212
212
  },{
213
213
  Name => 'gpmd_Wolfbox', # Wolfbox G900 Dashcam and Redtiger F9 4K
214
- Condition => '$$valPt =~ /^.{136}0{16}(HYTH|XXXX)/s',
214
+ Condition => '$$valPt =~ /^.{136}(0{16}[A-Z]{4}|https:\/\/www.redtiger\0)/s',
215
215
  SubDirectory => {
216
216
  TagTable => 'Image::ExifTool::QuickTime::Stream',
217
217
  ProcessProc => \&ProcessWolfbox,
@@ -30,7 +30,7 @@ use strict;
30
30
  use vars qw($VERSION $AUTOLOAD);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
 
33
- $VERSION = '1.72';
33
+ $VERSION = '1.73';
34
34
 
35
35
  sub ConvertTimecode($);
36
36
  sub ProcessSGLT($$$);
@@ -851,6 +851,7 @@ my %code2charset = (
851
851
  Name => 'DateCreated',
852
852
  Groups => { 2 => 'Time' },
853
853
  ValueConv => '$_=$val; s/-/:/g; $_',
854
+ PrintConv => '$self->ConvertDateTime($val)',
854
855
  },
855
856
  ICRP => 'Cropped',
856
857
  IDIM => 'Dimensions',
@@ -23,7 +23,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
23
23
  use Image::ExifTool::Exif;
24
24
  use Image::ExifTool::JSON;
25
25
 
26
- $VERSION = '1.59';
26
+ $VERSION = '1.60';
27
27
 
28
28
  sub WriteSTMN($$$);
29
29
  sub ProcessINFO($$$);
@@ -1314,7 +1314,17 @@ my %formatMinMax = (
1314
1314
  # 0x0da1-name - seen 'Captured_App_Info' #forum16086
1315
1315
  # 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
1316
1316
  # 0xa050 - seen 'Jpeg3602D' (Samsung Gear 360)
1317
+ # 0x0c61-name - seen 'Camera_Capture_Mode_Info'
1318
+ # 0x0c61 - seen '1'
1317
1319
  # 0x0c81-name - seen 'Watermark_Info'
1320
+ # 0x0ce1-name - seen 'Gallery_DC_Data'
1321
+ # 0x0ce1 - seen '0,109,2,19010102,4000,3000,0,0,0,0;116.284004;1.0'
1322
+ # 0x0e41-name - seen 'Video_Edited_UTC_Offset'
1323
+ # 0x0e41 - seen '+0800'
1324
+ '0x0e41' => {
1325
+ Name => 'VideoEditedTimeZone',
1326
+ Groups => { 2 => 'Time' },
1327
+ },
1318
1328
  );
1319
1329
 
1320
1330
  # DualShot Extra Info (ref PH)
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.80';
37
+ $VERSION = '3.81';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -2215,6 +2215,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
2215
2215
  403 => 'ILCE-6100A', #JR
2216
2216
  404 => 'DSC-RX100M7A', #github347
2217
2217
  406 => 'ILME-FX2', #JR
2218
+ 407 => 'ILCE-7M5', #PH
2218
2219
  408 => 'ZV-1A', #JR
2219
2220
  },
2220
2221
  },