exiftool_vendored 12.18.0 → 12.33.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +236 -4
  3. data/bin/MANIFEST +23 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +45 -43
  7. data/bin/arg_files/xmp2exif.args +2 -1
  8. data/bin/config_files/acdsee.config +193 -6
  9. data/bin/config_files/convert_regions.config +25 -14
  10. data/bin/config_files/cuepointlist.config +70 -0
  11. data/bin/config_files/example.config +2 -9
  12. data/bin/exiftool +152 -97
  13. data/bin/fmt_files/gpx.fmt +2 -2
  14. data/bin/fmt_files/gpx_wpt.fmt +2 -2
  15. data/bin/fmt_files/kml.fmt +1 -1
  16. data/bin/fmt_files/kml_track.fmt +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  18. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -13
  19. data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
  20. data/bin/lib/Image/ExifTool/Canon.pm +44 -19
  21. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  22. data/bin/lib/Image/ExifTool/DPX.pm +13 -2
  23. data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
  24. data/bin/lib/Image/ExifTool/Exif.pm +124 -13
  25. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  26. data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
  27. data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
  28. data/bin/lib/Image/ExifTool/GPS.pm +22 -11
  29. data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
  30. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  31. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  32. data/bin/lib/Image/ExifTool/ID3.pm +15 -3
  33. data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
  34. data/bin/lib/Image/ExifTool/JSON.pm +30 -5
  35. data/bin/lib/Image/ExifTool/Jpeg2000.pm +395 -16
  36. data/bin/lib/Image/ExifTool/LIF.pm +153 -0
  37. data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
  38. data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
  39. data/bin/lib/Image/ExifTool/MIE.pm +4 -3
  40. data/bin/lib/Image/ExifTool/MRC.pm +341 -0
  41. data/bin/lib/Image/ExifTool/MWG.pm +3 -3
  42. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/MacOS.pm +3 -3
  44. data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
  45. data/bin/lib/Image/ExifTool/Nikon.pm +18 -5
  46. data/bin/lib/Image/ExifTool/NikonSettings.pm +19 -2
  47. data/bin/lib/Image/ExifTool/Olympus.pm +10 -3
  48. data/bin/lib/Image/ExifTool/Other.pm +93 -0
  49. data/bin/lib/Image/ExifTool/PDF.pm +9 -12
  50. data/bin/lib/Image/ExifTool/PNG.pm +8 -7
  51. data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
  52. data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
  53. data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
  54. data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +234 -75
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
  57. data/bin/lib/Image/ExifTool/README +5 -2
  58. data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
  59. data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
  60. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  61. data/bin/lib/Image/ExifTool/Sony.pm +230 -69
  62. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  63. data/bin/lib/Image/ExifTool/TagLookup.pm +4145 -4029
  64. data/bin/lib/Image/ExifTool/TagNames.pod +671 -287
  65. data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
  66. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  67. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  68. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  69. data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
  70. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
  71. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
  72. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
  73. data/bin/lib/Image/ExifTool/Writer.pl +47 -10
  74. data/bin/lib/Image/ExifTool/XMP.pm +45 -15
  75. data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
  76. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  77. data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
  78. data/bin/lib/Image/ExifTool.pm +233 -81
  79. data/bin/lib/Image/ExifTool.pod +114 -93
  80. data/bin/perl-Image-ExifTool.spec +43 -42
  81. data/lib/exiftool_vendored/version.rb +1 -1
  82. metadata +28 -13
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.18';
13
+ my $version = '12.33';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -159,14 +159,17 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
159
159
  my $helped; # flag to avoid printing help if no tags specified
160
160
  my $html; # flag for html-formatted output (2=html dump)
161
161
  my $interrupted; # flag set if CTRL-C is pressed during a critical process
162
+ my $isBinary; # true if value is a SCALAR ref
162
163
  my $isWriting; # flag set if we are writing tags
163
164
  my $joinLists; # flag set to join list values into a single string
164
165
  my $json; # flag for JSON/PHP output format (1=JSON, 2=PHP)
165
166
  my $langOpt; # language option
167
+ my $listDir; # treat a directory as a regular file
166
168
  my $listItem; # item number for extracting single item from a list
167
169
  my $listSep; # list item separator (', ' by default)
168
170
  my $mt; # main ExifTool object
169
171
  my $multiFile; # non-zero if we are scanning multiple files
172
+ my $noBinary; # flag set to ignore binary tags
170
173
  my $outFormat; # -1=Canon format, 0=same-line, 1=tag names, 2=values only
171
174
  my $outOpt; # output file or directory name
172
175
  my $overwriteOrig; # flag to overwrite original file (1=overwrite, 2=in place)
@@ -203,7 +206,6 @@ my $validFile; # flag indicating we processed a valid file
203
206
  my $verbose; # verbose setting
204
207
  my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
205
208
  my $windowTitle; # title for console window
206
- my $isBinary; # true if value is a SCALAR ref
207
209
  my $xml; # flag for XML-formatted output
208
210
 
209
211
  # flag to keep the input -@ argfile open:
@@ -284,6 +286,7 @@ my @recommends = qw(
284
286
  Digest::SHA
285
287
  IO::Compress::Bzip2
286
288
  POSIX::strptime
289
+ Time::Local
287
290
  Unicode::LineBreak
288
291
  IO::Compress::RawDeflate
289
292
  IO::Uncompress::RawInflate
@@ -474,6 +477,7 @@ undef $joinLists;
474
477
  undef $langOpt;
475
478
  undef $listItem;
476
479
  undef $multiFile;
480
+ undef $noBinary;
477
481
  undef $outOpt;
478
482
  undef $preserveTime;
479
483
  undef $progress;
@@ -691,7 +695,7 @@ for (;;) {
691
695
  } else { # 'g(\d*)'
692
696
  # list all groups in specified family
693
697
  my $family = $2 || 0;
694
- PrintTagList("Groups in family $family", GetAllGroups($family));
698
+ PrintTagList("Groups in family $family", $mt->GetAllGroups($family));
695
699
  }
696
700
  next;
697
701
  }
@@ -792,7 +796,11 @@ for (;;) {
792
796
  next;
793
797
  }
794
798
  /^arg(s|format)$/i and $argFormat = 1, next;
795
- /^b(inary)?$/i and $mt->Options(Binary => 1, NoPDFList => 1), $binaryOutput = 1, next;
799
+ if (/^(-?)b(inary)?$/i) {
800
+ ($binaryOutput, $noBinary) = $1 ? (undef, 1) : (1, undef);
801
+ $mt->Options(Binary => $binaryOutput, NoPDFList => $binaryOutput);
802
+ next;
803
+ }
796
804
  if (/^c(oordFormat)?$/i) {
797
805
  my $fmt = shift;
798
806
  $fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next;
@@ -876,6 +884,7 @@ for (;;) {
876
884
  }
877
885
  (/^D$/ or $a eq 'decimal') and $showTagID = 'D', next;
878
886
  /^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
887
+ /^list_dir$/i and $listDir = 1, next;
879
888
  (/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
880
889
  (/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
881
890
  (/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
@@ -1610,7 +1619,7 @@ if (@newValues) {
1610
1619
  next;
1611
1620
  }
1612
1621
  my %opts = ( Shift => 0 ); # shift values if possible instead of adding/deleting
1613
- # allow writing of 'unsafe' tags unless specified by wildcard
1622
+ # allow writing of 'Unsafe' tags unless specified by wildcard
1614
1623
  $opts{Protected} = 1 unless $tag =~ /[?*]/;
1615
1624
 
1616
1625
  if ($tag =~ s/<// and defined $newVal) {
@@ -1945,10 +1954,19 @@ sub GetImageInfo($$)
1945
1954
  my $pipe = $file;
1946
1955
  if ($doUnzip) {
1947
1956
  # pipe through gzip or bzip2 if necessary
1948
- if ($file =~ /\.gz$/i) {
1949
- $pipe = qq{gzip -dc "$file" |};
1950
- } elsif ($file =~ /\.bz2$/i) {
1951
- $pipe = qq{bzip2 -dc "$file" |};
1957
+ if ($file =~ /\.(gz|bz2)$/i) {
1958
+ my $type = lc $1;
1959
+ if ($file =~ /[^-_.'A-Za-z0-9\/\\]/) {
1960
+ Warn "Error: Insecure zip file name. Skipped\n";
1961
+ EFile($file);
1962
+ ++$countBad;
1963
+ return;
1964
+ }
1965
+ if ($type eq 'gz') {
1966
+ $pipe = qq{gzip -dc "$file" |};
1967
+ } else {
1968
+ $pipe = qq{bzip2 -dc "$file" |};
1969
+ }
1952
1970
  }
1953
1971
  }
1954
1972
  # evaluate -if expression for conditional processing
@@ -2209,7 +2227,7 @@ sub GetImageInfo($$)
2209
2227
  my $f = $file;
2210
2228
  CleanXML(\$f);
2211
2229
  print $fp "\n<rdf:Description rdf:about='${f}'";
2212
- print $fp "\n xmlns:et='http://ns.exiftool.ca/1.0/'";
2230
+ print $fp "\n xmlns:et='http://ns.exiftool.org/1.0/'";
2213
2231
  print $fp " et:toolkit='Image::ExifTool $Image::ExifTool::VERSION'";
2214
2232
  # define namespaces for all tag groups
2215
2233
  my (%groups, @groups, $grp0, $grp1);
@@ -2231,7 +2249,7 @@ sub GetImageInfo($$)
2231
2249
  unless ($grp eq $grp1 and $grp =~ /^(ExifTool|File|Composite|Unknown)$/) {
2232
2250
  $grp .= "/$grp1";
2233
2251
  }
2234
- print $fp "\n xmlns:$grp1='http://ns.exiftool.ca/$grp/1.0/'";
2252
+ print $fp "\n xmlns:$grp1='http://ns.exiftool.org/$grp/1.0/'";
2235
2253
  }
2236
2254
  print $fp '>' if $outFormat < 1; # finish rdf:Description token unless short format
2237
2255
  $ind = $outFormat >= 0 ? ' ' : ' ';
@@ -2267,10 +2285,11 @@ TAG: foreach $tag (@foundTags) {
2267
2285
  # avoid extracting Protected binary tags (eg. data blocks) [insider information]
2268
2286
  my $lcTag = lc $tag;
2269
2287
  $lcTag =~ s/ .*//;
2270
- next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
2288
+ next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
2271
2289
  }
2272
2290
  $val = ConvertBinary($val); # convert SCALAR references
2273
- if ($structOpt) {
2291
+ next unless defined $val;
2292
+ if ($structOpt and ref $val) {
2274
2293
  # serialize structure if necessary
2275
2294
  $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
2276
2295
  } elsif (ref $val eq 'ARRAY') {
@@ -2708,7 +2727,7 @@ sub SetImageInfo($$$)
2708
2727
  return 0;
2709
2728
  }
2710
2729
  }
2711
- if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
2730
+ if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
2712
2731
  $outfile .= '/' unless $outfile =~ /\/$/;
2713
2732
  my $name = $file;
2714
2733
  $name =~ s/^.*\///s; # remove directory name
@@ -2911,6 +2930,10 @@ sub SetImageInfo($$$)
2911
2930
  unless (defined $tmpFile) {
2912
2931
  # count the number of tags and pseudo-tags we are writing
2913
2932
  my ($numSet, $numPseudo) = $et->CountNewValues();
2933
+ if ($numSet != $numPseudo and $et->IsDirectory($file)) {
2934
+ print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
2935
+ $numSet = $numPseudo;
2936
+ }
2914
2937
  if ($et->Exists($file)) {
2915
2938
  unless ($numSet) {
2916
2939
  # no need to write if no tags set
@@ -3227,7 +3250,8 @@ sub FormatXML($$$)
3227
3250
  } elsif (ref $val eq 'HASH') {
3228
3251
  $gt = " rdf:parseType='Resource'>";
3229
3252
  my $val2 = '';
3230
- foreach (sort keys %$val) {
3253
+ my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
3254
+ foreach (@keys) {
3231
3255
  # (some variable-namespace XML structure fields may have a different group)
3232
3256
  my $tok = /:/ ? $_ : ($grp . ':' . $_);
3233
3257
  $val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . "</$tok>";
@@ -3304,7 +3328,8 @@ sub FormatJSON($$$)
3304
3328
  } elsif (ref $val eq 'HASH') {
3305
3329
  my ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
3306
3330
  print $fp $bra;
3307
- foreach (sort keys %$val) {
3331
+ my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
3332
+ foreach (@keys) {
3308
3333
  print $fp ',' if $comma;
3309
3334
  my $key = EscapeJSON($_, 1);
3310
3335
  print $fp qq(\n$ind $key$sep );
@@ -3395,20 +3420,25 @@ sub AddGroups($$$$)
3395
3420
  #------------------------------------------------------------------------------
3396
3421
  # Convert binary data (SCALAR references) for printing
3397
3422
  # Inputs: 0) object reference
3398
- # Returns: converted object
3423
+ # Returns: converted object, or undef if we don't want binary objects
3399
3424
  sub ConvertBinary($)
3400
3425
  {
3401
3426
  my $obj = shift;
3402
3427
  my ($key, $val);
3403
3428
  if (ref $obj eq 'HASH') {
3404
3429
  foreach $key (keys %$obj) {
3405
- $$obj{$key} = ConvertBinary($$obj{$key}) if ref $$obj{$key};
3430
+ next unless ref $$obj{$key};
3431
+ $$obj{$key} = ConvertBinary($$obj{$key});
3432
+ return undef unless defined $$obj{$key};
3406
3433
  }
3407
3434
  } elsif (ref $obj eq 'ARRAY') {
3408
3435
  foreach $val (@$obj) {
3409
- $val = ConvertBinary($val) if ref $val;
3436
+ next unless ref $val;
3437
+ $val = ConvertBinary($val);
3438
+ return undef unless defined $val;
3410
3439
  }
3411
3440
  } elsif (ref $obj eq 'SCALAR') {
3441
+ return undef if $noBinary;
3412
3442
  # (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
3413
3443
  if (defined $binaryOutput) {
3414
3444
  $obj = $$obj;
@@ -3585,7 +3615,7 @@ sub ProcessFiles($;$)
3585
3615
  ++$progressCount;
3586
3616
  $progStr = " [$progressCount/$progressMax]" if $progress;
3587
3617
  }
3588
- if ($et->IsDirectory($file)) {
3618
+ if ($et->IsDirectory($file) and not $listDir) {
3589
3619
  $multiFile = $validFile = 1;
3590
3620
  ScanDir($et, $file, $list);
3591
3621
  } elsif ($filterFlag and not AcceptFile($file)) {
@@ -4244,7 +4274,10 @@ sub FilterArgfileLine($)
4244
4274
  # escaped by an odd number of backslashes, and escape a single backslash
4245
4275
  # if it occurs at the end of the string
4246
4276
  $arg =~ s{\\(.)|(["\$\@]|\\$)}{'\\'.($2 || $1)}sge;
4247
- $arg = eval qq{"$arg"}; # un-escape characters in C string
4277
+ # un-escape characters in C string
4278
+ my %esc = ( a => "\a", b => "\b", f => "\f", n => "\n",
4279
+ r => "\r", t => "\t", '"' => '"', '\\' => '\\' );
4280
+ $arg =~ s/\\(.)/$esc{$1}||'\\'.$1/egs;
4248
4281
  } else {
4249
4282
  $arg =~ s/^\s+//; # remove leading white space
4250
4283
  $arg =~ s/[\x0d\x0a]+$//s; # remove trailing newline
@@ -4450,47 +4483,48 @@ supported by ExifTool (r = read, w = write, c = create):
4450
4483
 
4451
4484
  File Types
4452
4485
  ------------+-------------+-------------+-------------+------------
4453
- 360 r/w | DPX r | ITC r | ODP r | RIFF r
4454
- 3FR r | DR4 r/w/c | J2C r | ODS r | RSRC r
4455
- 3G2 r/w | DSS r | JNG r/w | ODT r | RTF r
4456
- 3GP r/w | DV r | JP2 r/w | OFR r | RW2 r/w
4457
- A r | DVB r/w | JPEG r/w | OGG r | RWL r/w
4458
- AA r | DVR-MS r | JSON r | OGV r | RWZ r
4459
- AAE r | DYLIB r | K25 r | ONP r | RM r
4460
- AAX r/w | EIP r | KDC r | OPUS r | SEQ r
4461
- ACR r | EPS r/w | KEY r | ORF r/w | SKETCH r
4462
- AFM r | EPUB r | LA r | OTF r | SO r
4463
- AI r/w | ERF r/w | LFP r | PAC r | SR2 r/w
4464
- AIFF r | EXE r | LNK r | PAGES r | SRF r
4465
- APE r | EXIF r/w/c | LRV r/w | PBM r/w | SRW r/w
4466
- ARQ r/w | EXR r | M2TS r | PCD r | SVG r
4467
- ARW r/w | EXV r/w/c | M4A/V r/w | PCX r | SWF r
4468
- ASF r | F4A/V r/w | MACOS r | PDB r | THM r/w
4469
- AVI r | FFF r/w | MAX r | PDF r/w | TIFF r/w
4470
- AVIF r/w | FITS r | MEF r/w | PEF r/w | TORRENT r
4471
- AZW r | FLA r | MIE r/w/c | PFA r | TTC r
4472
- BMP r | FLAC r | MIFF r | PFB r | TTF r
4473
- BPG r | FLIF r/w | MKA r | PFM r | TXT r
4474
- BTF r | FLV r | MKS r | PGF r | VCF r
4475
- CHM r | FPF r | MKV r | PGM r/w | VRD r/w/c
4476
- COS r | FPX r | MNG r/w | PLIST r | VSD r
4477
- CR2 r/w | GIF r/w | MOBI r | PICT r | WAV r
4478
- CR3 r/w | GPR r/w | MODD r | PMP r | WDP r/w
4479
- CRM r/w | GZ r | MOI r | PNG r/w | WEBP r
4480
- CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBM r
4481
- CS1 r/w | HDR r | MOV r/w | PPT r | WMA r
4482
- CSV r | HEIC r/w | MP3 r | PPTX r | WMV r
4483
- CZI r | HEIF r/w | MP4 r/w | PS r/w | WTV r
4484
- DCM r | HTML r | MPC r | PSB r/w | WV r
4485
- DCP r/w | ICC r/w/c | MPG r | PSD r/w | X3F r/w
4486
- DCR r | ICS r | MPO r/w | PSP r | XCF r
4487
- DFONT r | IDML r | MQV r/w | QTIF r/w | XLS r
4488
- DIVX r | IIQ r/w | MRW r/w | R3D r | XLSX r
4489
- DJVU r | IND r/w | MXF r | RA r | XMP r/w/c
4490
- DLL r | INSP r/w | NEF r/w | RAF r/w | ZIP r
4491
- DNG r/w | INSV r | NRW r/w | RAM r |
4492
- DOC r | INX r | NUMBERS r | RAR r |
4493
- DOCX r | ISO r | O r | RAW r/w |
4486
+ 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RIFF r
4487
+ 3FR r | DSS r | JP2 r/w | ODS r | RSRC r
4488
+ 3G2 r/w | DV r | JPEG r/w | ODT r | RTF r
4489
+ 3GP r/w | DVB r/w | JSON r | OFR r | RW2 r/w
4490
+ A r | DVR-MS r | JXL r | OGG r | RWL r/w
4491
+ AA r | DYLIB r | K25 r | OGV r | RWZ r
4492
+ AAE r | EIP r | KDC r | ONP r | RM r
4493
+ AAX r/w | EPS r/w | KEY r | OPUS r | SEQ r
4494
+ ACR r | EPUB r | LA r | ORF r/w | SKETCH r
4495
+ AFM r | ERF r/w | LFP r | ORI r/w | SO r
4496
+ AI r/w | EXE r | LIF r | OTF r | SR2 r/w
4497
+ AIFF r | EXIF r/w/c | LNK r | PAC r | SRF r
4498
+ APE r | EXR r | LRV r/w | PAGES r | SRW r/w
4499
+ ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SVG r
4500
+ ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | SWF r
4501
+ ASF r | FFF r/w | MACOS r | PCX r | THM r/w
4502
+ AVI r | FITS r | MAX r | PDB r | TIFF r/w
4503
+ AVIF r/w | FLA r | MEF r/w | PDF r/w | TORRENT r
4504
+ AZW r | FLAC r | MIE r/w/ | PEF r/w | TTC r
4505
+ BMP r | FLIF r/w | MIFF r c | PFA r | TTF r
4506
+ BPG r | FLV r | MKA r | PFB r | TXT r
4507
+ BTF r | FPF r | MKS r | PFM r | VCF r
4508
+ CHM r | FPX r | MKV r | PGF r | VRD r/w/c
4509
+ COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
4510
+ CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4511
+ CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
4512
+ CRM r/w | HDP r/w | MOI r | PMP r | WEBP r
4513
+ CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4514
+ CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
4515
+ CSV r | HEIF r/w | MP3 r | PPT r | WMV r
4516
+ CZI r | HTML r | MP4 r/w | PPTX r | WTV r
4517
+ DCM r | ICC r/w/c | MPC r | PS r/w | WV r
4518
+ DCP r/w | ICS r | MPG r | PSB r/w | X3F r/w
4519
+ DCR r | IDML r | MPO r/w | PSD r/w | XCF r
4520
+ DFONT r | IIQ r/w | MQV r/w | PSP r | XLS r
4521
+ DIVX r | IND r/w | MRC r | QTIF r/w | XLSX r
4522
+ DJVU r | INSP r/w | MRW r/w | R3D r | XMP r/w/c
4523
+ DLL r | INSV r | MXF r | RA r | ZIP r
4524
+ DNG r/w | INX r | NEF r/w | RAF r/w |
4525
+ DOC r | ISO r | NRW r/w | RAM r |
4526
+ DOCX r | ITC r | NUMBERS r | RAR r |
4527
+ DPX r | J2C r | O r | RAW r/w |
4494
4528
 
4495
4529
  Meta Information
4496
4530
  ----------------------+----------------------+---------------------
@@ -4624,6 +4658,7 @@ L<Advanced options|/Advanced options>
4624
4658
  -echo[NUM] TEXT Echo text to stdout or stderr
4625
4659
  -efile[NUM][!] ERRFILE Save names of files with errors
4626
4660
  -execute[NUM] Execute multiple commands on one line
4661
+ -list_dir List directories, not their contents
4627
4662
  -srcfile FMT Process a different source file
4628
4663
  -stay_open FLAG Keep reading -@ argfile even after EOF
4629
4664
  -userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
@@ -4697,11 +4732,11 @@ I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4697
4732
  prefixed by optional family numbers, and separated colons. If no group name
4698
4733
  is specified, the tag is created in the preferred group, and updated in any
4699
4734
  other location where a same-named tag already exists. The preferred group
4700
- is the first group in the following list where I<TAG> is valid: 1) EXIF, 2)
4701
- IPTC, 3) XMP.
4735
+ in JPEG and TIFF-format images is the first group in the following list
4736
+ where I<TAG> is valid: 1) EXIF, 2) IPTC, 3) XMP.
4702
4737
 
4703
4738
  The wildcards C<*> and C<?> may be used in tag names to assign the same
4704
- value to multiple tags. When specified with wildcards, "unsafe" tags are
4739
+ value to multiple tags. When specified with wildcards, "Unsafe" tags are
4705
4740
  not written. A tag name of C<All> is equivalent to C<*> (except that it
4706
4741
  doesn't require quoting, while arguments with wildcards do on systems with
4707
4742
  shell globbing), and is often used when deleting all metadata (ie. C<-All=>)
@@ -4847,10 +4882,10 @@ See L</COPYING EXAMPLES> for examples using B<-tagsFromFile>.
4847
4882
  Notes:
4848
4883
 
4849
4884
  1) Some tags (generally tags which may affect the appearance of the image)
4850
- are considered "unsafe" to write, and are only copied if specified
4885
+ are considered "Unsafe" to write, and are only copied if specified
4851
4886
  explicitly (ie. no wildcards). See the
4852
4887
  L<tag name documentation|Image::ExifTool::TagNames> for more details about
4853
- "unsafe" tags.
4888
+ "Unsafe" tags.
4854
4889
 
4855
4890
  2) Be aware of the difference between excluding a tag from being copied
4856
4891
  (--I<TAG>), and deleting a tag (-I<TAG>=). Excluding a tag prevents it from
@@ -4932,7 +4967,7 @@ documentation above for a complete description.
4932
4967
  =head3 Input-output text formatting
4933
4968
 
4934
4969
  Note that trailing spaces are removed from extracted values for most output
4935
- text formats. The exceptions are C<-b>, C<-csv>, C<-j> and C<-X>.
4970
+ text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
4936
4971
 
4937
4972
  =over 5
4938
4973
 
@@ -4948,7 +4983,7 @@ intermediate file (C<out.args> in this example):
4948
4983
  exiftool -@ out.args -sep ', ' dst.jpg
4949
4984
 
4950
4985
  Note: Be careful when copying information with this technique since it is
4951
- easy to write tags which are normally considered "unsafe". For instance,
4986
+ easy to write tags which are normally considered "Unsafe". For instance,
4952
4987
  the FileName and Directory tags are excluded in the example above to avoid
4953
4988
  renaming and moving the destination file. Also note that the second command
4954
4989
  above will produce warning messages for any tags which are not writable.
@@ -4958,17 +4993,21 @@ maintain separate list items when writing metadata back to image files, and
4958
4993
  the B<-struct> option may be used when extracting to preserve structured XMP
4959
4994
  information.
4960
4995
 
4961
- =item B<-b> (B<-binary>)
4996
+ =item B<-b>, B<--b> (B<-binary>, B<--binary>)
4997
+
4998
+ Output requested metadata in binary format without tag names or descriptions
4999
+ (B<-b> or B<-binary>). This option is mainly used for extracting embedded
5000
+ images or other binary data, but it may also be useful for some text strings
5001
+ since control characters (such as newlines) are not replaced by '.' as they
5002
+ are in the default output. By default, list items are separated by a
5003
+ newline when extracted with the B<-b> option, but this may be changed (see
5004
+ the B<-sep> option for details). May be combined with B<-j>, B<-php> or
5005
+ B<-X> to extract binary data in JSON, PHP or XML format, but note that
5006
+ "Unsafe" tags are not extracted as binary unless they are specified explicitly or
5007
+ the API RequestAll option is set to 3 or higher.
4962
5008
 
4963
- Output requested metadata in binary format without tag names or
4964
- descriptions. This option is mainly used for extracting embedded images or
4965
- other binary data, but it may also be useful for some text strings since
4966
- control characters (such as newlines) are not replaced by '.' as they are in
4967
- the default output. By default, list items are separated by a newline when
4968
- extracted with the B<-b> option, but this may be changed (see the B<-sep>
4969
- option for details). May be combined with C<-j>, C<-php> or C<-X> to
4970
- extract binary data in JSON, PHP or XML format, but note that "unsafe" tags
4971
- must be specified explicitly to be extracted as binary in these formats.
5009
+ With a leading double dash (B<--b> or B<--binary>), tags which contain
5010
+ binary data are suppressed in the output when reading.
4972
5011
 
4973
5012
  =item B<-c> I<FMT> (B<-coordFormat>)
4974
5013
 
@@ -5166,7 +5205,7 @@ By default the resulting group name is simplified by removing any leading
5166
5205
  C<Main:> and collapsing adjacent identical group names, but this can be
5167
5206
  avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5168
5207
  Use the B<-listg> option to list group names for a specified family. The
5169
- SavePath and SaveFormat API options are automatically enabled if the
5208
+ API SavePath and SaveFormat options are automatically enabled if the
5170
5209
  respective family 5 or 6 group names are requested. See the
5171
5210
  L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
5172
5211
 
@@ -5369,7 +5408,7 @@ with this command:
5369
5408
 
5370
5409
  produces output like this:
5371
5410
 
5372
- -- Generated by ExifTool 12.18 --
5411
+ -- Generated by ExifTool 12.33 --
5373
5412
  File: a.jpg - 2003:10:31 15:44:19
5374
5413
  (f/5.6, 1/60s, ISO 100)
5375
5414
  File: b.jpg - 2006:05:23 11:57:38
@@ -5386,7 +5425,7 @@ are effectively processed as separate input files.
5386
5425
  If a specified tag does not exist, a minor warning is issued and the line
5387
5426
  with the missing tag is not printed. However, the B<-f> option may be used
5388
5427
  to set the value of missing tags to '-' (but this may be configured via the
5389
- MissingTagValue API option), or the B<-m> option may be used to ignore minor
5428
+ API MissingTagValue option), or the B<-m> option may be used to ignore minor
5390
5429
  warnings and leave the missing values empty. Alternatively, B<-q -q> may be
5391
5430
  used to simply suppress the warning messages.
5392
5431
 
@@ -5685,9 +5724,10 @@ The B<-t> option adds tag table information to the output (see B<-t> for
5685
5724
  details).
5686
5725
 
5687
5726
  Note: This output is NOT the same as XMP because it uses
5688
- dynamically-generated property names corresponding to the ExifTool tag
5689
- names, and not the standard XMP properties. To write XMP instead, use the
5690
- B<-o> option with an XMP extension for the output file.
5727
+ dynamically-generated property names corresponding to the ExifTool tag names
5728
+ with ExifTool family 1 group names as namespaces, and not the standard XMP
5729
+ properties and namespaces. To write XMP instead, use the B<-o> option with
5730
+ an XMP extension for the output file.
5691
5731
 
5692
5732
  =back
5693
5733
 
@@ -5729,7 +5769,8 @@ L<https://exiftool.org/geotag.html#Inverse> for examples.
5729
5769
  Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
5730
5770
  until the first Supplemental Enhancement Information (SEI) message is
5731
5771
  decoded, or 3 to parse the entire H624 stream and decode all SEI
5732
- information.
5772
+ information. For M2TS videos, a setting of 3 causes the entire file to be
5773
+ parsed in search of unlisted programs which may contain timed GPS.
5733
5774
 
5734
5775
  =item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
5735
5776
 
@@ -5818,10 +5859,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
5818
5859
  name, or a full path. If a full path is specified, it must match the
5819
5860
  Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
5820
5861
  more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
5821
- sensitive) may be specified to ignore symbolic links when the B<-r> option
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.
5862
+ sensitive) may be specified to avoid recursing into directories which are
5863
+ symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
5864
+ (case sensitive) may be used to ignore files with names that start with a
5865
+ "." (ie. hidden files on Unix systems) when scanning a directory.
5825
5866
 
5826
5867
  =item B<-if>[I<NUM>] I<EXPR>
5827
5868
 
@@ -6247,7 +6288,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
6247
6288
  for any tag on the command line. See the L<MWG Tags
6248
6289
  documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
6249
6290
  that this option is not reversible, and remains in effect until the
6250
- application terminates, even across the C<-execute> option.
6291
+ application terminates, even across the B<-execute> option.
6251
6292
 
6252
6293
  =back
6253
6294
 
@@ -6333,7 +6374,7 @@ exit status of the command (see L</EXIT STATUS>).
6333
6374
 
6334
6375
  Save the names of files giving errors (I<NUM> missing or 1), files that were
6335
6376
  unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
6336
- or any combination thereof (by summing I<NUM>, eg. B<-efile3> is the same
6377
+ or any combination thereof by summing I<NUM> (eg. B<-efile3> is the same
6337
6378
  has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
6338
6379
  By default, file names are appended to any existing I<ERRFILE>, but
6339
6380
  I<ERRFILE> is overwritten if an exclamation point is added to the option
@@ -6351,6 +6392,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
6351
6392
  when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
6352
6393
  option no longer suppresses the output "{readyNUM}" message.
6353
6394
 
6395
+ =item B<-list_dir>
6396
+
6397
+ List directories themselves instead of their contents. This option
6398
+ effectively causes directories to be treated as normal files when reading
6399
+ and writing. For example, with this option the output of the C<ls -la>
6400
+ command on Mac/Linux may be approximated by this exiftool command:
6401
+
6402
+ exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
6403
+
6404
+ (The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
6405
+ L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
6406
+ required to extract some necessary tags, and the B<-fast5> option is added
6407
+ for speed since only system tags are being extracted.)
6408
+
6354
6409
  =item B<-srcfile> I<FMT>
6355
6410
 
6356
6411
  Specify a different source file to be processed based on the name of the
@@ -6398,7 +6453,7 @@ buffered output.) ExifTool will then execute the command with the arguments
6398
6453
  received up to this point, send a "{ready}" message to stdout when done
6399
6454
  (unless the B<-q> or B<-T> option is used), and continue trying to read
6400
6455
  arguments for the next command from I<ARGFILE>. To aid in command/response
6401
- synchronization, any number appended to the C<-execute> option is echoed in
6456
+ synchronization, any number appended to the B<-execute> option is echoed in
6402
6457
  the "{ready}" message. For example, C<-execute613> results in "{ready613}".
6403
6458
  When this number is added, B<-q> no longer suppresses the "{ready}" message.
6404
6459
  (Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
@@ -6533,8 +6588,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
6533
6588
  routines, thus providing support for most Unicode file names (see note 4).
6534
6589
  But note that it is not trivial to pass properly encoded file names on the
6535
6590
  Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
6536
- so placing them in a UTF-8 encoded B<-@> argfile and using C<-charset
6537
- filename=utf8> is recommended if possible.
6591
+ so placing them in a UTF-8 encoded B<-@> argfile and using
6592
+ C<-charset filename=utf8> is recommended if possible.
6538
6593
 
6539
6594
  A warning is issued if a specified filename contains special characters and
6540
6595
  the filename character set was not provided. However, the warning may be
@@ -6608,7 +6663,7 @@ Print all meta information in an image, including duplicate and unknown
6608
6663
  tags, sorted by group (for family 1). For performance reasons, this command
6609
6664
  may not extract all available metadata. (Metadata in embedded documents,
6610
6665
  metadata extracted by external utilities, and metadata requiring excessive
6611
- processing time may not be extracted). Add C<-ee> and C<-api RequestAll=3>
6666
+ processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
6612
6667
  to the command to extract absolutely everything available.
6613
6668
 
6614
6669
  =item exiftool -common dir
@@ -6677,7 +6732,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
6677
6732
  Print one line of output containing the file name and DateTimeOriginal for
6678
6733
  each image in directory C<dir>.
6679
6734
 
6680
- =item exiftool -ee -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
6735
+ =item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
6681
6736
 
6682
6737
  Extract all GPS positions from an AVCHD video.
6683
6738
 
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # Description: Example ExifTool print format file to generate a GPX track log
5
5
  #
6
- # Usage: exiftool -p gpx.fmt -ee FILE [...] > out.gpx
6
+ # Usage: exiftool -p gpx.fmt -ee3 FILE [...] > out.gpx
7
7
  #
8
8
  # Requires: ExifTool version 10.49 or later
9
9
  #
@@ -13,7 +13,7 @@
13
13
  # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
14
14
  #
15
15
  # Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
16
- # 2) The -ee option is to extract the full track from video files.
16
+ # 2) The -ee3 option is to extract the full track from video files.
17
17
  # 3) The -fileOrder option may be used to control the order of the
18
18
  # generated track points when processing multiple files.
19
19
  #------------------------------------------------------------------------------
@@ -4,7 +4,7 @@
4
4
  # Description: Example ExifTool print format file to generate GPX waypoints
5
5
  # with pictures
6
6
  #
7
- # Usage: exiftool -p gpx_wpt.fmt -ee FILE [...] > out.gpx
7
+ # Usage: exiftool -p gpx_wpt.fmt -ee3 FILE [...] > out.gpx
8
8
  #
9
9
  # Requires: ExifTool version 10.49 or later
10
10
  #
@@ -14,7 +14,7 @@
14
14
  # 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
15
15
  #
16
16
  # Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
17
- # 2) The -ee option is to extract the full track from video files.
17
+ # 2) The -ee3 option is to extract the full track from video files.
18
18
  # 3) The -fileOrder option may be used to control the order of the
19
19
  # generated track points when processing multiple files.
20
20
  #------------------------------------------------------------------------------
@@ -15,7 +15,7 @@
15
15
  # 2020/01/11 - F. Kotov Limited image preview size to 500px
16
16
  #
17
17
  # Notes: 1) Input files must contain GPSLatitude and GPSLongitude.
18
- # 2) Add the -ee option to extract the full track from video files.
18
+ # 2) Add the -ee3 option to extract the full track from video files.
19
19
  # 3) For Google Earth to be able to find the images, the input
20
20
  # images must be specified using relative paths, and "out.kml"
21
21
  # must stay in the same directory as where the command was run.
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # From video files:
13
13
  #
14
- # exiftool -p kml.fmt -ee FILEorDIR [...] > out.kml
14
+ # exiftool -p kml.fmt -ee3 FILEorDIR [...] > out.kml
15
15
  #
16
16
  # Requires: ExifTool version 10.41 or later
17
17
  #
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool::Exif;
16
16
  use Image::ExifTool::PLIST;
17
17
 
18
- $VERSION = '1.04';
18
+ $VERSION = '1.05';
19
19
 
20
20
  # Apple iPhone metadata (ref PH)
21
21
  %Image::ExifTool::Apple::Main = (
@@ -72,7 +72,8 @@ $VERSION = '1.04';
72
72
  # 0x000f - int32s: 2,3
73
73
  # 0x0010 - int32s: 1
74
74
  0x0011 => {
75
- Name => 'ContentIdentifier', #forum8750
75
+ Name => 'MediaGroupUUID', #NealKrawetz private communication
76
+ # (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
76
77
  Writable => 'string',
77
78
  },
78
79
  # 0x0014 - int32s: 1,2,3,4,5 (iPhone 6s, iOS 6.1)