exiftool_vendored 12.12.0 → 12.17.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 +73 -3
- data/bin/MANIFEST +3 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -3
- data/bin/exiftool +87 -57
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool.pm +36 -3
- data/bin/lib/Image/ExifTool.pod +12 -8
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/APP12.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BPG.pm +1 -1
- data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -7
- data/bin/lib/Image/ExifTool/Canon.pm +3 -2
- data/bin/lib/Image/ExifTool/CanonCustom.pm +20 -2
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/Casio.pm +1 -1
- data/bin/lib/Image/ExifTool/Charset.pm +1 -1
- data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +28 -2
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/DPX.pm +4 -4
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +45 -16
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -2
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +6 -6
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +21 -6
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/HTML.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +1 -1
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +1 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +24 -2
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/JVC.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +9 -4
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/MNG.pm +1 -1
- data/bin/lib/Image/ExifTool/MOI.pm +1 -1
- data/bin/lib/Image/ExifTool/MPC.pm +1 -1
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +315 -36
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +2013 -0
- data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/Opus.pm +1 -1
- data/bin/lib/Image/ExifTool/PCX.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +10 -2
- data/bin/lib/Image/ExifTool/PGF.pm +1 -1
- data/bin/lib/Image/ExifTool/PICT.pm +1 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +12 -4
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/PSP.pm +1 -1
- data/bin/lib/Image/ExifTool/Palm.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -2
- data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +20 -14
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +46 -7
- data/bin/lib/Image/ExifTool/README +5 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +85 -7
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Real.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- data/bin/lib/Image/ExifTool/Red.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +6 -2
- data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- data/bin/lib/Image/ExifTool/Stim.pm +1 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +3985 -3807
- data/bin/lib/Image/ExifTool/TagNames.pod +432 -21
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Theora.pm +1 -1
- data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +1 -1
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -7
- data/bin/lib/Image/ExifTool/Writer.pl +32 -18
- data/bin/lib/Image/ExifTool/XMP.pm +44 -9
- data/bin/lib/Image/ExifTool/XMP2.pl +5 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 282998369bb9233d2f181df0f59f292915623e97fba11993c01c310e533eb29f
|
|
4
|
+
data.tar.gz: fd371cfbcd5c85f4a8ab489cd9ee53f0a24dd3ac69a598d5d0a35a47a05853a9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0347af9fa9e87b8a4de28e8274cd5f00bbd75d78ffc0a340624da063681eae24385a46928848248b92a53ec3549010b269bd2216e5a8390f8da4bf727223ba86
|
|
7
|
+
data.tar.gz: becbc52e82c10df8e11c73460e711926d3e422d8e42af2c81bf94b4f1f511a7e68037e9e1601cda42964fe995bb8c54d79ecd2196a583a85941d748d749d18be
|
data/bin/Changes
CHANGED
|
@@ -4,8 +4,78 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 12.
|
|
8
|
-
considered development releases, and are not uploaded to
|
|
7
|
+
Note: The most recent production release is Version 12.16. (Other versions are
|
|
8
|
+
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
|
+
|
|
10
|
+
Feb. 3, 2021 - Version 12.17
|
|
11
|
+
|
|
12
|
+
- Added a new Canon FocusMode value
|
|
13
|
+
- Added a new FujiFilm FilmMode value
|
|
14
|
+
- Added a number of new XMP-crs tags (thanks Herb)
|
|
15
|
+
- Decode a new H264 MDPM tag
|
|
16
|
+
- Allow non-conforming lower-case XMP boolean "true" and "false" values to be
|
|
17
|
+
written, but only when print conversion is disabled
|
|
18
|
+
- Improved Validate option to warn about non-capitalized boolean XMP values
|
|
19
|
+
- Improved logic for setting GPSLatitude/LongitudeRef values when writing
|
|
20
|
+
- Changed -json and -php options so the -a option is implied even without the
|
|
21
|
+
-g option
|
|
22
|
+
- Avoid extracting audio/video data from AVI videos when -ee -u is used
|
|
23
|
+
- Patched decoding of Canon ContinuousShootingSpeed for newer firmware
|
|
24
|
+
versions of the EOS-1DXmkIII
|
|
25
|
+
- Re-worked LensID patch of version 12.00 (github issue #51)
|
|
26
|
+
- Fixed a few typos in newly-added NikonSettings tags (thanks Herb)
|
|
27
|
+
- Fixed problem where group could not be specified for PNG-pHYs tags when
|
|
28
|
+
writing
|
|
29
|
+
|
|
30
|
+
Jan. 21, 2021 - Version 12.16 (production release)
|
|
31
|
+
|
|
32
|
+
- Extract another form of video subtitle text
|
|
33
|
+
- Enhanced -ee option with -ee2 and -ee3 to allow parsing of the H264 video
|
|
34
|
+
stream in MP4 files
|
|
35
|
+
- Changed a Nikon FlashMode value
|
|
36
|
+
- Fixed problem that caused a failed DPX test on Strawberry Perl
|
|
37
|
+
- API Changes:
|
|
38
|
+
- Enhanced ExtractEmbedded option
|
|
39
|
+
|
|
40
|
+
Jan. 18, 2021 - Version 12.15 (production release)
|
|
41
|
+
|
|
42
|
+
- Added a couple of new Sony LensType values (thanks LibRaw and Jos Roost)
|
|
43
|
+
- Added a new Nikon FlashMode value (thanks Mike)
|
|
44
|
+
- Decode NikonSettings (thanks Warren Hatch)
|
|
45
|
+
- Decode thermal information from DJI RJPEG images
|
|
46
|
+
- Fixed extra newline in -echo3 and -echo4 outputs added in version 12.10
|
|
47
|
+
- Fixed out-of-memory problem when writing some very large PNG files under
|
|
48
|
+
Windows
|
|
49
|
+
|
|
50
|
+
Jan. 6, 2021 - Version 12.14
|
|
51
|
+
|
|
52
|
+
- Added support for 2 more types of timed GPS in video files (that makes 49
|
|
53
|
+
different formats now supported)
|
|
54
|
+
- Added validity check for PDF trailer dictionary Size
|
|
55
|
+
- Added a new Pentax LensType
|
|
56
|
+
- Extract metadata from Jpeg2000 Association box
|
|
57
|
+
- Changed -g:XX:YY and -G:XX:YY options to show empty strings for non-existent
|
|
58
|
+
groups
|
|
59
|
+
- Patched to issue warning and avoid writing date/time values with a zero
|
|
60
|
+
month or day number
|
|
61
|
+
- Patched to avoid runtime warnings if trying to set FileName to an empty
|
|
62
|
+
string
|
|
63
|
+
- Fixed issue that could cause GPS test number 12 to fail on some systems
|
|
64
|
+
- Fixed problem extracting XML as a block from Jpeg2000 images, and extract
|
|
65
|
+
XML tags in the XML group instead of XMP
|
|
66
|
+
|
|
67
|
+
Dec. 24, 2020 - Version 12.13
|
|
68
|
+
|
|
69
|
+
- Added -i HIDDEN option to ignore files with names that start with "."
|
|
70
|
+
- Added a few new Nikon ShutterMode values (thanks Jan Skoda)
|
|
71
|
+
- Added ability to write Google GCamera MicroVideo XMP tags
|
|
72
|
+
- Add time zone automatically to most string-based QuickTime date/time tags
|
|
73
|
+
when writing unless the PrintConv option is disabled
|
|
74
|
+
- Decode a new Sony tag (thanks LibRaw)
|
|
75
|
+
- Changed behaviour when writing only pseudo tags to return an error and avoid
|
|
76
|
+
writing any other tags if writing FileName fails
|
|
77
|
+
- Print "X image files read" message even if only 1 file is read when at least
|
|
78
|
+
one other file has failed the -if condition
|
|
9
79
|
|
|
10
80
|
Dec. 4, 2020 - Version 12.12
|
|
11
81
|
|
|
@@ -172,7 +242,7 @@ July 27, 2020 - Version 12.02
|
|
|
172
242
|
- Improved decoding of some Canon EOS 1DXmkIII custom functions
|
|
173
243
|
- Allow integer QuickTime TrackNumber and DiskNumber values
|
|
174
244
|
- Relax validity check of QuickTime:ContentCreateDate when writing with -n
|
|
175
|
-
- Removed "Com" from the start of some unknown ItemList tag names
|
|
245
|
+
- Removed "Com" from the start of some unknown QuickTime ItemList tag names
|
|
176
246
|
- Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
|
|
177
247
|
- Changed QuickTime CleanAperture tags decode as signed rationals
|
|
178
248
|
|
data/bin/MANIFEST
CHANGED
|
@@ -115,6 +115,7 @@ html/TagNames/Motorola.html
|
|
|
115
115
|
html/TagNames/Nikon.html
|
|
116
116
|
html/TagNames/NikonCapture.html
|
|
117
117
|
html/TagNames/NikonCustom.html
|
|
118
|
+
html/TagNames/NikonSettings.html
|
|
118
119
|
html/TagNames/Nintendo.html
|
|
119
120
|
html/TagNames/OOXML.html
|
|
120
121
|
html/TagNames/Ogg.html
|
|
@@ -337,6 +338,7 @@ lib/Image/ExifTool/Motorola.pm
|
|
|
337
338
|
lib/Image/ExifTool/Nikon.pm
|
|
338
339
|
lib/Image/ExifTool/NikonCapture.pm
|
|
339
340
|
lib/Image/ExifTool/NikonCustom.pm
|
|
341
|
+
lib/Image/ExifTool/NikonSettings.pm
|
|
340
342
|
lib/Image/ExifTool/Nintendo.pm
|
|
341
343
|
lib/Image/ExifTool/OOXML.pm
|
|
342
344
|
lib/Image/ExifTool/Ogg.pm
|
|
@@ -603,6 +605,7 @@ t/Jpeg2000.t
|
|
|
603
605
|
t/Jpeg2000_2.out
|
|
604
606
|
t/Jpeg2000_3.out
|
|
605
607
|
t/Jpeg2000_4.out
|
|
608
|
+
t/Jpeg2000_5.out
|
|
606
609
|
t/Kodak.t
|
|
607
610
|
t/Kodak_2.out
|
|
608
611
|
t/Kodak_3.out
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
|
|
|
106
106
|
terminal window to extract and run ExifTool:
|
|
107
107
|
|
|
108
108
|
cd ~/Desktop
|
|
109
|
-
gzip -dc Image-ExifTool-12.
|
|
110
|
-
cd Image-ExifTool-12.
|
|
109
|
+
gzip -dc Image-ExifTool-12.17.tar.gz | tar -xf -
|
|
110
|
+
cd Image-ExifTool-12.17
|
|
111
111
|
./exiftool t/images/ExifTool.jpg
|
|
112
112
|
|
|
113
113
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -161,7 +161,7 @@ for calculating digest values and providing other features listed below:
|
|
|
161
161
|
|
|
162
162
|
COPYRIGHT AND LICENSE
|
|
163
163
|
|
|
164
|
-
Copyright 2003-
|
|
164
|
+
Copyright 2003-2021, Phil Harvey
|
|
165
165
|
|
|
166
166
|
This is free software; you can redistribute it and/or modify it under the
|
|
167
167
|
same terms as Perl itself.
|
data/bin/exiftool
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
use strict;
|
|
11
11
|
require 5.004;
|
|
12
12
|
|
|
13
|
-
my $version = '12.
|
|
13
|
+
my $version = '12.17';
|
|
14
14
|
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
16
16
|
my $exeDir;
|
|
@@ -106,6 +106,7 @@ my %csvTags; # lookup for all found tags with CSV option (lower case keys
|
|
|
106
106
|
my %database; # lookup for database information based on file name (in ExifTool Charset)
|
|
107
107
|
my %filterExt; # lookup for filtered extensions
|
|
108
108
|
my %ignore; # directory names to ignore
|
|
109
|
+
my $ignoreHidden; # flag to ignore hidden files
|
|
109
110
|
my %preserveTime; # preserved timestamps for files
|
|
110
111
|
my %printFmt; # the contents of the print format file
|
|
111
112
|
my %setTags; # hash of list references for tags to set from files
|
|
@@ -370,12 +371,12 @@ if (grep /^-common_args$/i, @ARGV) {
|
|
|
370
371
|
Command: for (;;) {
|
|
371
372
|
|
|
372
373
|
if (@echo3) {
|
|
373
|
-
my $str = join
|
|
374
|
+
my $str = join("\n", @echo3) . "\n";
|
|
374
375
|
$str =~ s/\$\{status\}/$rtnVal/ig;
|
|
375
376
|
print STDOUT $str;
|
|
376
377
|
}
|
|
377
378
|
if (@echo4) {
|
|
378
|
-
my $str = join
|
|
379
|
+
my $str = join("\n", @echo4) . "\n";
|
|
379
380
|
$str =~ s/\$\{status\}/$rtnVal/ig;
|
|
380
381
|
print STDERR $str;
|
|
381
382
|
}
|
|
@@ -468,6 +469,7 @@ undef $fileHeader;
|
|
|
468
469
|
undef $filtered;
|
|
469
470
|
undef $fixLen;
|
|
470
471
|
undef $forcePrint;
|
|
472
|
+
undef $ignoreHidden;
|
|
471
473
|
undef $joinLists;
|
|
472
474
|
undef $langOpt;
|
|
473
475
|
undef $listItem;
|
|
@@ -892,8 +894,8 @@ for (;;) {
|
|
|
892
894
|
$helped = 1;
|
|
893
895
|
next;
|
|
894
896
|
}
|
|
895
|
-
if (/^(ee|extractembedded)$/i) {
|
|
896
|
-
$mt->Options(ExtractEmbedded => 1);
|
|
897
|
+
if (/^(ee|extractembedded)(\d*)$/i) {
|
|
898
|
+
$mt->Options(ExtractEmbedded => $2 || 1);
|
|
897
899
|
$mt->Options(Duplicates => 1);
|
|
898
900
|
next;
|
|
899
901
|
}
|
|
@@ -986,6 +988,7 @@ for (;;) {
|
|
|
986
988
|
my $dir = shift;
|
|
987
989
|
defined $dir or Error("Expecting directory name for -i option\n"), $badCmd=1, next;
|
|
988
990
|
$ignore{$dir} = 1;
|
|
991
|
+
$dir eq 'HIDDEN' and $ignoreHidden = 1;
|
|
989
992
|
next;
|
|
990
993
|
}
|
|
991
994
|
if (/^if(\d*)$/i) {
|
|
@@ -1261,7 +1264,7 @@ for (;;) {
|
|
|
1261
1264
|
if (/^php$/i) {
|
|
1262
1265
|
$json = 2;
|
|
1263
1266
|
$html = $xml = 0;
|
|
1264
|
-
$mt->Options(Duplicates=>1);
|
|
1267
|
+
$mt->Options(Duplicates => 1);
|
|
1265
1268
|
next;
|
|
1266
1269
|
}
|
|
1267
1270
|
if (/^z(ip)?$/i) {
|
|
@@ -1502,7 +1505,6 @@ if ($xml) {
|
|
|
1502
1505
|
require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64)
|
|
1503
1506
|
}
|
|
1504
1507
|
$mt->Options(List => 1) unless $joinLists;
|
|
1505
|
-
$mt->Options(Duplicates => 0) unless defined $showGroup;
|
|
1506
1508
|
$showTagID = 'D' if $tabFormat and not $showTagID;
|
|
1507
1509
|
} elsif ($structOpt) {
|
|
1508
1510
|
$mt->Options(List => 1);
|
|
@@ -1863,7 +1865,7 @@ if (defined $deleteOrig) {
|
|
|
1863
1865
|
printf($o "%5d image files %s\n", $countCopyWr, $overwriteOrig ? 'moved' : 'copied') if $countCopyWr;
|
|
1864
1866
|
printf($o "%5d files weren't updated due to errors\n", $countBadWr) if $countBadWr;
|
|
1865
1867
|
printf($o "%5d files weren't created due to errors\n", $countBadCr) if $countBadCr;
|
|
1866
|
-
printf($o "%5d image files read\n", $count) if $tot>1 or ($countDir and not $totWr);
|
|
1868
|
+
printf($o "%5d image files read\n", $count) if ($tot+$countFailed)>1 or ($countDir and not $totWr);
|
|
1867
1869
|
printf($o "%5d files could not be read\n", $countBad) if $countBad;
|
|
1868
1870
|
printf($o "%5d output files created\n", scalar(keys %created)) if $textOut;
|
|
1869
1871
|
printf($o "%5d output files appended\n", scalar(keys %appended)) if %appended;
|
|
@@ -2301,7 +2303,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2301
2303
|
$group = $et->GetGroup($tag, $showGroup);
|
|
2302
2304
|
# look ahead to see if this tag may suppress a priority tag in
|
|
2303
2305
|
# the same group, and if so suppress this tag instead
|
|
2304
|
-
next if $noDups and $tag =~ /^(.*?)
|
|
2306
|
+
next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
|
|
2305
2307
|
$group eq $et->GetGroup($1, $showGroup);
|
|
2306
2308
|
$group = 'Unknown' if not $group and ($xml or $json or $csv);
|
|
2307
2309
|
if ($fp and not ($allGroup or $csv)) {
|
|
@@ -2324,6 +2326,9 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2324
2326
|
}
|
|
2325
2327
|
undef $group; # undefine so we don't print it below
|
|
2326
2328
|
}
|
|
2329
|
+
} elsif ($noDups) {
|
|
2330
|
+
# don't allow duplicates, but avoid suppressing the priority tag
|
|
2331
|
+
next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
|
|
2327
2332
|
}
|
|
2328
2333
|
|
|
2329
2334
|
++$lineCount; # we are printing something meaningful
|
|
@@ -2855,6 +2860,10 @@ sub SetImageInfo($$$)
|
|
|
2855
2860
|
# determine what our output file name should be
|
|
2856
2861
|
my $newFileName = $et->GetNewValues('FileName');
|
|
2857
2862
|
my $newDir = $et->GetNewValues('Directory');
|
|
2863
|
+
if (defined $newFileName and not length $newFileName) {
|
|
2864
|
+
Warn "Warning: New file name is empty - $ infile\n";
|
|
2865
|
+
undef $newFileName;
|
|
2866
|
+
}
|
|
2858
2867
|
if (defined $testName) {
|
|
2859
2868
|
my $err;
|
|
2860
2869
|
$err = "You shouldn't write FileName or Directory with TestFile" if defined $newFileName or defined $newDir;
|
|
@@ -2933,14 +2942,19 @@ sub SetImageInfo($$$)
|
|
|
2933
2942
|
}
|
|
2934
2943
|
# quickly rename file and/or set file date if this is all we are doing
|
|
2935
2944
|
if ($numSet == $numPseudo) {
|
|
2936
|
-
my $r1 =
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2945
|
+
my ($r0, $r1, $r2, $r3) = (0, 0, 0, 0);
|
|
2946
|
+
if (defined $outfile) {
|
|
2947
|
+
$r0 = $et->SetFileName($file, $outfile);
|
|
2948
|
+
$file = $$et{NewName} if $r0 > 0; # continue with new name if changed
|
|
2949
|
+
}
|
|
2950
|
+
unless ($r0 < 0) {
|
|
2951
|
+
$r1 = $et->SetFileModifyDate($file,undef,'FileCreateDate');
|
|
2952
|
+
$r2 = $et->SetFileModifyDate($file);
|
|
2953
|
+
$r3 = $et->SetSystemTags($file);
|
|
2954
|
+
}
|
|
2955
|
+
if ($r0 > 0 or $r1 > 0 or $r2 > 0 or $r3 > 0) {
|
|
2942
2956
|
++$countGoodWr;
|
|
2943
|
-
} elsif ($
|
|
2957
|
+
} elsif ($r0 < 0 or $r1 < 0 or $r2 < 0 or $r3 < 0) {
|
|
2944
2958
|
EFile($infile);
|
|
2945
2959
|
++$countBadWr;
|
|
2946
2960
|
return 0;
|
|
@@ -2949,8 +2963,7 @@ sub SetImageInfo($$$)
|
|
|
2949
2963
|
++$countSameWr;
|
|
2950
2964
|
}
|
|
2951
2965
|
if (defined $hardLink or defined $symLink or defined $testName) {
|
|
2952
|
-
|
|
2953
|
-
DoHardLink($et, $src, $hardLink, $symLink, $testName);
|
|
2966
|
+
DoHardLink($et, $file, $hardLink, $symLink, $testName);
|
|
2954
2967
|
}
|
|
2955
2968
|
return 1;
|
|
2956
2969
|
}
|
|
@@ -3686,6 +3699,7 @@ sub ScanDir($$;$)
|
|
|
3686
3699
|
next;
|
|
3687
3700
|
}
|
|
3688
3701
|
next if $endThisDir;
|
|
3702
|
+
next if $ignoreHidden and $file =~ /^\./; # ignore hidden files if specified
|
|
3689
3703
|
# apply rules from -ext options
|
|
3690
3704
|
my $accepted;
|
|
3691
3705
|
if ($filterFlag) {
|
|
@@ -4561,7 +4575,7 @@ L<Processing control|/Processing control>
|
|
|
4561
4575
|
|
|
4562
4576
|
-a (-duplicates) Allow duplicate tags to be extracted
|
|
4563
4577
|
-e (--composite) Do not generate composite tags
|
|
4564
|
-
-ee
|
|
4578
|
+
-ee[NUM] (-extractEmbedded) Extract information from embedded files
|
|
4565
4579
|
-ext[+] EXT (-extension) Process files with specified extension
|
|
4566
4580
|
-F[OFFSET] (-fixBase) Fix the base for maker notes offsets
|
|
4567
4581
|
-fast[NUM] Increase speed when extracting metadata
|
|
@@ -4905,7 +4919,7 @@ and the value is written to all possible groups/tags. For example, the
|
|
|
4905
4919
|
string form must be used in the following command since the intent is to set
|
|
4906
4920
|
the value of all existing date/time tags from C<CreateDate>:
|
|
4907
4921
|
|
|
4908
|
-
exiftool
|
|
4922
|
+
exiftool '-time:all<$createdate' -wm w FILE
|
|
4909
4923
|
|
|
4910
4924
|
=item B<-x> I<TAG> (B<-exclude>)
|
|
4911
4925
|
|
|
@@ -4931,7 +4945,7 @@ between images, but allows the metadata to be altered by editing the
|
|
|
4931
4945
|
intermediate file (C<out.args> in this example):
|
|
4932
4946
|
|
|
4933
4947
|
exiftool -args -G1 --filename --directory src.jpg > out.args
|
|
4934
|
-
exiftool -@ out.args -sep
|
|
4948
|
+
exiftool -@ out.args -sep ', ' dst.jpg
|
|
4935
4949
|
|
|
4936
4950
|
Note: Be careful when copying information with this technique since it is
|
|
4937
4951
|
easy to write tags which are normally considered "unsafe". For instance,
|
|
@@ -5195,18 +5209,18 @@ JSON arrays unless B<-sep> is used. By default XMP structures are flattened
|
|
|
5195
5209
|
into individual tags in the JSON output, but the original structure may be
|
|
5196
5210
|
preserved with the B<-struct> option (this also causes all list-type XMP
|
|
5197
5211
|
tags to be output as JSON arrays, otherwise single-item lists would be
|
|
5198
|
-
output as simple strings). The B<-a> option is implied
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5212
|
+
output as simple strings). The B<-a> option is implied when B<-json> is
|
|
5213
|
+
used, but entries with identical JSON names are suppressed in the output.
|
|
5214
|
+
(B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
|
|
5215
|
+
the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
|
|
5216
|
+
"id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
|
|
5217
|
+
numerical value is different from the converted "val". The B<-b> option may
|
|
5218
|
+
be added to output binary data, encoded in base64 if necessary (indicated by
|
|
5219
|
+
ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
|
|
5220
|
+
to include tag table information (see B<-t> for details). The JSON output
|
|
5221
|
+
is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
|
|
5222
|
+
UTF-8 validation is disabled if a character set other than UTF-8 is
|
|
5223
|
+
specified.
|
|
5210
5224
|
|
|
5211
5225
|
If I<JSONFILE> is specified, the file is imported and the tag definitions
|
|
5212
5226
|
from the file are used to set tag values on a per-file basis. The special
|
|
@@ -5355,7 +5369,7 @@ with this command:
|
|
|
5355
5369
|
|
|
5356
5370
|
produces output like this:
|
|
5357
5371
|
|
|
5358
|
-
-- Generated by ExifTool 12.
|
|
5372
|
+
-- Generated by ExifTool 12.17 --
|
|
5359
5373
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5360
5374
|
(f/5.6, 1/60s, ISO 100)
|
|
5361
5375
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5515,18 +5529,18 @@ Notes:
|
|
|
5515
5529
|
argument like C<%d%f.txt> is written as C<%%d%%f.txt>.
|
|
5516
5530
|
|
|
5517
5531
|
2) If the argument for B<-w> does not contain a valid format code (eg. %f),
|
|
5518
|
-
then it is interpreted as a file extension
|
|
5519
|
-
|
|
5520
|
-
multiple source files is typically done by shell redirection, ie)
|
|
5532
|
+
then it is interpreted as a file extension, but there are three different
|
|
5533
|
+
ways to create a single output file from multiple source files:
|
|
5521
5534
|
|
|
5535
|
+
# 1. Shell redirection
|
|
5522
5536
|
exiftool FILE1 FILE2 ... > out.txt
|
|
5523
5537
|
|
|
5524
|
-
|
|
5525
|
-
be interpreted as a format string, and the same result may be obtained
|
|
5526
|
-
without the use of shell redirection:
|
|
5527
|
-
|
|
5538
|
+
# 2. With the -w option and a zero-width format code
|
|
5528
5539
|
exiftool -w+! %0fout.txt FILE1 FILE2 ...
|
|
5529
5540
|
|
|
5541
|
+
# 3. With the -W option (see the -W option below)
|
|
5542
|
+
exiftool -W+! out.txt FILE1 FILE2 ...
|
|
5543
|
+
|
|
5530
5544
|
Advanced features:
|
|
5531
5545
|
|
|
5532
5546
|
A substring of the original file name, directory or extension may be taken
|
|
@@ -5694,7 +5708,7 @@ when copying.
|
|
|
5694
5708
|
|
|
5695
5709
|
Extract existing tags only -- don't generate composite tags.
|
|
5696
5710
|
|
|
5697
|
-
=item B<-ee> (B<-extractEmbedded>)
|
|
5711
|
+
=item B<-ee>[I<NUM>] (B<-extractEmbedded>)
|
|
5698
5712
|
|
|
5699
5713
|
Extract information from embedded documents in EPS files, embedded EPS
|
|
5700
5714
|
information and JPEG and Jpeg2000 images in PDF files, embedded MPF images
|
|
@@ -5712,6 +5726,11 @@ document as if it were a separate input file. This allows, for example,
|
|
|
5712
5726
|
generation of GPS track logs from timed metadata in videos. See
|
|
5713
5727
|
L<https://exiftool.org/geotag.html#Inverse> for examples.
|
|
5714
5728
|
|
|
5729
|
+
Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
|
|
5730
|
+
until the first Supplemental Enhancement Information (SEI) message is
|
|
5731
|
+
decoded, or 3 to parse the entire H624 stream and decode all SEI
|
|
5732
|
+
information.
|
|
5733
|
+
|
|
5715
5734
|
=item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
|
|
5716
5735
|
|
|
5717
5736
|
Process only files with (B<-ext>) or without (B<--ext>) a specified
|
|
@@ -5800,7 +5819,9 @@ name, or a full path. If a full path is specified, it must match the
|
|
|
5800
5819
|
Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
|
|
5801
5820
|
more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
|
|
5802
5821
|
sensitive) may be specified to ignore symbolic links when the B<-r> option
|
|
5803
|
-
is used.
|
|
5822
|
+
is used. As well, a value of C<HIDDEN> (case sensitive) may be used to
|
|
5823
|
+
ignore files with names that start with a "." (ie. hidden files on Unix
|
|
5824
|
+
systems) when scanning a directory.
|
|
5804
5825
|
|
|
5805
5826
|
=item B<-if>[I<NUM>] I<EXPR>
|
|
5806
5827
|
|
|
@@ -6359,10 +6380,10 @@ name and directory.
|
|
|
6359
6380
|
|
|
6360
6381
|
=item B<-stay_open> I<FLAG>
|
|
6361
6382
|
|
|
6362
|
-
If I<FLAG> is C<1> or C<True
|
|
6363
|
-
I<ARGFILE> even after reaching the end of file. This
|
|
6364
|
-
applications to pre-load exiftool, thus avoiding the
|
|
6365
|
-
exiftool for each command. The procedure is as follows:
|
|
6383
|
+
If I<FLAG> is C<1> or C<True> (case insensitive), causes exiftool keep
|
|
6384
|
+
reading from the B<-@> I<ARGFILE> even after reaching the end of file. This
|
|
6385
|
+
feature allows calling applications to pre-load exiftool, thus avoiding the
|
|
6386
|
+
overhead of loading exiftool for each command. The procedure is as follows:
|
|
6366
6387
|
|
|
6367
6388
|
1) Execute C<exiftool -stay_open True -@ I<ARGFILE>>, where I<ARGFILE> is the
|
|
6368
6389
|
name of an existing (possibly empty) argument file or C<-> to pipe arguments
|
|
@@ -6385,8 +6406,9 @@ signals back to your application.)
|
|
|
6385
6406
|
|
|
6386
6407
|
4) Repeat steps 2 and 3 for each command.
|
|
6387
6408
|
|
|
6388
|
-
5) Write C<-stay_open\nFalse\n> to I<ARGFILE> when
|
|
6389
|
-
exiftool to process any remaining command-line
|
|
6409
|
+
5) Write C<-stay_open\nFalse\n> (or C<-stay_open\n0\n>) to I<ARGFILE> when
|
|
6410
|
+
done. This will cause exiftool to process any remaining command-line
|
|
6411
|
+
arguments then exit normally.
|
|
6390
6412
|
|
|
6391
6413
|
The input I<ARGFILE> may be changed at any time before step 5 above by
|
|
6392
6414
|
writing the following lines to the currently open I<ARGFILE>:
|
|
@@ -6414,10 +6436,11 @@ an interface to the API UserParam option (see the
|
|
|
6414
6436
|
L<Image::ExifTool Options|Image::ExifTool/Options> documentation), and
|
|
6415
6437
|
provides a method to access user-defined parameters in arguments to the
|
|
6416
6438
|
B<-if> and B<-p> options as if they were any other tag. Appending a hash
|
|
6417
|
-
tag (C<#>) to I<PARAM> also causes the
|
|
6418
|
-
tag
|
|
6419
|
-
value is set to 1 if I<=VAL> is
|
|
6420
|
-
|
|
6439
|
+
tag (C<#>) to I<PARAM> (eg. C<-userParam MyTag#=yes>) also causes the
|
|
6440
|
+
parameter to be extracted as a normal tag in the UserParam group. Similar
|
|
6441
|
+
to the B<-api> option, the parameter value is set to 1 if I<=VAL> is
|
|
6442
|
+
omitted, undef if just I<VAL> is omitted with C<=>, or an empty string if
|
|
6443
|
+
I<VAL> is omitted with C<^=>.
|
|
6421
6444
|
|
|
6422
6445
|
exiftool -p '$test from $filename' -userparam test=Hello FILE
|
|
6423
6446
|
|
|
@@ -6487,9 +6510,9 @@ For example, the following command may be used to remove duplicate Keywords:
|
|
|
6487
6510
|
The B<-sep> option is necessary to split the string back into individual
|
|
6488
6511
|
list items when writing to a list-type tag.
|
|
6489
6512
|
|
|
6490
|
-
An optional flag argument may be set to 1 to cause C<NoDups> to
|
|
6491
|
-
if no duplicates existed, thus preventing the file from being
|
|
6492
|
-
unnecessarily:
|
|
6513
|
+
An optional flag argument may be set to 1 to cause C<NoDups> to set C<$_> to
|
|
6514
|
+
undef if no duplicates existed, thus preventing the file from being
|
|
6515
|
+
rewritten unnecessarily:
|
|
6493
6516
|
|
|
6494
6517
|
exiftool -sep '##' '-keywords<${keywords;NoDups(1)}' a.jpg
|
|
6495
6518
|
|
|
@@ -7127,6 +7150,13 @@ flexibility of ExifTool.)
|
|
|
7127
7150
|
|
|
7128
7151
|
=back
|
|
7129
7152
|
|
|
7153
|
+
=head1 INTERRUPTING EXIFTOOL
|
|
7154
|
+
|
|
7155
|
+
Interrupting exiftool with a CTRL-C or SIGINT will not result in partially
|
|
7156
|
+
written files or temporary files remaining on the hard disk. The exiftool
|
|
7157
|
+
application traps SIGINT and defers it until the end of critical processes
|
|
7158
|
+
if necessary, then does a proper cleanup before exiting.
|
|
7159
|
+
|
|
7130
7160
|
=head1 EXIT STATUS
|
|
7131
7161
|
|
|
7132
7162
|
The exiftool application exits with a status of 0 on success, or 1 if an
|
|
@@ -7135,7 +7165,7 @@ the commands if B<-execute> was used).
|
|
|
7135
7165
|
|
|
7136
7166
|
=head1 AUTHOR
|
|
7137
7167
|
|
|
7138
|
-
Copyright 2003-
|
|
7168
|
+
Copyright 2003-2021, Phil Harvey
|
|
7139
7169
|
|
|
7140
7170
|
This is free software; you can redistribute it and/or modify it under the
|
|
7141
7171
|
same terms as Perl itself.
|