exiftool_vendored 13.12.0 → 13.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eee34189fb74202a66c58d76f0168f01089b47ca963c5f60124bcf5d73d2aecf
4
- data.tar.gz: b8e53f5654ff7090fa938edadb5de5c21794e9b8184439a67dc7d967b7a38945
3
+ metadata.gz: 84e9102db0da669ac4a4f0a5c4cb35058eee35318fa727ecf365f36341e9d9b9
4
+ data.tar.gz: baef093ba9ac71da9d59fc8239d9ca9ea3a5bab5a856fca5f33a3f8fcf6e6ba8
5
5
  SHA512:
6
- metadata.gz: e91976cbd88e3de90455e5879c583c6f48c15a0b12f102b0b8e6f8cedf1e61026e5e5d543e7c3848e1008feb842f46f709f3d87e012202b1bcda4fd3ebab3f2d
7
- data.tar.gz: c4c6ac6f3e7ed34e426b3f83a44d5fa9964b609e02613715cbbacc69c00ffa5a81f6bc0b13b3fb8a2b00b481966453ae7f102002f6c34cf2de663a8d019453e5
6
+ metadata.gz: 2a4abf6f32a17150d1b3b30b43204b8440b1e0c600df23ac992085a423942105067e02922cdcfdfa3a185fa867e138eab5e1a3a4cf3add9b8113afa6e167a038
7
+ data.tar.gz: da5b5975b6c1d20dc90d3c45179892297ab655f5e2dd76bac6180221ff5598895da66abc76a073561175d30a490444d56f701860e54fc70f21e93cd55cc0fd2d
data/bin/Changes CHANGED
@@ -7,6 +7,29 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.10. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Jan. 20, 2025 - Version 13.14
11
+
12
+ - Fixed bug where ItemList tags weren't created when creating new AudioKeys or
13
+ VideoKeys tags in the same command and neither tag group pre-existed in the
14
+ file
15
+
16
+ Jan. 20, 2025 - Version 13.13
17
+
18
+ - Added ability to write tags to the audio/video tracks of MOV/MP4 videos
19
+ using the new AudioKeys and VideoKeys group names
20
+ - Added support for another DJI protobuf format (Mavic 3)
21
+ - Decode yet another type of LIGOGPSINFO timed GPS from a dashcam video
22
+ - Extract some proprietary information from JPEG images of Vivo phones
23
+ - Enhanced Geolocation feature to allow the nearest cities to a specified city
24
+ to be returned
25
+ - Updated xmp2exif.args and exif2xmp.args to properly handle time zones in
26
+ XMP-exif date/time tags
27
+ - Changed family 1 group names for Keys, ItemList and UserData tags in a track
28
+ - Patched github #306 issue where a torrent file would return a format error
29
+ when reading if it didn't contain an "announce" or "created by" entry
30
+ - Fixed "uninitialized value" runtime warning when reading some EXE files
31
+ - Fixed -diff output to add colon missing from some lines when used with -g
32
+
10
33
  Jan. 13, 2025 - Version 13.12
11
34
 
12
35
  - Added a few new Panasonic AFAreaMode values (thanks Andrew J)
@@ -15,12 +38,12 @@ Jan. 13, 2025 - Version 13.12
15
38
  - Decode AF points for some newer Nikon models (thanks Warren Hatch)
16
39
  - Decode a new Panasonic tag (thanks Andrew J)
17
40
  - Decode a couple of previously unknown tags from LIGOGPSINFO records
18
- - Extract some PDB information if available from Win32 EXE files (github#303)
41
+ - Extract some PDB information if available from Win32 EXE files (github #303)
19
42
  - Improved handling of duplicate tags in -diff output
20
43
  - Improved handling of QuickTime zero date/time values
21
44
  - Enchanced -csv= and -json= options to allow group names and wildcards to be
22
45
  used when specifying which tags to import
23
- - Updated some EXIF:Compression values (github#304)
46
+ - Updated some EXIF:Compression values (github #304)
24
47
  - Changed wording of warning when file time couldn't be updated
25
48
  - Fixed bug introduced in 13.11 reading EXIF from some EXV files
26
49
  - Fixed bug introduced in 12.99 where empty entries in a CSV file weren't
@@ -33,7 +56,7 @@ Jan. 13, 2025 - Version 13.12
33
56
  Jan. 1, 2025 - Version 13.11
34
57
 
35
58
  - Added warning for an unknown DJI protobuf schema
36
- - Decode timed GPS from the DJI Osmo Action 5
59
+ - Decode timed GPS from DJI Osmo Action 5 videos
37
60
  - Decode yet another type of LIGOGPSINFO timed GPS from a dashcam video
38
61
  - Made Matroska Keywords and Instruments List-type tags
39
62
  - Fixed problem were EXIF couldn't be added to some AVIF files
@@ -286,7 +309,7 @@ July 24, 2024 - Version 12.92
286
309
 
287
310
  July 24, 2024 - Version 12.91
288
311
 
289
- - Added a couple of new OpenEXR Compression values (github#276)
312
+ - Added a couple of new OpenEXR Compression values (github #276)
290
313
  - Updated 2 test files that were causing failed tests (ExifTool itself is
291
314
  unchanged)
292
315
 
@@ -753,7 +776,7 @@ Aug. 10, 2023 - Version 12.65
753
776
  provided
754
777
  - Lowered priority of IFD1 tags in ARW images so IFD0/SubIFD take precedence
755
778
  - Changed QuickTime tag names for atID (AlbumTitleID to ArtistID) and plID
756
- (PlayListID to AlbumID) (github issue #216), and added cmID (ComposerID)
779
+ (PlayListID to AlbumID) (github #216), and added cmID (ComposerID)
757
780
  - Changed Apple:MediaGroupUUID tag name back to ContentIdentifier
758
781
  - Patched the -d option to handle the %s format code internally when writing
759
782
  (avoids problems due to inconsistent behaviour of this format code in the
@@ -1304,7 +1327,15 @@ Dec. 8, 2021 - Version 12.37
1304
1327
  - Extract TransparentColor from GIF images
1305
1328
  - Improved parsing of input time values for GPSTimeStamp to properly handle a
1306
1329
  "." separator
1307
- - Improved warning when incorrectly using "
1330
+ - Improved warning when incorrectly using "<" instead of "=" to assign a tag
1331
+ value
1332
+ - Shortened a few of the new obscenely-long XMP-crs tag names
1333
+ - Avoid writing XMP-dwc:EventID and XMP-tiff:NativeDigest
1334
+ - Avoid printing same structure twice in -j and -X output when -l is used
1335
+ - Fixed typo in a QuickTime tag name (thanks Hubert)
1336
+ - Fixed two XMP-crs tag names and typo in a NikonSettings value (thanks Herb)
1337
+ - Fixed patch of version 12.25 to avoid writing XMP which contains an
1338
+ undefined namespace
1308
1339
 
1309
1340
  Nov. 16, 2021 - Version 12.36
1310
1341
 
@@ -1616,7 +1647,7 @@ Feb. 3, 2021 - Version 12.17
1616
1647
  - Avoid extracting audio/video data from AVI videos when -ee -u is used
1617
1648
  - Patched decoding of Canon ContinuousShootingSpeed for newer firmware
1618
1649
  versions of the EOS-1DXmkIII
1619
- - Re-worked LensID patch of version 12.00 (github issue #51)
1650
+ - Re-worked LensID patch of version 12.00 (github #51)
1620
1651
  - Fixed a few typos in newly-added NikonSettings tags (thanks Herb)
1621
1652
  - Fixed problem where group could not be specified for PNG-pHYs tags when
1622
1653
  writing
@@ -1687,7 +1718,7 @@ Nov. 27, 2020 - Version 12.11
1687
1718
 
1688
1719
  - Added -csvDelim option
1689
1720
  - Added new Canon and Olympus LensType values (thanks LibRaw)
1690
- - Added a warning if ICC_Profile is deleted from an image (github issue #63)
1721
+ - Added a warning if ICC_Profile is deleted from an image (github #63)
1691
1722
  - EndDir() function for -if option now works when -fileOrder is used
1692
1723
  - Changed FileSize conversion to use binary prefixes since that is how the
1693
1724
  conversion is currently done (eg. MiB instead of MB)
@@ -2061,7 +2092,7 @@ Jan. 8, 2020 - Version 11.82
2061
2092
  - Added a new Canon LensType
2062
2093
  - Added a new CanonModelID (thanks LibRaw)
2063
2094
  - Added ability to process SubDirectories in QuickTime Keys tags
2064
- - Removed minor error when writing PDF 2.0 files (github issue #30)
2095
+ - Removed minor error when writing PDF 2.0 files (github #30)
2065
2096
  - Fixed problem where trailing null bytes were removed from binary values in
2066
2097
  the -php output when the -b option was used
2067
2098
 
@@ -2075,8 +2106,7 @@ Jan. 2, 2020 - Version 11.81
2075
2106
  - Patched Composite sub-second date/time tags to do additional validation of
2076
2107
  source EXIF date/time tags before adding sub seconds
2077
2108
  - Fixed problem where -json output could produce invalid JSON when -struct was
2078
- used and the structure field names contained special characters (github
2079
- issue #32)
2109
+ used and the structure field names contained special characters (github #32)
2080
2110
  - Fixed spelling in a Panasonic SceneMode value (thanks Hubert)
2081
2111
 
2082
2112
  Dec. 17, 2019 - Version 11.80
@@ -2096,7 +2126,7 @@ Dec. 12, 2019 - Version 11.79
2096
2126
 
2097
2127
  - Added support for AVIF files
2098
2128
  - Added new Canon, Sigma and Sony LensType values (thanks LibRaw)
2099
- - Made PDF 2.0 writable at your own risk with the -m option (github issue #30)
2129
+ - Made PDF 2.0 writable at your own risk with the -m option (github #30)
2100
2130
  - Enhanced -validate feature to warn about duplicate languages in an XMP
2101
2131
  lang-alt list
2102
2132
  - Fixed inconsistency between documentation and ExifTool capabilities for
@@ -2182,7 +2212,7 @@ Oct. 16, 2019 - Version 11.71
2182
2212
  Oct. 10, 2019 - Version 11.70 (production release)
2183
2213
 
2184
2214
  - Added a new CanonModelID (thanks Laurent Clevy)
2185
- - Improved identification of Office Open XML files (github issue #27)
2215
+ - Improved identification of Office Open XML files (github #27)
2186
2216
  - Removed RAF version check when writing FujiFilm RAF files
2187
2217
  - Limited the number of accelerometer records that ExifTool will read by
2188
2218
  default with the -ee option from INSV files to avoid excessive processing
@@ -2264,7 +2294,7 @@ Aug. 20, 2019 - Version 11.63 - "PNG Early Text"
2264
2294
  - Added a few new Sigma lenses (thanks LibRaw)
2265
2295
  - Improved handling of Canon CNTH atom in MOV/MP4 videos
2266
2296
  - Changed PNG writer to place all text chunks before IDAT (not just XMP)
2267
- (github issue #23)
2297
+ (github #23)
2268
2298
  - Issue minor warning for any text chunk after PNG IDAT (not just XMP)
2269
2299
  - Enhanced ForceWrite feature to allow "PNG" to be specified (to move existing
2270
2300
  text chunks to before IDAT without editing any metadata)
@@ -2421,7 +2451,7 @@ June 17, 2019 - Version 11.52
2421
2451
  - Fixed problem where reading a large, corrupt AIFF file may could take an
2422
2452
  excessively long time
2423
2453
  - API Changes:
2424
- - Enhanced Compact option to add levels 3, 4 and 5 (github issue #16)
2454
+ - Enhanced Compact option to add levels 3, 4 and 5 (github #16)
2425
2455
 
2426
2456
  June 13, 2019 - Version 11.51
2427
2457
 
@@ -2559,7 +2589,7 @@ May 3, 2019 - Version 11.39 - "Create QuickTime tags"
2559
2589
  - Decode Canon EOS D60 black levels
2560
2590
  - Split off some QuickTime tags into different family 1 groups
2561
2591
  - Fixed "Chunk offset outside movie data" error when writing some HEIC files
2562
- - Fixed decoding of Pentax AutoBracketing for K-1 and K-5 (github issue #15)
2592
+ - Fixed decoding of Pentax AutoBracketing for K-1 and K-5 (github #15)
2563
2593
  - Fixed some QuickTime family 2 group names
2564
2594
  - Fixed bug introduced in 11.38 that broke extraction of thumbnail images from
2565
2595
  Canon MOV videos
@@ -2663,7 +2693,7 @@ Mar. 14, 2019 - Version 11.32
2663
2693
  Mar. 7, 2019 - Version 11.31
2664
2694
 
2665
2695
  - Added read support for FITS images
2666
- - Another try at removing spaces from some DICOM values (github issues #10/12)
2696
+ - Another try at removing spaces from some DICOM values (github #10 and #12)
2667
2697
 
2668
2698
  Mar. 6, 2019 - Version 11.30 (production release)
2669
2699
 
@@ -2672,7 +2702,7 @@ Mar. 6, 2019 - Version 11.30 (production release)
2672
2702
  - Decode Reconyx HF2 PRO maker notes
2673
2703
  - Decode ColorData for some new Canon models (thanks LibRaw)
2674
2704
  - Enhanced -geotag feature to set AmbientTemperature if available
2675
- - Remove non-significant spaces from some DICOM values (github issues #10/12)
2705
+ - Remove non-significant spaces from some DICOM values (github #10 and #12)
2676
2706
  - Fixed possible "'x' outside of string" error when reading corrupted EXIF
2677
2707
  - Fixed incorrect write group for GeoTIFF tags added in version 11.24
2678
2708
 
@@ -2680,13 +2710,13 @@ Feb. 28, 2019 - Version 11.29
2680
2710
 
2681
2711
  - Added support for Ricoh GR III maker notes
2682
2712
  - Added a new Canon LensType (thanks Claude Jolicoeur)
2683
- - Added a new XMP-crs tag (github issue #8)
2713
+ - Added a new XMP-crs tag (github #8)
2684
2714
  - Enhanced -csv option to output base64-encoded binary data when combined with
2685
2715
  -b or when the -charset option is used and the text has invalid characters
2686
- (github issue #11)
2687
- - Remove trailing space from even-length DICOM values (github issue #9)
2716
+ (github #11)
2717
+ - Remove trailing space from even-length DICOM values (github #9)
2688
2718
  - Patched to avoid "Hexadecimal number > 0xffffffff non-portable" warning
2689
- (github issue #6)
2719
+ (github #6)
2690
2720
  - Fixed meta charset attribute in -htmlDump output
2691
2721
 
2692
2722
  Feb. 21, 2019 - Version 11.28
data/bin/MANIFEST CHANGED
@@ -180,6 +180,7 @@ html/TagNames/Theora.html
180
180
  html/TagNames/Torrent.html
181
181
  html/TagNames/Unknown.html
182
182
  html/TagNames/VCard.html
183
+ html/TagNames/Vivo.html
183
184
  html/TagNames/Vorbis.html
184
185
  html/TagNames/WPG.html
185
186
  html/TagNames/WTV.html
@@ -431,6 +432,7 @@ lib/Image/ExifTool/Torrent.pm
431
432
  lib/Image/ExifTool/Unknown.pm
432
433
  lib/Image/ExifTool/VCard.pm
433
434
  lib/Image/ExifTool/Validate.pm
435
+ lib/Image/ExifTool/Vivo.pm
434
436
  lib/Image/ExifTool/Vorbis.pm
435
437
  lib/Image/ExifTool/WPG.pm
436
438
  lib/Image/ExifTool/WTV.pm
@@ -826,7 +828,10 @@ t/QuickTime_14.out
826
828
  t/QuickTime_15.out
827
829
  t/QuickTime_16.out
828
830
  t/QuickTime_17.out
831
+ t/QuickTime_18.out
832
+ t/QuickTime_19.out
829
833
  t/QuickTime_2.out
834
+ t/QuickTime_20.out
830
835
  t/QuickTime_3.out
831
836
  t/QuickTime_4.out
832
837
  t/QuickTime_5.out
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.12"
53
+ "version" : "13.14"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.12'
34
+ version: '13.14'
data/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-13.12.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.12
112
+ gzip -dc Image-ExifTool-13.14.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.14
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -14,6 +14,7 @@
14
14
  # 2018/05/07 - PH Added support for GPSDestXxxRef tags
15
15
  # 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
16
16
  # 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
17
+ # 2025/01/16 - PH Copy Composite SubSec tags to XMP-exif
17
18
  #
18
19
  # References: http://www.metadataworkinggroup.org/specs/
19
20
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -54,4 +55,7 @@
54
55
  # new for the 2024 EXIF for XMP specification
55
56
  -XMP-exifEX:PhotographicSensitivity < EXIF:ISO
56
57
  -XMP-exif:DateTimeDigitized < EXIF:CreateDate
58
+ # add sub-seconds and time-zone to XMP-exif tags if available
59
+ -XMP-exif:DateTimeOriginal < Composite:SubSecDateTimeOriginal
60
+ -XMP-exif:DateTimeDigitized < Composite:SubSecCreateDate
57
61
  # end
@@ -18,6 +18,7 @@
18
18
  # 2023/01/30 - PH Also write Composite:SubSecDateTimeOriginal from
19
19
  # XMP-exif:DateTimeOriginal
20
20
  # 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
21
+ # 2025/01/16 - PH Write Composite:SubSecCreateDate from XMP-exif
21
22
  #
22
23
  # References: http://www.metadataworkinggroup.org/specs/
23
24
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -39,11 +40,11 @@
39
40
  -EXIF:DateTimeOriginal < XMP-photoshop:DateCreated
40
41
  # new for the 2024 EXIF for XMP specification
41
42
  -EXIF:ISO < XMP-exifEX:PhotographicSensitivity
42
- -EXIF:CreateDate < XMP-exif:DateTimeDigitized
43
43
  # the following SubSec tags also write/delete the corresponding EXIF
44
44
  # SubSecTime and OffsetTime tags as appropriate
45
45
  -Composite:SubSecDateTimeOriginal < XMP-exif:DateTimeOriginal
46
46
  -Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated
47
+ -Composite:SubSecCreateDate < XMP-exif:DateTimeDigitized
47
48
  -Composite:SubSecCreateDate < XMP-xmp:CreateDate
48
49
  -Composite:SubSecModifyDate < XMP-xmp:ModifyDate
49
50
  -EXIF:Software < XMP-xmp:CreatorTool
@@ -228,7 +228,7 @@ Options:
228
228
  feature-code list may begin with a dash to remove entries from
229
229
  the default list, or a plus sign to add entries. May be
230
230
  multiple -c options for each intput DBFILE. Country/region and
231
- feature names are case insensitive. Default is "$defaults{def_codes}".
231
+ feature names are case insensitive. Default is "$defaults{def_codes}".
232
232
  -cp CODE - Additional features to include if above minimum population.
233
233
  Default is "$defcp".
234
234
  -l LANG - Alternate languages to read from $altNamesFile if
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.12';
14
+ my $version = '13.14';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -2455,7 +2455,7 @@ T2: foreach $t2 (@tags2) {
2455
2455
  } else {
2456
2456
  push @diffs, sprintf "< %s%s: %s\n", $desc, $pad, Printable($val);
2457
2457
  $desc = ' ' x $len if $v < 3;
2458
- push @diffs, sprintf "> %s%s %s\n", $desc, $pad, Printable($val2) if defined $val2;
2458
+ push @diffs, sprintf "> %s%s: %s\n", $desc, $pad, Printable($val2) if defined $val2;
2459
2459
  }
2460
2460
  }
2461
2461
  $done2{$tag2} = 1 if defined $tag2;
@@ -5983,7 +5983,7 @@ with this command:
5983
5983
 
5984
5984
  produces output like this:
5985
5985
 
5986
- -- Generated by ExifTool 13.12 --
5986
+ -- Generated by ExifTool 13.14 --
5987
5987
  File: a.jpg - 2003:10:31 15:44:19
5988
5988
  (f/5.6, 1/60s, ISO 100)
5989
5989
  File: b.jpg - 2006:05:23 11:57:38
@@ -6000,8 +6000,8 @@ name, a value of 1 is returned if any tag exists in the specified group, or
6000
6000
  values of all matching tags are joined).
6001
6001
 
6002
6002
  The B<-p> output iterates through the family 3 group names, with each
6003
- sub-document producing additional output. This feature is most useful when
6004
- used in combination with the B<-ee> option to extract embedded documents.
6003
+ sub-document producing additional output when combined with the B<-ee>
6004
+ (ExtractEmbedded) option.
6005
6005
 
6006
6006
  If a specified tag does not exist, a minor warning is issued and the line
6007
6007
  with the missing tag is not printed. However, the B<-f> option may be used
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.09';
17
+ $VERSION = '1.10';
18
18
 
19
19
  sub ProcessAFCP($$);
20
20
 
@@ -63,10 +63,10 @@ for the AFCP specification.
63
63
  #------------------------------------------------------------------------------
64
64
  # Read/write AFCP information in a file
65
65
  # Inputs: 0) ExifTool object reference, 1) dirInfo reference
66
- # (Set 'ScanForAFCP' member in dirInfo to scan from current position for AFCP)
66
+ # (Set 'ScanForTrailer' member in dirInfo to scan from current position for AFCP)
67
67
  # Returns: 1 on success, 0 if this file didn't contain AFCP information
68
68
  # -1 on write error or if the offsets were incorrect on reading
69
- # - updates DataPos to point to actual AFCP start if ScanForAFCP is set
69
+ # - updates DataPos to point to actual AFCP start if ScanForTrailer is set
70
70
  # - updates DirLen to trailer length
71
71
  # - returns Fixup reference in dirInfo hash when writing
72
72
  sub ProcessAFCP($$)
@@ -91,8 +91,8 @@ NoAFCP: for (;;) {
91
91
  $fix = 0;
92
92
  } else {
93
93
  $rtnVal = -1;
94
- # look for start of AXS trailer if 'ScanForAFCP'
95
- last unless $$dirInfo{ScanForAFCP} and $raf->Seek($curPos, 0);
94
+ # look for start of AXS trailer if 'ScanForTrailer'
95
+ last unless $$dirInfo{ScanForTrailer} and $raf->Seek($curPos, 0);
96
96
  my $actualPos = $curPos;
97
97
  # first look for header right at current position
98
98
  for (;;) {
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.60';
38
+ $VERSION = '3.61';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -84,7 +84,8 @@ my %tweakOrder = (
84
84
  Nintendo => 'NikonCapture',
85
85
  Pentax => 'Panasonic',
86
86
  SonyIDC => 'Sony',
87
- Unknown => 'SonyIDC',
87
+ Vivo => 'SonyIDC',
88
+ Unknown => 'Vivo',
88
89
  DNG => 'Unknown',
89
90
  PrintIM => 'ICC_Profile',
90
91
  Vorbis => 'Ogg',
@@ -100,6 +101,8 @@ my %tweakOrder = (
100
101
  MWG => 'Shortcuts',
101
102
  'FujiFilm::RAF' => 'FujiFilm::RAFHeader',
102
103
  'FujiFilm::RAFData' => 'FujiFilm::RAF',
104
+ 'QuickTime::AudioKeys' => 'QuickTime::Keys',
105
+ 'QuickTime::VideoKeys' => 'QuickTime::AudioKeys',
103
106
  );
104
107
 
105
108
  # list of all recognized Format strings
@@ -437,15 +440,22 @@ appropriate table in the config file (see
437
440
  L<example.config|../config.html#PREF> in the full distribution for an
438
441
  example). Note that some tags with the same name but different ID's may
439
442
  exist in the same location, but the family 7 group names may be used to
440
- differentiate these. ExifTool currently writes only top-level metadata in
441
- QuickTime-based files; it extracts other track-specific and timed metadata,
442
- but can not yet edit tags in these locations (with the exception of
443
- track-level date/time tags).
443
+ differentiate these.
444
444
 
445
- Beware that the Keys tags are actually stored inside the ItemList in the
446
- file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
447
- deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
448
- deleted individually with C<-QuickTime:ItemList:all=>.
445
+ ExifTool currently writes
446
+ L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
447
+ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags> only as
448
+ top-level metadata, but select Keys tags are may be written to the audio or
449
+ video track. See the
450
+ L<AudioKeys|Image::ExifTool::TagNames/QuickTime AudioKeys Tags> and
451
+ L<VideoKeys|Image::ExifTool::TagNames/QuickTime VideoKeys Tags> tags for
452
+ more information.
453
+
454
+ Beware that the values of the Keys tags are actually stored inside an
455
+ ItemList atom in the file, so deleting the ItemList group as a block (ie.
456
+ C<-ItemList:all=>) also deletes Keys tags. Instead, to preserve Keys tags
457
+ the ItemList tags may be deleted individually with
458
+ C<-QuickTime:ItemList:all=>.
449
459
 
450
460
  Alternate language tags may be accessed for
451
461
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
@@ -1783,9 +1793,10 @@ sub NumbersFirst($$)
1783
1793
  $rtnVal = $numbersFirst;
1784
1794
  } else {
1785
1795
  my ($a2, $b2) = ($a, $b);
1786
- # expand numbers to 3 digits (with restrictions to avoid messing up ascii-hex tags)
1787
- $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($a2)<16;
1788
- $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($b2)<16;
1796
+ # expand numbers to 3 digits (with restrictions to avoid messing up
1797
+ # ascii-hex tags -- Nikon LensID's are 23 characters long)
1798
+ $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ |dvtm_.*)?[.0-9 ]*$/ and length($a2)<23;
1799
+ $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ |dvtm_.*)?[.0-9 ]*$/ and length($b2)<23;
1789
1800
  $caseInsensitive and $rtnVal = (lc($a2) cmp lc($b2));
1790
1801
  $rtnVal or $rtnVal = ($a2 cmp $b2);
1791
1802
  }
@@ -18,14 +18,15 @@ use Image::ExifTool::XMP;
18
18
  use Image::ExifTool::GPS;
19
19
  use Image::ExifTool::Protobuf;
20
20
 
21
- $VERSION = '1.11';
21
+ $VERSION = '1.12';
22
22
 
23
23
  sub ProcessDJIInfo($$$);
24
24
 
25
25
  %knownProtocol = (
26
- 'dvtm_ac203.proto' => 1,
27
- 'dvtm_ac204.proto' => 1,
28
- 'dvtm_AVATA2.proto' => 1,
26
+ 'dvtm_ac203.proto' => 1, # Osmo Action 4
27
+ 'dvtm_ac204.proto' => 1, # Osmo Action 5
28
+ 'dvtm_AVATA2.proto' => 1, # Avanta 2
29
+ 'dvtm_wm265e.proto' => 1, # Mavic 3
29
30
  );
30
31
 
31
32
  my %convFloat2 = (
@@ -200,15 +201,19 @@ my %convFloat2 = (
200
201
  TAG_PREFIX => '',
201
202
  PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
202
203
  NOTES => q{
203
- Tags found in protobuf-format DJI djmd and dbgi timed metadata. Only a few
204
- tags are currently known, but unknown djmd tags may be extracted by setting
205
- the Unknown option to 1 (or 2 to also extract unknown dbgi debug tags). Tag
206
- ID's are composed of the corresponding .proto file name combined with the
207
- hierarchical protobuf field numbers.
204
+ Tags found in protobuf-format DJI djmd and dbgi timed metadata. The known
205
+ tags listed below are extracted by default, but unknown djmd tags may be
206
+ extracted as well by setting the Unknown option to 1, or 2 to also extract
207
+ unknown dbgi debug tags. Tag ID's are composed of the corresponding .proto
208
+ file name combined with the hierarchical protobuf field numbers.
208
209
 
209
210
  ExifTool currently extracts timed GPS plus a few other tags from DJI devices
210
211
  which use the following protocols: dvtm_AVATA2.proto (Avanta 2),
211
- dvtm_ac203.proto (Osmo Action 4), and dvtm_ac204.proto (Osmo Action 5).
212
+ dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5) and
213
+ dvtm_wm265e.proto (Mavic 3).
214
+
215
+ Note that with the protobuf format, numerical tags missing from the output
216
+ for a given protocol should be considered to have the default value of 0.
212
217
  },
213
218
  Protocol => {
214
219
  RawConv => q{
@@ -218,6 +223,10 @@ my %convFloat2 = (
218
223
  return $val;
219
224
  },
220
225
  },
226
+ #
227
+ # Osmo Action 4
228
+ #
229
+ 'dvtm_ac203_1-1-5' => 'SerialNumber', # (NC)
221
230
  # dvtm_ac203_1-1-6 - some version number
222
231
  'dvtm_ac203_1-1-10' => 'Model',
223
232
  'dvtm_ac203_2-3' => {
@@ -243,6 +252,10 @@ my %convFloat2 = (
243
252
  ValueConv => '$val =~ tr/-/:/; $val',
244
253
  PrintConv => '$self->ConvertDateTime($val)',
245
254
  },
255
+ #
256
+ # Osmo Action 5
257
+ #
258
+ 'dvtm_ac204_1-1-5' => 'SerialNumber', # (NC)
246
259
  # dvtm_ac204_1-1-6 - some version number
247
260
  'dvtm_ac204_1-1-10' => 'Model',
248
261
  'dvtm_ac204_2-3' => {
@@ -254,6 +267,7 @@ my %convFloat2 = (
254
267
  Name => 'GPSInfo',
255
268
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
256
269
  },
270
+ # dvtm_ac204_3-2-4-1 - shutter speed? (rational)
257
271
  'dvtm_ac204_3-4-2-2' => {
258
272
  Name => 'GPSAltitude',
259
273
  Groups => { 2 => 'Location' },
@@ -268,10 +282,15 @@ my %convFloat2 = (
268
282
  ValueConv => '$val =~ tr/-/:/; $val',
269
283
  PrintConv => '$self->ConvertDateTime($val)',
270
284
  },
285
+ #
286
+ # Avanta 2
287
+ #
271
288
  # dvtm_AVATA2_1-1-2 - some version number
272
289
  # dvtm_AVATA2_1-1-3 - some version number
290
+ 'dvtm_AVATA2_1-1-5' => 'SerialNumber', # (NC)
273
291
  'dvtm_AVATA2_1-1-10' => 'Model',
274
- 'dvtm_AVATA2_2-2-3-1' => 'SerialNumber', # (NC)
292
+ # dvtm_AVATA2_2-2-1-4 - model code?
293
+ 'dvtm_AVATA2_2-2-3-1' => 'SerialNumber2', # (NC)
275
294
  'dvtm_AVATA2_2-3' => {
276
295
  Name => 'FrameInfo',
277
296
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
@@ -285,11 +304,45 @@ my %convFloat2 = (
285
304
  ValueConv => '$val / 1e6',
286
305
  },
287
306
  # dvtm_AVATA2_3-2-1-4 - model code?
307
+ # dvtm_AVATA2_3-2-1-5 - frame rate?
308
+ # dvtm_AVATA2_3-2-4-1 - shutter speed? (rational)
288
309
  # dvtm_AVATA2_3-4-1-4 - model code?
310
+ # dvtm_AVATA2_3-4-3-1,2,3 - YPR? (int64s)
289
311
  'dvtm_AVATA2_3-4-4-1' => {
290
312
  Name => 'GPSInfo',
291
313
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
292
314
  },
315
+ #
316
+ # Mavic 3
317
+ #
318
+ 'dvtm_wm265e_1-1-5' => 'SerialNumber', # (confirmed)
319
+ 'dvtm_wm265e_1-1-10' => 'Model',
320
+ 'dvtm_wm265e_2-2' => {
321
+ Name => 'FrameInfo',
322
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
323
+ },
324
+ # dvtm_wm265e_3-2-1-4 - model code?
325
+ 'dvtm_wm265e_3-2-2-1' => { Name => 'ISO', Format => 'float' },
326
+ 'dvtm_wm265e_3-2-3-1' => {
327
+ Name => 'ShutterSpeed',
328
+ Format => 'rational',
329
+ ValueConv => '$val =~ m{(.*)/(.*)} ? $1 / $2 : $val',
330
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
331
+ },
332
+ # dvtm_wm265e_3-2-5-1 - unknown rational (xxxx / 1000)
333
+ 'dvtm_wm265e_3-2-6-1' => { Name => 'DigitalZoom', Format => 'float' },
334
+ 'dvtm_wm265e_3-3-4-1' => {
335
+ Name => 'GPSInfo',
336
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
337
+ },
338
+ 'dvtm_wm265e_3-3-3-1' => { Name => 'DroneRoll', Format => 'int64s', ValueConv => '$val/10' },
339
+ 'dvtm_wm265e_3-3-3-2' => { Name => 'DronePitch', Format => 'int64s', ValueConv => '$val/10' },
340
+ 'dvtm_wm265e_3-3-3-3' => { Name => 'DroneYaw', Format => 'int64s', ValueConv => '$val/10' },
341
+ 'dvtm_wm265e_3-3-4-2' => { Name => 'AbsoluteAltitude', ValueConv => '$val / 1000' },
342
+ 'dvtm_wm265e_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
343
+ 'dvtm_wm265e_3-4-3-1' => { Name => 'GimbalPitch',Format => 'int64s', ValueConv => '$val / 10' },
344
+ 'dvtm_wm265e_3-4-3-2' => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' },
345
+ 'dvtm_wm265e_3-4-3-3' => { Name => 'GimbalYaw', Format => 'int64s', ValueConv => '$val / 10' },
293
346
  );
294
347
 
295
348
  %Image::ExifTool::DJI::FrameInfo = (
@@ -22,7 +22,7 @@ use strict;
22
22
  use vars qw($VERSION);
23
23
  use Image::ExifTool qw(:DataAccess :Utils);
24
24
 
25
- $VERSION = '1.20';
25
+ $VERSION = '1.21';
26
26
 
27
27
  sub ProcessPEResources($$);
28
28
  sub ProcessPEVersion($$);
@@ -1283,7 +1283,7 @@ sub ProcessEXE($$)
1283
1283
  # read the rest of the optional header if necessary
1284
1284
  my $optSize = Get16u(\$buff, 20);
1285
1285
  my $more = $optSize + 24 - $size;
1286
- my $magic;
1286
+ my $magic = 0;
1287
1287
  if ($more > 0) {
1288
1288
  if ($raf->Read($buf2, $more) == $more) {
1289
1289
  $buff .= $buf2;