exiftool_vendored 12.12.0 → 12.17.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +73 -3
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/exiftool +87 -57
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool.pm +36 -3
  11. data/bin/lib/Image/ExifTool.pod +12 -8
  12. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  14. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  16. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  17. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  19. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  24. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -7
  25. data/bin/lib/Image/ExifTool/Canon.pm +3 -2
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +20 -2
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +4 -4
  36. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  40. data/bin/lib/Image/ExifTool/Exif.pm +45 -16
  41. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  42. data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  43. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  44. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  45. data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  47. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  49. data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  50. data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -2
  51. data/bin/lib/Image/ExifTool/GE.pm +1 -1
  52. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  53. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  54. data/bin/lib/Image/ExifTool/GPS.pm +6 -6
  55. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  56. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  57. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  58. data/bin/lib/Image/ExifTool/H264.pm +21 -6
  59. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  60. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  61. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  62. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  63. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  64. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  67. data/bin/lib/Image/ExifTool/Import.pm +1 -1
  68. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  69. data/bin/lib/Image/ExifTool/JPEG.pm +24 -2
  70. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  71. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  72. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  73. data/bin/lib/Image/ExifTool/Jpeg2000.pm +9 -4
  74. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  75. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  76. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  79. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  96. data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  97. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  98. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  99. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  100. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  101. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  102. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  103. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  104. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  105. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  109. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  110. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  111. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  113. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  114. data/bin/lib/Image/ExifTool/Nikon.pm +315 -36
  115. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  116. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  117. data/bin/lib/Image/ExifTool/NikonSettings.pm +2013 -0
  118. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  119. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  120. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  121. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  122. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  124. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  125. data/bin/lib/Image/ExifTool/PDF.pm +10 -2
  126. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  127. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  128. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  129. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  130. data/bin/lib/Image/ExifTool/PNG.pm +12 -4
  131. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  132. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  134. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  135. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  136. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  137. data/bin/lib/Image/ExifTool/Pentax.pm +3 -2
  138. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  140. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  141. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  144. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  145. data/bin/lib/Image/ExifTool/QuickTime.pm +20 -14
  146. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +46 -7
  147. data/bin/lib/Image/ExifTool/README +5 -4
  148. data/bin/lib/Image/ExifTool/RIFF.pm +85 -7
  149. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  150. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  151. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  152. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  153. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  154. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  156. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  157. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  158. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  159. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  160. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  161. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  162. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  163. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Sony.pm +6 -2
  165. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  167. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  168. data/bin/lib/Image/ExifTool/TagLookup.pm +3985 -3807
  169. data/bin/lib/Image/ExifTool/TagNames.pod +432 -21
  170. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  174. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  175. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  176. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  177. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  178. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  179. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  180. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  181. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  182. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  183. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  184. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  185. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
  186. data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -7
  187. data/bin/lib/Image/ExifTool/Writer.pl +32 -18
  188. data/bin/lib/Image/ExifTool/XMP.pm +44 -9
  189. data/bin/lib/Image/ExifTool/XMP2.pl +5 -1
  190. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  191. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  192. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  193. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  194. data/bin/perl-Image-ExifTool.spec +1 -1
  195. data/lib/exiftool_vendored/version.rb +1 -1
  196. metadata +9 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb85849da2fdeb7f34dcbd03ba9548e5744c692f93d8163cf3029a5189f75d2c
4
- data.tar.gz: 0fd722ec987c17f4449f7eb9d18101286ceff673134d784833acd811cd376a09
3
+ metadata.gz: 282998369bb9233d2f181df0f59f292915623e97fba11993c01c310e533eb29f
4
+ data.tar.gz: fd371cfbcd5c85f4a8ab489cd9ee53f0a24dd3ac69a598d5d0a35a47a05853a9
5
5
  SHA512:
6
- metadata.gz: 8273b84dd45c1b266eec1a0c13c14e0c60e6f68c3bbd76fce169002a9983606b76f70e636199b751dda2f8f6992ea39b164f4d24c29849fa494b30b4ad14b1fa
7
- data.tar.gz: a65c0a97fdbc17365a46bd7605b36e72557004549f92ba9fc1f02d7358899643932125a499d65daa88eddebbf9c7a8d343c037b70baa4ff30802c97dfb66efd6
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.00. (Other versions are
8
- considered development releases, and are not uploaded to CPAN.)
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
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.12"
50
+ "version" : "12.17"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.12
31
+ version: 12.17
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.12.tar.gz | tar -xf -
110
- cd Image-ExifTool-12.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-2020, Phil Harvey
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.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 "\n", @echo3, "\n";
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 "\n", @echo4, "\n";
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 =~ /^(.*?) ?\(/ and defined $$info{$1} and
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 = $et->SetFileModifyDate($file,undef,'FileCreateDate');
2937
- my $r2 = $et->SetFileModifyDate($file);
2938
- my $r3 = $et->SetSystemTags($file);
2939
- my $r4 = 0;
2940
- $r4 = $et->SetFileName($file, $outfile) if defined $outfile;
2941
- if ($r1 > 0 or $r2 > 0 or $r3 > 0 or $r4 > 0) {
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 ($r1 < 0 or $r2 < 0 or $r3 < 0 or $r4 < 0) {
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
- my $src = (defined $outfile and $r4 > 0) ? $outfile : $file;
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 (-extractEmbedded) Extract information from embedded files
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 "-time:all<$createdate" -wm w FILE
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 ", " dst.jpg
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 if the B<-g> or
5199
- B<-G> options are used, otherwise it is ignored and tags with identical
5200
- JSON names are suppressed. (B<-g4> may be used to ensure that all tags have
5201
- unique JSON names.) Adding the B<-D> or B<-H> option changes tag values to
5202
- JSON objects with "val" and "id" fields, and adding B<-l> adds a "desc"
5203
- field, and a "num" field if the numerical value is different from the
5204
- converted "val". The B<-b> option may be added to output binary data,
5205
- encoded in base64 if necessary (indicated by ASCII "base64:" as the first 7
5206
- bytes of the value), and B<-t> may be added to include tag table information
5207
- (see B<-t> for details). The JSON output is UTF-8 regardless of any B<-L>
5208
- or B<-charset> option setting, but the UTF-8 validation is disabled if a
5209
- character set other than UTF-8 is specified.
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.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. It is not possible to specify a
5519
- simple filename as an argument -- creating a single output file from
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
- But if necessary, an empty format code may be used to force the argument to
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>, causes exiftool keep reading from the B<-@>
6363
- I<ARGFILE> even after reaching the end of file. This feature allows calling
6364
- applications to pre-load exiftool, thus avoiding the overhead of loading
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 done. This will cause
6389
- exiftool to process any remaining command-line arguments then exit normally.
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 parameter to be extracted as a normal
6418
- tag (in the UserParam group). Similar to the B<-api> option, the parameter
6419
- value is set to 1 if I<=VAL> is omitted, undef if just I<VAL> is omitted
6420
- with C<=>, or an empty string if I<VAL> is omitted with C<^=>.
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 return undef
6491
- if no duplicates existed, thus preventing the file from being rewritten
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-2020, Phil Harvey
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.