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.
- checksums.yaml +4 -4
- data/bin/Changes +41 -3
- data/bin/MANIFEST +7 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +49 -47
- data/bin/config_files/local_time.config +55 -0
- data/bin/exiftool +83 -70
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
- data/bin/lib/Image/ExifTool/DJI.pm +256 -20
- data/bin/lib/Image/ExifTool/DSF.pm +138 -0
- data/bin/lib/Image/ExifTool/EXE.pm +3 -1
- data/bin/lib/Image/ExifTool/Font.pm +386 -118
- data/bin/lib/Image/ExifTool/Geolocation.pm +10 -7
- data/bin/lib/Image/ExifTool/Geotag.pm +21 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +6 -3
- data/bin/lib/Image/ExifTool/Google.pm +16 -6
- data/bin/lib/Image/ExifTool/ID3.pm +11 -10
- data/bin/lib/Image/ExifTool/LNK.pm +63 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +32 -23
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +3 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +3 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +44 -35
- data/bin/lib/Image/ExifTool/Sony.pm +19 -14
- data/bin/lib/Image/ExifTool/TagLookup.pm +35 -1
- data/bin/lib/Image/ExifTool/TagNames.pod +1383 -1217
- data/bin/lib/Image/ExifTool/WavPack.pm +144 -0
- data/bin/lib/Image/ExifTool/XMP.pm +12 -7
- data/bin/lib/Image/ExifTool/XMP2.pl +11 -5
- data/bin/lib/Image/ExifTool.pm +46 -26
- data/bin/lib/Image/ExifTool.pod +64 -56
- data/bin/perl-Image-ExifTool.spec +47 -46
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9dfd10c8fad46a346537837a7eb4d95f6abf124bb6b3a9ca65479e447b6f4bac
|
|
4
|
+
data.tar.gz: 9ac3a94f1fa80f10cab26c6c595499b32431e39e1fa31d33255a45454b2c1465
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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
|
|
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
data/bin/META.yml
CHANGED
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 |
|
|
18
|
-
3FR r |
|
|
19
|
-
3G2 r/w | DSS r |
|
|
20
|
-
3GP r/w | DV r |
|
|
21
|
-
7Z r | DVB r/w |
|
|
22
|
-
A r | DVR-MS r |
|
|
23
|
-
AA r | DYLIB r |
|
|
24
|
-
AAC r | EIP r |
|
|
25
|
-
AAE r | EPS r/w |
|
|
26
|
-
AAX r/w | EPUB r |
|
|
27
|
-
ACR r | ERF r/w |
|
|
28
|
-
AFM r | EXE r |
|
|
29
|
-
AI r/w | EXIF r/w/c |
|
|
30
|
-
AIFF r | EXR r |
|
|
31
|
-
APE r | EXV r/w/c |
|
|
32
|
-
ARQ r/w | F4A/V r/w |
|
|
33
|
-
ARW r/w | FFF r/w |
|
|
34
|
-
ASF r | FITS r |
|
|
35
|
-
AVI r | FLA r |
|
|
36
|
-
AVIF r/w | FLAC r |
|
|
37
|
-
AZW r | FLIF r/w |
|
|
38
|
-
BMP r | FLV r |
|
|
39
|
-
BPG r | FPF r |
|
|
40
|
-
BTF r | FPX r |
|
|
41
|
-
C2PA r | GIF r/w |
|
|
42
|
-
CHM r | GLV r/w |
|
|
43
|
-
COS r | GPR r/w |
|
|
44
|
-
CR2 r/w | GZ r |
|
|
45
|
-
CR3 r/w | HDP r/w |
|
|
46
|
-
CRM r/w | HDR r |
|
|
47
|
-
CRW r/w | HEIC r/w |
|
|
48
|
-
CS1 r/w | HEIF r/w |
|
|
49
|
-
CSV r | HTML r |
|
|
50
|
-
CUR r | ICC r/w/c |
|
|
51
|
-
CZI r | ICO r |
|
|
52
|
-
DCM r | ICS r |
|
|
53
|
-
DCP r/w | IDML r |
|
|
54
|
-
DCR r | IIQ r/w |
|
|
55
|
-
DFONT r | IND r/w |
|
|
56
|
-
DIVX r | INSP r/w |
|
|
57
|
-
DJVU r | INSV r |
|
|
58
|
-
DLL r | INX r |
|
|
59
|
-
DNG r/w | ISO r |
|
|
60
|
-
DOC r | ITC r |
|
|
61
|
-
DOCX r | J2C 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.
|
|
114
|
-
cd Image-ExifTool-13.
|
|
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.
|
|
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
|
-
|
|
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 |
|
|
5083
|
-
3FR r |
|
|
5084
|
-
3G2 r/w | DSS r |
|
|
5085
|
-
3GP r/w | DV r |
|
|
5086
|
-
7Z r | DVB r/w |
|
|
5087
|
-
A r | DVR-MS r |
|
|
5088
|
-
AA r | DYLIB r |
|
|
5089
|
-
AAC r | EIP r |
|
|
5090
|
-
AAE r | EPS r/w |
|
|
5091
|
-
AAX r/w | EPUB r |
|
|
5092
|
-
ACR r | ERF r/w |
|
|
5093
|
-
AFM r | EXE r |
|
|
5094
|
-
AI r/w | EXIF r/w/c |
|
|
5095
|
-
AIFF r | EXR r |
|
|
5096
|
-
APE r | EXV r/w/c |
|
|
5097
|
-
ARQ r/w | F4A/V r/w |
|
|
5098
|
-
ARW r/w | FFF r/w |
|
|
5099
|
-
ASF r | FITS r |
|
|
5100
|
-
AVI r | FLA r |
|
|
5101
|
-
AVIF r/w | FLAC r |
|
|
5102
|
-
AZW r | FLIF r/w |
|
|
5103
|
-
BMP r | FLV r |
|
|
5104
|
-
BPG r | FPF r |
|
|
5105
|
-
BTF r | FPX r |
|
|
5106
|
-
C2PA r | GIF r/w |
|
|
5107
|
-
CHM r | GLV r/w |
|
|
5108
|
-
COS r | GPR r/w |
|
|
5109
|
-
CR2 r/w | GZ r |
|
|
5110
|
-
CR3 r/w | HDP r/w |
|
|
5111
|
-
CRM r/w | HDR r |
|
|
5112
|
-
CRW r/w | HEIC r/w |
|
|
5113
|
-
CS1 r/w | HEIF r/w |
|
|
5114
|
-
CSV r | HTML r |
|
|
5115
|
-
CUR r | ICC r/w/c |
|
|
5116
|
-
CZI r | ICO r |
|
|
5117
|
-
DCM r | ICS r |
|
|
5118
|
-
DCP r/w | IDML r |
|
|
5119
|
-
DCR r | IIQ r/w |
|
|
5120
|
-
DFONT r | IND r/w |
|
|
5121
|
-
DIVX r | INSP r/w |
|
|
5122
|
-
DJVU r | INSV r |
|
|
5123
|
-
DLL r | INX r |
|
|
5124
|
-
DNG r/w | ISO r |
|
|
5125
|
-
DOC r | ITC r |
|
|
5126
|
-
DOCX r | J2C 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
|
|
5727
|
-
|
|
5728
|
-
|
|
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
|
|
5928
|
-
from the
|
|
5929
|
-
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
5933
|
-
|
|
5934
|
-
|
|
5935
|
-
|
|
5936
|
-
|
|
5937
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|