exiftool_vendored 13.08.0 → 13.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +60 -2
  3. data/bin/MANIFEST +2 -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 +229 -158
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool/AAC.pm +1 -1
  11. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  12. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  14. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  16. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +10 -8
  18. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  19. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -6
  24. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Canon.pm +8 -4
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  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 +96 -45
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +1 -1
  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 +123 -32
  40. data/bin/lib/Image/ExifTool/Exif.pm +7 -4
  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 +1 -1
  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/GM.pm +1 -1
  55. data/bin/lib/Image/ExifTool/GPS.pm +1 -1
  56. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  57. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  58. data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
  59. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  60. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  61. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  62. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  63. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  64. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ICC_Profile.pm +81 -2
  66. data/bin/lib/Image/ExifTool/ICO.pm +1 -1
  67. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  68. data/bin/lib/Image/ExifTool/IPTC.pm +8 -5
  69. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  70. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  71. data/bin/lib/Image/ExifTool/Import.pm +5 -4
  72. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  73. data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
  74. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  75. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  76. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  77. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Jpeg2000.pm +3 -2
  79. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  80. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  81. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  82. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  96. data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  97. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  98. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  99. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  100. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  101. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  102. data/bin/lib/Image/ExifTool/LigoGPS.pm +408 -0
  103. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  104. data/bin/lib/Image/ExifTool/M2TS.pm +22 -13
  105. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  107. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MISB.pm +1 -1
  109. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  110. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  111. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  113. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  114. data/bin/lib/Image/ExifTool/MRC.pm +1 -1
  115. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  116. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  117. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  118. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  119. data/bin/lib/Image/ExifTool/Matroska.pm +12 -4
  120. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  121. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  122. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  124. data/bin/lib/Image/ExifTool/Nikon.pm +164 -35
  125. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  126. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  127. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  128. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  129. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  130. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  131. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  132. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  134. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  135. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  136. data/bin/lib/Image/ExifTool/PDF.pm +1 -1
  137. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  138. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
  140. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  141. data/bin/lib/Image/ExifTool/PNG.pm +3 -2
  142. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  144. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  145. data/bin/lib/Image/ExifTool/Panasonic.pm +20 -2
  146. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  147. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  148. data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  149. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  150. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  151. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  152. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  153. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  154. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Protobuf.pm +24 -14
  156. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  157. data/bin/lib/Image/ExifTool/QuickTime.pm +94 -26
  158. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -302
  159. data/bin/lib/Image/ExifTool/README +4 -0
  160. data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  161. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  162. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  163. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  165. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  167. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  168. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  169. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  170. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  173. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  174. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  175. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  176. data/bin/lib/Image/ExifTool/Sony.pm +1 -1
  177. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  178. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  179. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  180. data/bin/lib/Image/ExifTool/TagLookup.pm +14 -5
  181. data/bin/lib/Image/ExifTool/TagNames.pod +106 -34
  182. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  183. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  184. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  185. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  186. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  187. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  188. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  189. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  190. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  191. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  192. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  193. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  194. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  195. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  196. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  197. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  198. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +48 -12
  199. data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  200. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  201. data/bin/lib/Image/ExifTool/Writer.pl +25 -13
  202. data/bin/lib/Image/ExifTool/XISF.pm +1 -1
  203. data/bin/lib/Image/ExifTool/XMP.pm +1 -1
  204. data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
  205. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  206. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  207. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  208. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  209. data/bin/lib/Image/ExifTool.pm +20 -11
  210. data/bin/lib/Image/ExifTool.pod +55 -40
  211. data/bin/perl-Image-ExifTool.spec +1 -1
  212. data/lib/exiftool_vendored/version.rb +1 -1
  213. metadata +3 -2
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.08';
14
+ my $version = '13.12';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -641,7 +641,7 @@ for (;;) {
641
641
  }
642
642
  # require MWG module if used in any argument
643
643
  # (note: doesn't cover the -p option because these tags will be parsed on the 2nd pass)
644
- $useMWG = 1 if not $useMWG and grep /^mwg:/i, @tags, @requestTags;
644
+ $useMWG = 1 if not $useMWG and grep /^([--_0-9A-Z]+:)*1?mwg:/i, @tags, @requestTags;
645
645
  if ($useMWG) {
646
646
  require Image::ExifTool::MWG;
647
647
  Image::ExifTool::MWG::Load();
@@ -1093,7 +1093,7 @@ for (;;) {
1093
1093
  # prevent processing file unnecessarily for simple case of failed '$ok' or 'not $ok'
1094
1094
  $cond =~ /^\s*(not\s*)\$ok\s*$/i and ($1 xor $rtnValPrev) and $failCondition=1;
1095
1095
  # add to list of requested tags
1096
- push @requestTags, $cond =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g;
1096
+ push @requestTags, $cond =~ /\$\{?((?:[-_0-9A-Z]+:)*[-_0-9A-Z?*]+)/ig;
1097
1097
  push @condition, $cond;
1098
1098
  next;
1099
1099
  }
@@ -1181,7 +1181,7 @@ for (;;) {
1181
1181
  if ($pass) {
1182
1182
  LoadPrintFormat($fmt, $1 || $binaryOutput);
1183
1183
  # load MWG module now if necessary
1184
- if (not $useMWG and grep /^mwg:/i, @requestTags) {
1184
+ if (not $useMWG and grep /^([-_0-9A-Z]+:)*1?mwg:/i, @requestTags) {
1185
1185
  $useMWG = 1;
1186
1186
  require Image::ExifTool::MWG;
1187
1187
  Image::ExifTool::MWG::Load();
@@ -1380,11 +1380,11 @@ for (;;) {
1380
1380
  push @newValues, { SaveCount => ++$saveCount };
1381
1381
  }
1382
1382
  push @newValues, $_;
1383
- if (/^mwg:/i) {
1383
+ if (/^([-_0-9A-Z]+:)*1?mwg:/i) {
1384
1384
  $useMWG = 1;
1385
- } elsif (/^([-\w]+:)*(filename|directory|testname)\b/i) {
1385
+ } elsif (/^([-_0-9A-Z]+:)*(filename|directory|testname)\b/i) {
1386
1386
  $doSetFileName = 1;
1387
- } elsif (/^([-\w]+:)*(geotag|geotime|geosync|geolocate)\b/i) {
1387
+ } elsif (/^([-_0-9A-Z]+:)*(geotag|geotime|geosync|geolocate)\b/i) {
1388
1388
  if (lc $2 eq 'geotime') {
1389
1389
  $addGeotime = '';
1390
1390
  } else {
@@ -1402,25 +1402,23 @@ for (;;) {
1402
1402
  if ($setTagsFile) {
1403
1403
  push @{$setTags{$setTagsFile}}, $_;
1404
1404
  if ($1 eq '>') {
1405
- $useMWG = 1 if /^(.*>\s*)?mwg:/si;
1405
+ $useMWG = 1 if /^(.*>\s*)?([-_0-9A-Z]+:)*1?mwg:/si;
1406
1406
  if (/\b(filename|directory|testname)#?$/i) {
1407
1407
  $doSetFileName = 1;
1408
1408
  } elsif (/\bgeotime#?$/i) {
1409
1409
  $addGeotime = '';
1410
1410
  }
1411
1411
  } else {
1412
- $useMWG = 1 if /^([^<]+<\s*(.*\$\{?)?)?mwg:/si;
1413
- if (/^([-\w]+:)*(filename|directory|testname)\b/i) {
1412
+ $useMWG = 1 if /^([^<]+<\s*(.*\$\{?)?)?([-_0-9A-Z]+:)*1?mwg:/si;
1413
+ if (/^([-_0-9A-Z]+:)*(filename|directory|testname)\b/i) {
1414
1414
  $doSetFileName = 1;
1415
- } elsif (/^([-\w]+:)*geotime\b/i) {
1415
+ } elsif (/^([-_0-9A-Z]+:)*geotime\b/i) {
1416
1416
  $addGeotime = '';
1417
1417
  }
1418
1418
  }
1419
1419
  } else {
1420
1420
  my $lst = s/^-// ? \@exclude : \@tags;
1421
- unless (/^([-\w*]+:)*([-\w*?]+)#?$/) {
1422
- Warn(qq(Invalid TAG name: "$_"\n));
1423
- }
1421
+ Warn(qq(Invalid TAG name: "$_"\n)) unless /^([-_0-9A-Z*]+:)*([-_0-9A-Z*?]+)#?$/i;
1424
1422
  push @$lst, $_; # (push everything for backward compatibility)
1425
1423
  }
1426
1424
  }
@@ -1763,9 +1761,11 @@ if (@newValues) {
1763
1761
  $wrn and Warning($mt, $wrn);
1764
1762
  }
1765
1763
  # exclude specified tags
1766
- foreach (@exclude) {
1767
- $mt->SetNewValue($_, undef, Replace => 2);
1768
- $needSave = 1;
1764
+ unless ($csv) {
1765
+ foreach (@exclude) {
1766
+ $mt->SetNewValue($_, undef, Replace => 2);
1767
+ $needSave = 1;
1768
+ }
1769
1769
  }
1770
1770
  unless ($isWriting or $outOpt or @tags) {
1771
1771
  Warn "Nothing to do.\n";
@@ -2296,6 +2296,10 @@ sub GetImageInfo($$)
2296
2296
  $et->Options(Duplicates => 1, Sort => "Group$showGroup", Verbose => 0);
2297
2297
  $et2 = Image::ExifTool->new;
2298
2298
  $et2->Options(%{$$et{OPTIONS}});
2299
+ # must set list options specifically because they may have been
2300
+ # set incorrectly from deprecated List settings
2301
+ $et2->Options(ListSep => $$et{OPTIONS}{ListSep});
2302
+ $et2->Options(ListSplit => $$et{OPTIONS}{ListSplit});
2299
2303
  @found2 = @foundTags;
2300
2304
  $info2 = $et2->ImageInfo($file2, \@found2);
2301
2305
  } else {
@@ -2352,14 +2356,15 @@ sub GetImageInfo($$)
2352
2356
 
2353
2357
  # print differences if requested
2354
2358
  if (defined $diff) {
2355
- my (%done2, $wasDiff, @diffs, @groupTags2);
2359
+ my (%done, %done2, $wasDiff, @diffs, @groupTags2);
2356
2360
  my $v = $verbose || 0;
2357
2361
  print $fp "======== diff < $file > $file2\n";
2358
2362
  my ($g2, $same) = (0, 0); # start with $g2 false, but not equal to '' to avoid infinite loop
2359
2363
  for (;;) {
2364
+ my ($g, $tag2, $i, $key, @dupl, $val2, $t2, $equal, %used);
2360
2365
  my $tag = shift @foundTags;
2361
- my ($g, $tag2);
2362
2366
  if (defined $tag) {
2367
+ $done{$tag} = 1;
2363
2368
  $g = $et->GetGroup($tag, $showGroup);
2364
2369
  } else {
2365
2370
  for (;;) {
@@ -2369,7 +2374,6 @@ sub GetImageInfo($$)
2369
2374
  }
2370
2375
  }
2371
2376
  if ($g ne $g2) {
2372
- my $t2;
2373
2377
  # add any outstanding tags from diff file not yet handled in previous group ($g2)
2374
2378
  foreach $t2 (@groupTags2) {
2375
2379
  next if $done2{$t2};
@@ -2408,33 +2412,50 @@ sub GetImageInfo($$)
2408
2412
  my $val = $et->GetValue($tag);
2409
2413
  next unless defined $val; # (just in case)
2410
2414
  my $name = GetTagName($tag);
2411
- # get matching tag key from diff file
2415
+ my $desc = $outFormat < 1 ? $et->GetDescription($tag) : $name;
2416
+ # get matching tag key(s) from diff file
2412
2417
  my @tags2 = grep /^$name( |$)/, @groupTags2;
2413
- $name = $et->GetDescription($tag) if $outFormat < 1;
2414
- my ($val2, $t2);
2415
- foreach $t2 (@tags2) {
2418
+ T2: foreach $t2 (@tags2) {
2416
2419
  next if $done2{$t2};
2417
2420
  $tag2 = $t2;
2418
2421
  $val2 = $et2->GetValue($t2);
2422
+ next unless defined $val2;
2423
+ IsEqual($val, $val2) and $equal = 1, last;
2424
+ # look ahead for upcoming duplicate tags in this group to see
2425
+ # if any would later match this value (and skip those for now)
2426
+ if ($$et{DUPL_TAG}{$name} and not @dupl) {
2427
+ for ($i=0, $key=$name; $i<=$$et{DUPL_TAG}{$name}; ++$i, $key="$name ($i)") {
2428
+ push @dupl, $key unless $done{$key} or $g ne $et->GetGroup($key, $showGroup);
2429
+ }
2430
+ @dupl = sort { $$et{FILE_ORDER}{$a} <=> $$et{FILE_ORDER}{$b} } @dupl if @dupl > 1;
2431
+ }
2432
+ foreach (@dupl) {
2433
+ next if $used{$_};
2434
+ my $v = $et->GetValue($_);
2435
+ next unless defined($v) and IsEqual($v, $val2);
2436
+ $used{$_} = 1; # would match this upcoming tag
2437
+ undef($tag2); undef($val2);
2438
+ next T2;
2439
+ }
2419
2440
  last;
2420
2441
  }
2421
- if (defined $val2 and IsEqual($val, $val2)) {
2442
+ if ($equal) {
2422
2443
  ++$same;
2423
2444
  } else {
2424
- my $len = LengthUTF8($name);
2445
+ my $len = LengthUTF8($desc);
2425
2446
  my $pad = $outFormat < 2 ? ' ' x ($len < 32 ? 32 - $len : 0) : '';
2426
2447
  if ($allGroup) {
2427
2448
  my $grp = "[$g]";
2428
2449
  $grp .= ' ' x (15 - length($grp)) if length($grp) < 15 and $outFormat < 2;
2429
- push @diffs, sprintf "< %s %s%s: %s\n", $grp, $name, $pad, Printable($val);
2450
+ push @diffs, sprintf "< %s %s%s: %s\n", $grp, $desc, $pad, Printable($val);
2430
2451
  if (defined $val2) {
2431
- $grp = ' ' x length($grp), $name = ' ' x $len if $v < 3;
2432
- push @diffs, sprintf "> %s %s%s: %s\n", $grp, $name, $pad, Printable($val2);
2452
+ $grp = ' ' x length($grp), $desc = ' ' x $len if $v < 3;
2453
+ push @diffs, sprintf "> %s %s%s: %s\n", $grp, $desc, $pad, Printable($val2);
2433
2454
  }
2434
2455
  } else {
2435
- push @diffs, sprintf "< %s%s: %s\n", $name, $pad, Printable($val);
2436
- $name = ' ' x $len if $v < 3;
2437
- push @diffs, sprintf "> %s%s %s\n", $name, $pad, Printable($val2) if defined $val2;
2456
+ push @diffs, sprintf "< %s%s: %s\n", $desc, $pad, Printable($val);
2457
+ $desc = ' ' x $len if $v < 3;
2458
+ push @diffs, sprintf "> %s%s %s\n", $desc, $pad, Printable($val2) if defined $val2;
2438
2459
  }
2439
2460
  }
2440
2461
  $done2{$tag2} = 1 if defined $tag2;
@@ -3147,7 +3168,7 @@ sub SetImageInfo($$$)
3147
3168
  next;
3148
3169
  } elsif (ref $dyFile eq 'SCALAR') {
3149
3170
  # set new values from CSV or JSON database
3150
- my ($f, $found, $tag);
3171
+ my ($f, $found, $csvTag, $tryTag, $tg);
3151
3172
  undef $evalWarning;
3152
3173
  local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
3153
3174
  # force UTF-8 if the database was JSON
@@ -3169,11 +3190,39 @@ sub SetImageInfo($$$)
3169
3190
  print $vout 'Including tags: ',join(' ',@tags),"\n" if @tags;
3170
3191
  print $vout 'Excluding tags: ',join(' ',@exclude),"\n" if @exclude;
3171
3192
  }
3172
- foreach $tag (OrderedKeys($csvInfo)) {
3173
- next if $tag =~ /\b(SourceFile|Directory|FileName)$/i; # don't write these
3174
- next if @tags and not grep /^\Q$tag\E$/i, @tags;
3175
- next if @exclude and grep /^\Q$tag\E$/i, @exclude;
3176
- my ($rtn, $wrn) = $et->SetNewValue($tag, $$csvInfo{$tag},
3193
+ my @tryTags = (@exclude, @tags); # (exclude first because it takes priority)
3194
+ foreach (@tryTags) {
3195
+ tr/-0-9a-zA-Z_:#?*//dc; # remove illegal characters
3196
+ s/(^|:)(all:)+/$1/ig; # remove 'all' group names
3197
+ s/(^|:)all(#?)$/$1*$2/i; # convert 'all' tag name to '*'
3198
+ tr/?/./; s/\*/.*/g; # convert wildcards for regex
3199
+ }
3200
+ foreach $csvTag (OrderedKeys($csvInfo)) {
3201
+ # don't write SourceFile, Directory or FileName
3202
+ next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
3203
+ if (@tryTags) {
3204
+ my ($i, $tryGrp, $matched);
3205
+ TryMatch: for ($i=0; $i<@tryTags; ++$i) {
3206
+ $tryTag = $tryTags[$i];
3207
+ if ($tryTag =~ /:/) {
3208
+ next unless $csvTag =~ /:/; # db entry must also specify group
3209
+ my @csvGrps = split /:/, $csvTag;
3210
+ my @tryGrps = split /:/, $tryTag;
3211
+ my $tryName = pop @tryGrps;
3212
+ next unless pop(@csvGrps) =~ /^$tryName$/i; # tag name must match
3213
+ foreach $tryGrp (@tryGrps) {
3214
+ # each specified group name must match db entry
3215
+ next TryMatch unless grep /^$tryGrp$/i, @csvGrps;
3216
+ }
3217
+ $matched = 1;
3218
+ last;
3219
+ }
3220
+ # no group specified, so match by tag name only
3221
+ $csvTag =~ /^([-_0-9A-Z]+:)*$tryTag$/i and $matched = 1, last;
3222
+ }
3223
+ next if $matched ? $i < @exclude : @tags;
3224
+ }
3225
+ my ($rtn, $wrn) = $et->SetNewValue($csvTag, $$csvInfo{$csvTag},
3177
3226
  Protected => 1, AddValue => $csvAdd,
3178
3227
  ProtectSaved => $csvSaveCount);
3179
3228
  $wrn and Warn "$wrn\n" if $verbose;
@@ -4363,7 +4412,7 @@ sub AddPrintFormat($)
4363
4412
  $printFmt{$type} or $printFmt{$type} = [ ];
4364
4413
  push @{$printFmt{$type}}, $expr;
4365
4414
  # add to list of requested tags
4366
- push @requestTags, $expr =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g;
4415
+ push @requestTags, $expr =~ /\$\{?((?:[-_0-9A-Z]+:)*[-_0-9A-Z?*]+)/ig;
4367
4416
  $printFmt{SetTags} = 1 if $expr =~ /\bSetTags\b/;
4368
4417
  }
4369
4418
 
@@ -4718,7 +4767,7 @@ sub FilterArgfileLine($)
4718
4767
  $arg =~ s/^\s+//; # remove leading white space
4719
4768
  $arg =~ s/[\x0d\x0a]+$//s; # remove trailing newline
4720
4769
  # remove white space before, and single space after '=', '+=', '-=' or '<='
4721
- $arg =~ s/^(-[-:\w]+#?)\s*([-+<]?=) ?/$1$2/;
4770
+ $arg =~ s/^(-[-_0-9A-Z:]+#?)\s*([-+<]?=) ?/$1$2/i;
4722
4771
  return undef if $arg eq '';
4723
4772
  }
4724
4773
  return $arg;
@@ -5598,9 +5647,13 @@ deleted). Also, FileName and Directory columns are ignored if they exist
5598
5647
  all other columns are imported. To force a tag to be deleted, use the B<-f>
5599
5648
  option and set the value to "-" in the CSV file (or to the MissingTagValue
5600
5649
  if this API option was used). Multiple databases may be imported in a
5601
- single command. Specific tags may be imported from the database by adding
5602
- B<->I<TAG> options to the command, or excluded with B<-->I<TAG> options.
5603
- If no tags are specified, then all except FileName and Directory are used.
5650
+ single command.
5651
+
5652
+ Specific tags may be imported from the CSV database by adding B<->I<TAG>
5653
+ options to the command, or excluded with B<-->I<TAG>, with exclusions taking
5654
+ priority. Group names and wildcards are allowed. If no tags are specified,
5655
+ then all except FileName and Directory are used. Tags are imported in the
5656
+ same order as the database entries.
5604
5657
 
5605
5658
  When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
5606
5659
  tag headings. If the B<-a> option is used to allow duplicate tag names, the
@@ -5644,16 +5697,29 @@ in the delimiter. Default is ','.
5644
5697
 
5645
5698
  Set the format for date/time tag values. The I<FMT> string may contain
5646
5699
  formatting codes beginning with a percent character (C<%>) to represent the
5647
- various components of a date/time value. The specifics of the I<FMT> syntax
5648
- are system dependent -- consult the C<strftime> man page on your system for
5649
- details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This
5650
- option has no effect on date-only or time-only tags and ignores timezone
5651
- information if present. ExifTool adds a C<%f> format code to represent
5652
- fractional seconds, and supports an optional width to specify the number of
5653
- digits after the decimal point (eg. C<%3f> would give something like
5654
- C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
5655
- C<437>). Only one B<-d> option may be used per command. Requires
5656
- POSIX::strptime or Time::Piece for the inversion conversion when writing.
5700
+ various components of a date/time value. ExifTool implements 3 format codes
5701
+ internally (see below), but other format codes are system dependent --
5702
+ consult the C<strftime> man page on your system for details. The default
5703
+ format is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on
5704
+ date-only or time-only tags. Requires POSIX::strptime or Time::Piece for
5705
+ the inversion conversion when writing. Only one B<-d> option may be used
5706
+ per command.
5707
+
5708
+ Additional format codes implemented internally by ExifTool:
5709
+
5710
+ 1) C<%z> represents the time zone in "+/-HHMM" format. Adding a colon (ie.
5711
+ C<%:z>) adds a colon separator (eg. "-05:00"). If the date/time value
5712
+ doesn't contain a time zone then C<%z> gives the system time zone for the
5713
+ specified date/time value.
5714
+
5715
+ 2) C<%f> represents fractional seconds, and supports an optional width to
5716
+ specify the number of digits after the decimal point (eg. C<%3f> would give
5717
+ something like ".437"). Adding a minus sign drops the decimal point (eg.
5718
+ C<%-3f> would give "437").
5719
+
5720
+ 3) C<%s> represents the number of seconds since 00:00 UTC Jan 1, 1970,
5721
+ taking into account the specified time zone (or system time zone if not
5722
+ specified).
5657
5723
 
5658
5724
  =item B<-D> (B<-decimal>)
5659
5725
 
@@ -5770,9 +5836,13 @@ that options exporting JSON objects instead of simple values are not
5770
5836
  compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
5771
5837
  or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
5772
5838
  tag names in the input JSON file may be suffixed with a C<#> to disable
5773
- print conversion. Specific tags may be imported from the database by adding
5774
- B<->I<TAG> options to the command, or excluded with B<-->I<TAG> options.
5775
- If no tags are specified, then all except FileName and Directory are used.
5839
+ print conversion.
5840
+
5841
+ Specific tags may be imported from the JSON database by adding B<->I<TAG>
5842
+ options to the command, or excluded with B<-->I<TAG>, with exclusions taking
5843
+ priority. Group names and wildcards are allowed. If no tags are specified,
5844
+ then all except FileName and Directory are used. Tags are imported in the
5845
+ same order as the database entries.
5776
5846
 
5777
5847
  Unlike CSV import, empty values are not ignored, and will cause an empty
5778
5848
  value to be written if supported by the specific metadata type. Tags are
@@ -5913,7 +5983,7 @@ with this command:
5913
5983
 
5914
5984
  produces output like this:
5915
5985
 
5916
- -- Generated by ExifTool 13.08 --
5986
+ -- Generated by ExifTool 13.12 --
5917
5987
  File: a.jpg - 2003:10:31 15:44:19
5918
5988
  (f/5.6, 1/60s, ISO 100)
5919
5989
  File: b.jpg - 2006:05:23 11:57:38
@@ -6765,9 +6835,10 @@ System tags:
6765
6835
  The B<-g> and B<-G> options may be used to organize the output by the
6766
6836
  specified family of groups, with B<-G1> being the default. The B<-a> option
6767
6837
  is implied. Adding B<-v> includes a count of the number of tags that are
6768
- the same in each group. The following text formatting options are valid
6769
- when B<-diff> is used: B<-c>, B<-charset>, B<-d>, B<-E>, B<-ec>, B<-ex>,
6770
- B<-L>, B<-lang>, B<-n>, B<-s>, B<-sep>, B<-struct> and B<-w>.
6838
+ the same in each group, and B<-v2> also indicates when zero tags were the
6839
+ same. The following text formatting options are valid when B<-diff> is
6840
+ used: B<-c>, B<-charset>, B<-d>, B<-E>, B<-ec>, B<-ex>, B<-L>, B<-lang>,
6841
+ B<-n>, B<-s>, B<-sep>, B<-struct> and B<-w>.
6771
6842
 
6772
6843
  =item B<-geotag> I<TRKFILE>
6773
6844
 
@@ -7268,13 +7339,13 @@ avoid processing hidden files (provided Win32API::File is available):
7268
7339
  B<Note>: Beware when cutting and pasting these examples into your terminal!
7269
7340
  Some characters such as single and double quotes and hyphens may have been
7270
7341
  changed into similar-looking yet functionally-different characters by the
7271
- text formatter used to display this documentation. Also note that Windows
7272
- users must use double quotes instead of single quotes as below around
7273
- arguments containing special characters.
7342
+ text formatter used to display this documentation. Also note that in the
7343
+ Windows cmd shell double quotes must be used instead of the single quotes
7344
+ used in the examples.
7274
7345
 
7275
7346
  =over 5
7276
7347
 
7277
- =item exiftool -a -u -g1 a.jpg
7348
+ =item C<exiftool -a -u -g1 a.jpg>
7278
7349
 
7279
7350
  Print all meta information in an image, including duplicate and unknown
7280
7351
  tags, sorted by group (for family 1). For performance reasons, this command
@@ -7283,89 +7354,89 @@ metadata extracted by external utilities, and metadata requiring excessive
7283
7354
  processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
7284
7355
  to the command to extract absolutely everything available.
7285
7356
 
7286
- =item exiftool -common dir
7357
+ =item C<exiftool -common dir>
7287
7358
 
7288
7359
  Print common meta information for all images in C<dir>. C<-common> is a
7289
7360
  L<shortcut tag|Image::ExifTool::Shortcuts> representing common EXIF meta
7290
7361
  information.
7291
7362
 
7292
- =item exiftool -T -createdate -aperture -shutterspeed -iso dir > out.txt
7363
+ =item C<exiftool -T -createdate -aperture -shutterspeed -iso dir E<gt> out.txt>
7293
7364
 
7294
7365
  List specified meta information in tab-delimited column form for all images
7295
7366
  in C<dir> to an output text file named "out.txt".
7296
7367
 
7297
- =item exiftool -s -ImageSize -ExposureTime b.jpg
7368
+ =item C<exiftool -s -ImageSize -ExposureTime b.jpg>
7298
7369
 
7299
7370
  Print ImageSize and ExposureTime tag names and values.
7300
7371
 
7301
- =item exiftool -l -canon c.jpg d.jpg
7372
+ =item C<exiftool -l -canon c.jpg d.jpg>
7302
7373
 
7303
7374
  Print standard Canon information from two image files.
7304
7375
 
7305
- =item exiftool -r -w .txt -common pictures
7376
+ =item C<exiftool -r -w .txt -common pictures>
7306
7377
 
7307
7378
  Recursively extract common meta information from files in C<pictures>
7308
7379
  directory, writing text output to C<.txt> files with the same names.
7309
7380
 
7310
- =item exiftool -b -ThumbnailImage image.jpg > thumbnail.jpg
7381
+ =item C<exiftool -b -ThumbnailImage image.jpg E<gt> thumbnail.jpg>
7311
7382
 
7312
7383
  Save thumbnail image from C<image.jpg> to a file called C<thumbnail.jpg>.
7313
7384
 
7314
- =item exiftool -b -JpgFromRaw -w _JFR.JPG -ext NEF -r .
7385
+ =item C<exiftool -b -JpgFromRaw -w _JFR.JPG -ext NEF -r .>
7315
7386
 
7316
7387
  Recursively extract JPG image from all Nikon NEF files in the current
7317
7388
  directory, adding C<_JFR.JPG> for the name of the output JPG files.
7318
7389
 
7319
- =item exiftool -a -b -W %d%f_%t%-c.%s -preview:all dir
7390
+ =item C<exiftool -a -b -W %d%f_%t%-c.%s -preview:all dir>
7320
7391
 
7321
7392
  Extract all types of preview images (ThumbnailImage, PreviewImage,
7322
7393
  JpgFromRaw, etc.) from files in directory "dir", adding the tag name to the
7323
7394
  output preview image file names.
7324
7395
 
7325
- =item exiftool -d '%r %a, %B %e, %Y' -DateTimeOriginal -S -s -ext jpg .
7396
+ =item C<exiftool -d '%r %a, %B %e, %Y' -DateTimeOriginal -S -s -ext jpg .>
7326
7397
 
7327
7398
  Print formatted date/time for all JPG files in the current directory.
7328
7399
 
7329
- =item exiftool -IFD1:XResolution -IFD1:YResolution image.jpg
7400
+ =item C<exiftool -IFD1:XResolution -IFD1:YResolution image.jpg>
7330
7401
 
7331
7402
  Extract image resolution from EXIF IFD1 information (thumbnail image IFD).
7332
7403
 
7333
- =item exiftool '-*resolution*' image.jpg
7404
+ =item C<exiftool '-*resolution*' image.jpg>
7334
7405
 
7335
7406
  Extract all tags with names containing the word "Resolution" from an image.
7336
7407
 
7337
- =item exiftool -xmp:author:all -a image.jpg
7408
+ =item C<exiftool -xmp:author:all -a image.jpg>
7338
7409
 
7339
7410
  Extract all author-related XMP information from an image.
7340
7411
 
7341
- =item exiftool -xmp -b a.jpg > out.xmp
7412
+ =item C<exiftool -xmp -b a.jpg E<gt> out.xmp>
7342
7413
 
7343
7414
  Extract complete XMP data record intact from C<a.jpg> and write it to
7344
7415
  C<out.xmp> using the special C<XMP> tag (see the Extra tags in
7345
7416
  L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
7346
7417
 
7347
- =item exiftool -p '$filename has date $dateTimeOriginal' -q -f dir
7418
+ =item C<exiftool -p '$filename has date $dateTimeOriginal' -q -f dir>
7348
7419
 
7349
7420
  Print one line of output containing the file name and DateTimeOriginal for
7350
7421
  each image in directory C<dir>.
7351
7422
 
7352
- =item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
7423
+ =item C<exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts>
7353
7424
 
7354
7425
  Extract all GPS positions from an AVCHD video.
7355
7426
 
7356
- =item exiftool -icc_profile -b -w icc image.jpg
7427
+ =item C<exiftool -icc_profile -b -w icc image.jpg>
7357
7428
 
7358
7429
  Save complete ICC_Profile from an image to an output file with the same name
7359
7430
  and an extension of C<.icc>.
7360
7431
 
7361
- =item exiftool -htmldump -w tmp/%f_%e.html t/images
7432
+ =item C<exiftool -htmldump -w tmp/%f_%e.html t/images>
7362
7433
 
7363
7434
  Generate HTML pages from a hex dump of EXIF information in all images from
7364
7435
  the C<t/images> directory. The output HTML files are written to the C<tmp>
7365
7436
  directory (which is created if it didn't exist), with names of the form
7366
7437
  'FILENAME_EXT.html'.
7367
7438
 
7368
- =item exiftool -a -b -ee -embeddedimage -W Image_%.3g3.%s file.pdf
7439
+ =item C<exiftool -a -b -ee -embeddedimage -W Image_%.3g3.%s file.pdf>
7369
7440
 
7370
7441
  Extract embedded JPG and JP2 images from a PDF file. The output images will
7371
7442
  have file names like "Image_#.jpg" or "Image_#.jp2", where "#" is the
@@ -7383,130 +7454,130 @@ be used (eg. -Comment=E<34>This is a new commentE<34>).
7383
7454
 
7384
7455
  =over 5
7385
7456
 
7386
- =item exiftool -Comment='This is a new comment' dst.jpg
7457
+ =item C<exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg>
7387
7458
 
7388
7459
  Write new comment to a JPG image (replaces any existing comment).
7389
7460
 
7390
- =item exiftool -comment= -o newdir -ext jpg .
7461
+ =item C<exiftool -comment= -o newdir -ext jpg .>
7391
7462
 
7392
7463
  Remove comment from all JPG images in the current directory, writing the
7393
7464
  modified images to a new directory.
7394
7465
 
7395
- =item exiftool -keywords=EXIF -keywords=editor dst.jpg
7466
+ =item C<exiftool -keywords=EXIF -keywords=editor dst.jpg>
7396
7467
 
7397
7468
  Replace existing keyword list with two new keywords (C<EXIF> and C<editor>).
7398
7469
 
7399
- =item exiftool -Keywords+=word -o newfile.jpg src.jpg
7470
+ =item C<exiftool -Keywords+=word -o newfile.jpg src.jpg>
7400
7471
 
7401
7472
  Copy a source image to a new file, and add a keyword (C<word>) to the
7402
7473
  current list of keywords.
7403
7474
 
7404
- =item exiftool -exposurecompensation+=-0.5 a.jpg
7475
+ =item C<exiftool -exposurecompensation+=-0.5 a.jpg>
7405
7476
 
7406
7477
  Decrement the value of ExposureCompensation by 0.5 EV. Note that += with a
7407
7478
  negative value is used for decrementing because the -= operator is used for
7408
7479
  conditional deletion (see next example).
7409
7480
 
7410
- =item exiftool -credit-=xxx dir
7481
+ =item C<exiftool -credit-=xxx dir>
7411
7482
 
7412
7483
  Delete Credit information from all files in a directory where the Credit
7413
7484
  value was C<xxx>.
7414
7485
 
7415
- =item exiftool -xmp:description-de='k&uuml;hl' -E dst.jpg
7486
+ =item C<exiftool -xmp:description-de='k&uuml;hl' -E dst.jpg>
7416
7487
 
7417
7488
  Write alternate language for XMP:Description, using HTML character escaping
7418
7489
  to input special characters.
7419
7490
 
7420
- =item exiftool -all= dst.jpg
7491
+ =item C<exiftool -all= dst.jpg>
7421
7492
 
7422
7493
  Delete all meta information from an image. Note: You should NOT do this to
7423
7494
  RAW images (except DNG) since proprietary RAW image formats often contain
7424
7495
  information in the makernotes that is necessary for converting the image.
7425
7496
 
7426
- =item exiftool -all= -comment='lonely' dst.jpg
7497
+ =item C<exiftool -all= -comment='lonely' dst.jpg>
7427
7498
 
7428
7499
  Delete all meta information from an image and add a comment back in. (Note
7429
7500
  that the order is important: C<-comment='lonely' -all=> would also delete
7430
7501
  the new comment.)
7431
7502
 
7432
- =item exiftool -all= --jfif:all dst.jpg
7503
+ =item C<exiftool -all= --jfif:all dst.jpg>
7433
7504
 
7434
7505
  Delete all meta information except JFIF group from an image.
7435
7506
 
7436
- =item exiftool -Photoshop:All= dst.jpg
7507
+ =item C<exiftool -Photoshop:All= dst.jpg>
7437
7508
 
7438
7509
  Delete Photoshop meta information from an image (note that the Photoshop
7439
7510
  information also includes IPTC).
7440
7511
 
7441
- =item exiftool -r -XMP-crss:all= DIR
7512
+ =item C<exiftool -r -XMP-crss:all= DIR>
7442
7513
 
7443
7514
  Recursively delete all XMP-crss information from images in a directory.
7444
7515
 
7445
- =item exiftool '-ThumbnailImageE<lt>=thumb.jpg' dst.jpg
7516
+ =item C<exiftool '-ThumbnailImageE<lt>=thumb.jpg' dst.jpg>
7446
7517
 
7447
7518
  Set the thumbnail image from specified file (Note: The quotes are necessary
7448
7519
  to prevent shell redirection).
7449
7520
 
7450
- =item exiftool '-JpgFromRawE<lt>=%d%f_JFR.JPG' -ext NEF -r .
7521
+ =item C<exiftool '-JpgFromRawE<lt>=%d%f_JFR.JPG' -ext NEF -r .>
7451
7522
 
7452
7523
  Recursively write JPEG images with filenames ending in C<_JFR.JPG> to the
7453
7524
  JpgFromRaw tag of like-named files with extension C<.NEF> in the current
7454
7525
  directory. (This is the inverse of the C<-JpgFromRaw> command of the
7455
7526
  L</READING EXAMPLES> section above.)
7456
7527
 
7457
- =item exiftool -DateTimeOriginal-='0:0:0 1:30:0' dir
7528
+ =item C<exiftool -DateTimeOriginal-='0:0:0 1:30:0' dir>
7458
7529
 
7459
7530
  Adjust original date/time of all images in directory C<dir> by subtracting
7460
7531
  one hour and 30 minutes. (This is equivalent to C<-DateTimeOriginal-=1.5>.
7461
7532
  See L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl> for details.)
7462
7533
 
7463
- =item exiftool -createdate+=3 -modifydate+=3 a.jpg b.jpg
7534
+ =item C<exiftool -createdate+=3 -modifydate+=3 a.jpg b.jpg>
7464
7535
 
7465
7536
  Add 3 hours to the CreateDate and ModifyDate timestamps of two images.
7466
7537
 
7467
- =item exiftool -AllDates+=1:30 -if '$make eq E<34>CanonE<34>' dir
7538
+ =item C<exiftool -AllDates+=1:30 -if '$make eq E<34>CanonE<34>' dir>
7468
7539
 
7469
7540
  Shift the values of DateTimeOriginal, CreateDate and ModifyDate forward by 1
7470
7541
  hour and 30 minutes for all Canon images in a directory. (The AllDates tag
7471
7542
  is provided as a shortcut for these three tags, allowing them to be accessed
7472
7543
  via a single tag.)
7473
7544
 
7474
- =item exiftool -xmp:city=Kingston image1.jpg image2.nef
7545
+ =item C<exiftool -xmp:city=Kingston image1.jpg image2.nef>
7475
7546
 
7476
7547
  Write a tag to the XMP group of two images. (Without the C<xmp:> this tag
7477
7548
  would get written to the IPTC group since C<City> exists in both, and IPTC
7478
7549
  is preferred by default.)
7479
7550
 
7480
- =item exiftool -LightSource-='Unknown (0)' dst.tiff
7551
+ =item C<exiftool -LightSource-='Unknown (0)' dst.tiff>
7481
7552
 
7482
7553
  Delete C<LightSource> tag only if it is unknown with a value of 0.
7483
7554
 
7484
- =item exiftool -whitebalance-=auto -WhiteBalance=tung dst.jpg
7555
+ =item C<exiftool -whitebalance-=auto -WhiteBalance=tung dst.jpg>
7485
7556
 
7486
7557
  Set C<WhiteBalance> to C<Tungsten> only if it was previously C<Auto>.
7487
7558
 
7488
- =item exiftool -comment-= -comment='new comment' a.jpg
7559
+ =item C<exiftool -comment-= -comment='new comment' a.jpg>
7489
7560
 
7490
7561
  Write a new comment only if the image doesn't have one already.
7491
7562
 
7492
- =item exiftool -o %d%f.xmp dir
7563
+ =item C<exiftool -o %d%f.xmp dir>
7493
7564
 
7494
7565
  Create XMP meta information data files for all images in C<dir>.
7495
7566
 
7496
- =item exiftool -o test.xmp -owner=Phil -title='XMP File'
7567
+ =item C<exiftool -o test.xmp -owner=Phil -title='XMP File'>
7497
7568
 
7498
7569
  Create an XMP data file only from tags defined on the command line.
7499
7570
 
7500
- =item exiftool '-ICC_Profile<=%d%f.icc' image.jpg
7571
+ =item C<exiftool '-ICC_Profile<=%d%f.icc' image.jpg>
7501
7572
 
7502
7573
  Write ICC_Profile to an image from a C<.icc> file of the same name.
7503
7574
 
7504
- =item exiftool -hierarchicalkeywords='{keyword=one,children={keyword=B}}'
7575
+ =item C<exiftool -hierarchicalkeywords='{keyword=one,children={keyword=B}}'>
7505
7576
 
7506
7577
  Write structured XMP information. See L<https://exiftool.org/struct.html>
7507
7578
  for more details.
7508
7579
 
7509
- =item exiftool -trailer:all= image.jpg
7580
+ =item C<exiftool -trailer:all= image.jpg>
7510
7581
 
7511
7582
  Delete any trailer found after the end of image (EOI) in a JPEG file. A
7512
7583
  number of digital cameras store a large PreviewImage after the JPEG EOI, and
@@ -7522,22 +7593,22 @@ These examples demonstrate the ability to copy tag values between files.
7522
7593
 
7523
7594
  =over 5
7524
7595
 
7525
- =item exiftool -tagsFromFile src.cr2 dst.jpg
7596
+ =item C<exiftool -tagsFromFile src.cr2 dst.jpg>
7526
7597
 
7527
7598
  Copy the values of all writable tags from C<src.cr2> to C<dst.jpg>, writing
7528
7599
  the information to same-named tags in the preferred groups.
7529
7600
 
7530
- =item exiftool -TagsFromFile src.jpg -all:all dst.jpg
7601
+ =item C<exiftool -TagsFromFile src.jpg -all:all dst.jpg>
7531
7602
 
7532
7603
  Copy the values of all writable tags from C<src.jpg> to C<dst.jpg>,
7533
7604
  preserving the original tag groups.
7534
7605
 
7535
- =item exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg
7606
+ =item C<exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg>
7536
7607
 
7537
7608
  Erase all meta information from C<dst.jpg> image, then copy EXIF tags from
7538
7609
  C<src.jpg>.
7539
7610
 
7540
- =item exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg
7611
+ =item C<exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg>
7541
7612
 
7542
7613
  Rebuild all EXIF meta information from scratch in an image. This technique
7543
7614
  can be used in JPEG images to repair corrupted EXIF information which
@@ -7546,7 +7617,7 @@ shortcut for unsafe EXIF tags in JPEG images which are not normally copied.
7546
7617
  See the L<tag name documentation|Image::ExifTool::TagNames> for more details
7547
7618
  about unsafe tags.
7548
7619
 
7549
- =item exiftool -Tagsfromfile a.jpg out.xmp
7620
+ =item C<exiftool -Tagsfromfile a.jpg out.xmp>
7550
7621
 
7551
7622
  Copy meta information from C<a.jpg> to an XMP data file. If the XMP data
7552
7623
  file C<out.xmp> already exists, it will be updated with the new information.
@@ -7555,46 +7626,46 @@ be created like this (files containing images may be edited but not
7555
7626
  created). See L</WRITING EXAMPLES> above for another technique to generate
7556
7627
  XMP files.
7557
7628
 
7558
- =item exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg
7629
+ =item C<exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg>
7559
7630
 
7560
7631
  Copy all meta information from C<a.jpg> to C<b.jpg>, deleting all XMP
7561
7632
  information and the thumbnail image from the destination.
7562
7633
 
7563
- =item exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg
7634
+ =item C<exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg>
7564
7635
 
7565
7636
  Copy title from one image to another and set a new author name.
7566
7637
 
7567
- =item exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment
7568
- dst.jpg
7638
+ =item C<exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment
7639
+ dst.jpg>
7569
7640
 
7570
7641
  Copy ISO from one image and Comment from another image to a destination
7571
7642
  image.
7572
7643
 
7573
- =item exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg
7644
+ =item C<exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg>
7574
7645
 
7575
7646
  Copy only the EXIF information from one image to another, excluding SubIFD
7576
7647
  tags.
7577
7648
 
7578
- =item exiftool '-FileModifyDateE<lt>DateTimeOriginal' dir
7649
+ =item C<exiftool '-FileModifyDateE<lt>DateTimeOriginal' dir>
7579
7650
 
7580
7651
  Use the original date from the meta information to set the same file's
7581
7652
  filesystem modification date for all images in a directory. (Note that
7582
7653
  C<-TagsFromFile @> is assumed if no other B<-TagsFromFile> is specified when
7583
7654
  redirecting information as in this example.)
7584
7655
 
7585
- =item exiftool -TagsFromFile src.jpg '-xmp:allE<lt>all' dst.jpg
7656
+ =item C<exiftool -TagsFromFile src.jpg '-xmp:allE<lt>all' dst.jpg>
7586
7657
 
7587
7658
  Copy all possible information from C<src.jpg> and write in XMP format to
7588
7659
  C<dst.jpg>.
7589
7660
 
7590
- =item exiftool '-Description<${FileName;s/\.[^.]*$//}' dir
7661
+ =item C<exiftool '-Description<${FileName;s/\.[^.]*$//}' dir>
7591
7662
 
7592
7663
  Set the image Description from the file name after removing the extension.
7593
7664
  This example uses the L</Advanced formatting feature> to perform a
7594
7665
  substitution operation to remove the last dot and subsequent characters from
7595
7666
  the file name.
7596
7667
 
7597
- =item exiftool -@ iptc2xmp.args -iptc:all= a.jpg
7668
+ =item C<exiftool -@ iptc2xmp.args -iptc:all= a.jpg>
7598
7669
 
7599
7670
  Translate IPTC information to XMP with appropriate tag name conversions, and
7600
7671
  delete the original IPTC information from an image. This example uses
@@ -7604,40 +7675,40 @@ Also included with the distribution are xmp2iptc.args (which performs the
7604
7675
  inverse conversion) and a few more .args files for other conversions between
7605
7676
  EXIF, IPTC and XMP.
7606
7677
 
7607
- =item exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir
7678
+ =item C<exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir>
7608
7679
 
7609
7680
  Recursively rewrite all C<JPG> images in C<dir> with information copied from
7610
7681
  the corresponding C<CR2> images in the same directories.
7611
7682
 
7612
- =item exiftool '-keywords+E<lt>make' image.jpg
7683
+ =item C<exiftool '-keywords+E<lt>make' image.jpg>
7613
7684
 
7614
7685
  Add camera make to list of keywords.
7615
7686
 
7616
- =item exiftool '-commentE<lt>ISO=$exif:iso Exposure=${shutterspeed}' dir
7687
+ =item C<exiftool '-commentE<lt>ISO=$exif:iso Exposure=${shutterspeed}' dir>
7617
7688
 
7618
7689
  Set the Comment tag of all images in C<dir> from the values of the EXIF:ISO
7619
7690
  and ShutterSpeed tags. The resulting comment will be in the form "ISO=100
7620
7691
  Exposure=1/60".
7621
7692
 
7622
- =item exiftool -TagsFromFile src.jpg -icc_profile dst.jpg
7693
+ =item C<exiftool -TagsFromFile src.jpg -icc_profile dst.jpg>
7623
7694
 
7624
7695
  Copy ICC_Profile from one image to another.
7625
7696
 
7626
- =item exiftool -TagsFromFile src.jpg -all:all dst.mie
7697
+ =item C<exiftool -TagsFromFile src.jpg -all:all dst.mie>
7627
7698
 
7628
7699
  Copy all meta information in its original form from a JPEG image to a MIE
7629
7700
  file. The MIE file will be created if it doesn't exist. This technique can
7630
7701
  be used to store the metadata of an image so it can be inserted back into
7631
7702
  the image (with the inverse command) later in a workflow.
7632
7703
 
7633
- =item exiftool -o dst.mie -all:all src.jpg
7704
+ =item C<exiftool -o dst.mie -all:all src.jpg>
7634
7705
 
7635
7706
  This command performs exactly the same task as the command above, except
7636
7707
  that the B<-o> option will not write to an output file that already exists.
7637
7708
 
7638
- =item exiftool -b -jpgfromraw -w %d%f_%ue.jpg -execute -b -previewimage -w
7709
+ =item C<exiftool -b -jpgfromraw -w %d%f_%ue.jpg -execute -b -previewimage -w
7639
7710
  %d%f_%ue.jpg -execute -tagsfromfile @ -srcfile %d%f_%ue.jpg
7640
- -overwrite_original -common_args --ext jpg DIR
7711
+ -overwrite_original -common_args --ext jpg DIR>
7641
7712
 
7642
7713
  [Advanced] Extract JpgFromRaw or PreviewImage from all but JPG files in DIR,
7643
7714
  saving them with file names like C<image_EXT.jpg>, then add all meta
@@ -7670,34 +7741,34 @@ examples.
7670
7741
 
7671
7742
  =over 5
7672
7743
 
7673
- =item exiftool -filename=new.jpg dir/old.jpg
7744
+ =item C<exiftool -filename=new.jpg dir/old.jpg>
7674
7745
 
7675
7746
  Rename C<old.jpg> to C<new.jpg> in directory C<dir>.
7676
7747
 
7677
- =item exiftool -directory=%e dir
7748
+ =item C<exiftool -directory=%e dir>
7678
7749
 
7679
7750
  Move all files from directory C<dir> into directories named by the original
7680
7751
  file extensions.
7681
7752
 
7682
- =item exiftool '-Directory<DateTimeOriginal' -d %Y/%m/%d dir
7753
+ =item C<exiftool '-DirectoryE<lt>DateTimeOriginal' -d %Y/%m/%d dir>
7683
7754
 
7684
7755
  Move all files in C<dir> into a directory hierarchy based on year, month and
7685
7756
  day of C<DateTimeOriginal>. eg) This command would move the file
7686
7757
  C<dir/image.jpg> with a C<DateTimeOriginal> of C<2005:10:12 16:05:56> to
7687
7758
  C<2005/10/12/image.jpg>.
7688
7759
 
7689
- =item exiftool -o . '-Directory<DateTimeOriginal' -d %Y/%m/%d dir
7760
+ =item C<exiftool -o . '-DirectoryE<lt>DateTimeOriginal' -d %Y/%m/%d dir>
7690
7761
 
7691
7762
  Same effect as above except files are copied instead of moved.
7692
7763
 
7693
- =item exiftool '-filename<%f_${model;}.%e' dir
7764
+ =item C<exiftool '-filenameE<lt>%f_${model;}.%e' dir>
7694
7765
 
7695
7766
  Rename all files in C<dir> by adding the camera model name to the file name.
7696
7767
  The semicolon after the tag name inside the braces causes characters which
7697
7768
  are invalid in Windows file names to be deleted from the tag value (see the
7698
7769
  L</Advanced formatting feature> for an explanation).
7699
7770
 
7700
- =item exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir
7771
+ =item C<exiftool '-FileNameE<lt>CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir>
7701
7772
 
7702
7773
  Rename all images in C<dir> according to the C<CreateDate> date and time,
7703
7774
  adding a copy number with leading '-' if the file already exists (C<%-c>),
@@ -7705,7 +7776,7 @@ and preserving the original file extension (C<%e>). Note the extra '%'
7705
7776
  necessary to escape the filename codes (C<%c> and C<%e>) in the date format
7706
7777
  string.
7707
7778
 
7708
- =item exiftool -r '-FileName<CreateDate' -d %Y-%m-%d/%H%M_%%f.%%e dir
7779
+ =item C<exiftool -r '-FileNameE<lt>CreateDate' -d %Y-%m-%d/%H%M_%%f.%%e dir>
7709
7780
 
7710
7781
  Both the directory and the filename may be changed together via the
7711
7782
  C<FileName> tag if the new C<FileName> contains a '/'. The example above
@@ -7713,7 +7784,7 @@ recursively renames all images in a directory by adding a C<CreateDate>
7713
7784
  timestamp to the start of the filename, then moves them into new directories
7714
7785
  named by date.
7715
7786
 
7716
- =item exiftool '-FileName<${CreateDate}_$filenumber.jpg' -d %Y%m%d -ext jpg .
7787
+ =item C<exiftool '-FileNameE<lt>${CreateDate}_$filenumber.jpg' -d %Y%m%d -ext jpg .>
7717
7788
 
7718
7789
  Set the filename of all JPG images in the current directory from the
7719
7790
  CreateDate and FileNumber tags, in the form "20060507_118-1861.jpg".
@@ -7732,67 +7803,67 @@ the B<-geotag> option.)
7732
7803
 
7733
7804
  =over 5
7734
7805
 
7735
- =item exiftool -geotag track.log a.jpg
7806
+ =item C<exiftool -geotag track.log a.jpg>
7736
7807
 
7737
7808
  Geotag an image (C<a.jpg>) from position information in a GPS track log
7738
7809
  (C<track.log>). Since the C<Geotime> tag is not specified, the value of
7739
7810
  DateTimeOriginal is used for geotagging. Local system time is assumed
7740
7811
  unless DateTimeOriginal contains a timezone.
7741
7812
 
7742
- =item exiftool -geotag track.log -geolocate=geotag a.jpg
7813
+ =item C<exiftool -geotag track.log -geolocate=geotag a.jpg>
7743
7814
 
7744
7815
  Geotag an image and also write geolocation information of the nearest city
7745
7816
  (city name, state/province and country). Read here for more details about
7746
7817
  the Geolocation feature: L<https://exiftool.org/geolocation.html#Write>
7747
7818
 
7748
- =item exiftool -geotag t.log -geotime='2009:04:02 13:41:12-05:00' a.jpg
7819
+ =item C<exiftool -geotag t.log -geotime='2009:04:02 13:41:12-05:00' a.jpg>
7749
7820
 
7750
7821
  Geotag an image with the GPS position for a specific time.
7751
7822
 
7752
- =item exiftool -geotag log.gpx '-xmp:geotimeE<lt>createdate' dir
7823
+ =item C<exiftool -geotag log.gpx '-xmp:geotimeE<lt>createdate' dir>
7753
7824
 
7754
7825
  Geotag all images in directory C<dir> with XMP tags instead of EXIF tags,
7755
7826
  based on the image CreateDate.
7756
7827
 
7757
- =item exiftool -geotag a.log -geosync=-20 dir
7828
+ =item C<exiftool -geotag a.log -geosync=-20 dir>
7758
7829
 
7759
7830
  Geotag images in directory C<dir>, accounting for image timestamps which
7760
7831
  were 20 seconds ahead of GPS.
7761
7832
 
7762
- =item exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg dir
7833
+ =item C<exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg dir>
7763
7834
 
7764
7835
  Geotag images using time synchronization from two previously geotagged images
7765
7836
  (1.jpg and 2.jpg), synchronizing the image and GPS times using a linear time
7766
7837
  drift correction.
7767
7838
 
7768
- =item exiftool -geotag a.log '-geotimeE<lt>${createdate}+01:00' dir
7839
+ =item C<exiftool -geotag a.log '-geotimeE<lt>${createdate}+01:00' dir>
7769
7840
 
7770
7841
  Geotag images in C<dir> using CreateDate with the specified timezone. If
7771
7842
  CreateDate already contained a timezone, then the timezone specified on the
7772
7843
  command line is ignored.
7773
7844
 
7774
- =item exiftool -geotag= a.jpg
7845
+ =item C<exiftool -geotag= a.jpg>
7775
7846
 
7776
7847
  Delete GPS tags which may have been added by the geotag feature. Note that
7777
7848
  this does not remove all GPS tags -- to do this instead use C<-gps:all=>.
7778
7849
 
7779
- =item exiftool -xmp:geotag= a.jpg
7850
+ =item C<exiftool -xmp:geotag= a.jpg>
7780
7851
 
7781
7852
  Delete XMP GPS tags which were added by the geotag feature.
7782
7853
 
7783
- =item exiftool -xmp:geotag=track.log a.jpg
7854
+ =item C<exiftool -xmp:geotag=track.log a.jpg>
7784
7855
 
7785
7856
  Geotag an image with XMP tags, using the time from DateTimeOriginal.
7786
7857
 
7787
- =item exiftool -geotag a.log -geotag b.log -r dir
7858
+ =item C<exiftool -geotag a.log -geotag b.log -r dir>
7788
7859
 
7789
7860
  Combine multiple track logs and geotag an entire directory tree of images.
7790
7861
 
7791
- =item exiftool -geotag 'tracks/*.log' -r dir
7862
+ =item C<exiftool -geotag 'tracks/*.log' -r dir>
7792
7863
 
7793
7864
  Read all track logs from the C<tracks> directory.
7794
7865
 
7795
- =item exiftool -p gpx.fmt dir > out.gpx
7866
+ =item C<exiftool -p gpx.fmt dir E<gt> out.gpx>
7796
7867
 
7797
7868
  Generate a GPX track log from all images in directory C<dir>. This example
7798
7869
  uses the C<gpx.fmt> file included in the full ExifTool distribution package
@@ -7804,26 +7875,26 @@ and assumes that the images in C<dir> have all been previously geotagged.
7804
7875
 
7805
7876
  =over 5
7806
7877
 
7807
- =item cat a.jpg | exiftool -
7878
+ =item C<cat a.jpg | exiftool ->
7808
7879
 
7809
7880
  Extract information from stdin.
7810
7881
 
7811
- =item exiftool image.jpg -thumbnailimage -b | exiftool -
7882
+ =item C<exiftool image.jpg -thumbnailimage -b | exiftool ->
7812
7883
 
7813
7884
  Extract information from an embedded thumbnail image.
7814
7885
 
7815
- =item cat a.jpg | exiftool -iptc:keywords+=fantastic - > b.jpg
7886
+ =item C<cat a.jpg | exiftool -iptc:keywords+=fantastic - E<gt> b.jpg>
7816
7887
 
7817
7888
  Add an IPTC keyword in a pipeline, saving output to a new file.
7818
7889
 
7819
- =item curl -s http://a.domain.com/bigfile.jpg | exiftool -fast -
7890
+ =item C<curl -s http://a.domain.com/bigfile.jpg | exiftool -fast ->
7820
7891
 
7821
7892
  Extract information from an image over the internet using the cURL utility.
7822
7893
  The B<-fast> option prevents exiftool from scanning for trailer information,
7823
7894
  so only the meta information header is transferred.
7824
7895
 
7825
- =item exiftool a.jpg -thumbnailimage -b | exiftool -comment=wow - |
7826
- exiftool a.jpg -thumbnailimage'<=-'
7896
+ =item C<exiftool a.jpg -thumbnailimage -b | exiftool -comment=wow - |
7897
+ exiftool a.jpg -thumbnailimage'E<lt>=-'>
7827
7898
 
7828
7899
  Add a comment to an embedded thumbnail image. (Why anyone would want to do
7829
7900
  this I don't know, but I've included this as an example to illustrate the
@@ -7846,7 +7917,7 @@ the commands if B<-execute> was used).
7846
7917
 
7847
7918
  =head1 AUTHOR
7848
7919
 
7849
- Copyright 2003-2024, Phil Harvey
7920
+ Copyright 2003-2025, Phil Harvey
7850
7921
 
7851
7922
  This is free software; you can redistribute it and/or modify it under the
7852
7923
  same terms as Perl itself.