exiftool_vendored 13.17.0 → 13.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +33 -6
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -1
- data/bin/exiftool +12 -8
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +99 -11
- data/bin/lib/Image/ExifTool/GoPro.pm +58 -48
- data/bin/lib/Image/ExifTool/ICO.pm +2 -2
- data/bin/lib/Image/ExifTool/Kodak.pm +3 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +45 -19
- data/bin/lib/Image/ExifTool/PDF.pm +10 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +42 -4
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -2
- data/bin/lib/Image/ExifTool/Protobuf.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +273 -262
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +19 -5
- data/bin/lib/Image/ExifTool/Sony.pm +16 -10
- data/bin/lib/Image/ExifTool/TagLookup.pm +712 -663
- data/bin/lib/Image/ExifTool/TagNames.pod +162 -64
- data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +49 -3
- data/bin/lib/Image/ExifTool/Writer.pl +5 -3
- data/bin/lib/Image/ExifTool/XMP.pm +17 -3
- data/bin/lib/Image/ExifTool/XMP2.pl +2 -0
- data/bin/lib/Image/ExifTool.pm +15 -16
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 28469 tags, with 17576 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -5566,6 +5566,8 @@ is to write ImageRegion as a structure with these tags as new fields.
|
|
5566
5566
|
|
5567
5567
|
=head3 XMP LocationDetails Struct
|
5568
5568
|
|
5569
|
+
Note that the GPS elements of this structure are in the "exif" namespace.
|
5570
|
+
|
5569
5571
|
Field Name Writable
|
5570
5572
|
---------- --------
|
5571
5573
|
City string
|
@@ -5750,14 +5752,14 @@ These tags belong to the ExifTool XMP-pdf family 1 group.
|
|
5750
5752
|
=head3 XMP pdfx Tags
|
5751
5753
|
|
5752
5754
|
PDF extension tags. This namespace is used to store application-defined PDF
|
5753
|
-
information, so there are
|
5754
|
-
created to enable writing of XMP-pdfx information.
|
5755
|
+
information, so there are few pre-defined tags. User-defined tags must be
|
5756
|
+
created to enable writing of other XMP-pdfx information.
|
5755
5757
|
|
5756
5758
|
These tags belong to the ExifTool XMP-pdfx family 1 group.
|
5757
5759
|
|
5758
5760
|
Tag Name Writable
|
5759
5761
|
-------- --------
|
5760
|
-
|
5762
|
+
SourceModified string
|
5761
5763
|
|
5762
5764
|
=head3 XMP photoshop Tags
|
5763
5765
|
|
@@ -11518,48 +11520,68 @@ file name combined with the hierarchical protobuf field numbers.
|
|
11518
11520
|
|
11519
11521
|
ExifTool currently extracts timed GPS plus a few other tags from DJI devices
|
11520
11522
|
which use the following protocols: dvtm_AVATA2.proto (Avanta 2),
|
11521
|
-
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5)
|
11522
|
-
dvtm_wm265e.proto (Mavic 3).
|
11523
|
+
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5),
|
11524
|
+
dvtm_wm265e.proto (Mavic 3), dvtm_pm320.proto (Matrice 30) and
|
11525
|
+
dvtm_pm320.proto (Mini 4 Pro).
|
11523
11526
|
|
11524
11527
|
Note that with the protobuf format, numerical tags missing from the output
|
11525
11528
|
for a given protocol should be considered to have the default value of 0.
|
11526
11529
|
|
11527
|
-
Tag ID
|
11528
|
-
------
|
11529
|
-
'Protocol'
|
11530
|
-
'dvtm_AVATA2_1-1-5'
|
11531
|
-
'dvtm_AVATA2_1-1-10'
|
11532
|
-
'dvtm_AVATA2_2-2-3-1'
|
11533
|
-
'dvtm_AVATA2_2-3'
|
11534
|
-
'dvtm_AVATA2_3-1-2'
|
11535
|
-
'dvtm_AVATA2_3-4-4-1'
|
11536
|
-
'
|
11537
|
-
'
|
11538
|
-
'
|
11539
|
-
'
|
11540
|
-
'
|
11541
|
-
'
|
11542
|
-
'
|
11543
|
-
'
|
11544
|
-
'
|
11545
|
-
'
|
11546
|
-
'
|
11547
|
-
'
|
11548
|
-
'
|
11549
|
-
'
|
11550
|
-
'
|
11551
|
-
'
|
11552
|
-
'
|
11553
|
-
'
|
11554
|
-
'
|
11555
|
-
'
|
11556
|
-
'
|
11557
|
-
'
|
11558
|
-
'
|
11559
|
-
'
|
11560
|
-
'
|
11561
|
-
'
|
11562
|
-
'
|
11530
|
+
Tag ID Tag Name Writable
|
11531
|
+
------ -------- --------
|
11532
|
+
'Protocol' Protocol no
|
11533
|
+
'dvtm_AVATA2_1-1-5' SerialNumber no
|
11534
|
+
'dvtm_AVATA2_1-1-10' Model no
|
11535
|
+
'dvtm_AVATA2_2-2-3-1' SerialNumber2 no
|
11536
|
+
'dvtm_AVATA2_2-3' FrameInfo DJI FrameInfo
|
11537
|
+
'dvtm_AVATA2_3-1-2' TimeStamp no
|
11538
|
+
'dvtm_AVATA2_3-4-4-1' GPSInfo DJI GPSInfo
|
11539
|
+
'dvtm_Mini4_Pro_1-1-5' SerialNumber no
|
11540
|
+
'dvtm_Mini4_Pro_1-1-10' Model no
|
11541
|
+
'dvtm_Mini4_Pro_2-3' FrameInfo DJI FrameInfo
|
11542
|
+
'dvtm_Mini4_Pro_3-2-7-1' ISO no
|
11543
|
+
'dvtm_Mini4_Pro_3-3-3' DroneInfo DJI DroneInfo
|
11544
|
+
'dvtm_Mini4_Pro_3-3-4-1' GPSInfo DJI GPSInfo
|
11545
|
+
'dvtm_Mini4_Pro_3-3-4-2' AbsoluteAltitude no
|
11546
|
+
'dvtm_Mini4_Pro_3-3-5-1' RelativeAltitude no
|
11547
|
+
'dvtm_Mini4_Pro_3-4-3' GimbalInfo DJI GimbalInfo
|
11548
|
+
'dvtm_Mini4_Pro_3-2-10-1' ShutterSpeed no
|
11549
|
+
'dvtm_Mini4_Pro_3-2-11-1' FNumber no
|
11550
|
+
'dvtm_Mini4_Pro_3-2-32-1' ColorTemperature no
|
11551
|
+
'dvtm_ac203_1-1-5' SerialNumber no
|
11552
|
+
'dvtm_ac203_1-1-10' Model no
|
11553
|
+
'dvtm_ac203_2-3' FrameInfo DJI FrameInfo
|
11554
|
+
'dvtm_ac203_3-4-2-1' GPSInfo DJI GPSInfo
|
11555
|
+
'dvtm_ac203_3-4-2-2' GPSAltitude no
|
11556
|
+
'dvtm_ac203_3-4-2-6-1' GPSDateTime no
|
11557
|
+
'dvtm_ac204_1-1-5' SerialNumber no
|
11558
|
+
'dvtm_ac204_1-1-10' Model no
|
11559
|
+
'dvtm_ac204_2-3' FrameInfo DJI FrameInfo
|
11560
|
+
'dvtm_ac204_3-4-2-1' GPSInfo DJI GPSInfo
|
11561
|
+
'dvtm_ac204_3-4-2-2' GPSAltitude no
|
11562
|
+
'dvtm_ac204_3-4-2-6-1' GPSDateTime no
|
11563
|
+
'dvtm_pm320_1-1-5' SerialNumber no
|
11564
|
+
'dvtm_pm320_1-1-10' Model no
|
11565
|
+
'dvtm_pm320_2-2' FrameInfo DJI FrameInfo
|
11566
|
+
'dvtm_pm320_3-2-2-1' ISO no
|
11567
|
+
'dvtm_pm320_3-2-3-1' ShutterSpeed no
|
11568
|
+
'dvtm_pm320_3-2-6-1' DigitalZoom no
|
11569
|
+
'dvtm_pm320_3-3-3' DroneInfo DJI DroneInfo
|
11570
|
+
'dvtm_pm320_3-3-4-1' GPSInfo DJI GPSInfo
|
11571
|
+
'dvtm_pm320_3-3-4-2' AbsoluteAltitude no
|
11572
|
+
'dvtm_pm320_3-3-5-1' RelativeAltitude no
|
11573
|
+
'dvtm_pm320_3-4-3' GimbalInfo DJI GimbalInfo
|
11574
|
+
'dvtm_wm265e_1-1-5' SerialNumber no
|
11575
|
+
'dvtm_wm265e_1-1-10' Model no
|
11576
|
+
'dvtm_wm265e_2-2' FrameInfo DJI FrameInfo
|
11577
|
+
'dvtm_wm265e_3-2-2-1' ISO no
|
11578
|
+
'dvtm_wm265e_3-2-3-1' ShutterSpeed no
|
11579
|
+
'dvtm_wm265e_3-2-6-1' DigitalZoom no
|
11580
|
+
'dvtm_wm265e_3-3-3' DroneInfo DJI DroneInfo
|
11581
|
+
'dvtm_wm265e_3-3-4-1' GPSInfo DJI GPSInfo
|
11582
|
+
'dvtm_wm265e_3-3-4-2' AbsoluteAltitude no
|
11583
|
+
'dvtm_wm265e_3-3-5-1' RelativeAltitude no
|
11584
|
+
'dvtm_wm265e_3-4-3' GimbalInfo DJI GimbalInfo
|
11563
11585
|
|
11564
11586
|
=head3 DJI FrameInfo Tags
|
11565
11587
|
|
@@ -11577,6 +11599,22 @@ for a given protocol should be considered to have the default value of 0.
|
|
11577
11599
|
2 GPSLatitude no
|
11578
11600
|
3 GPSLongitude no
|
11579
11601
|
|
11602
|
+
=head3 DJI DroneInfo Tags
|
11603
|
+
|
11604
|
+
Tag ID Tag Name Writable
|
11605
|
+
------ -------- --------
|
11606
|
+
1 DroneRoll no
|
11607
|
+
2 DronePitch no
|
11608
|
+
3 DroneYaw no
|
11609
|
+
|
11610
|
+
=head3 DJI GimbalInfo Tags
|
11611
|
+
|
11612
|
+
Tag ID Tag Name Writable
|
11613
|
+
------ -------- --------
|
11614
|
+
1 GimbalPitch no
|
11615
|
+
2 GimbalRoll no
|
11616
|
+
3 GimbalYaw no
|
11617
|
+
|
11580
11618
|
=head2 FLIR Tags
|
11581
11619
|
|
11582
11620
|
Information extracted from the maker notes of JPEG images from thermal
|
@@ -12307,24 +12345,40 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
12307
12345
|
Tag ID Tag Name Writable
|
12308
12346
|
------ -------- --------
|
12309
12347
|
'AALP' AudioLevel no
|
12348
|
+
'ABSC' AutoBoostScore no
|
12310
12349
|
'ACCL' Accelerometer no
|
12311
12350
|
'ALLD' AutoLowLightDuration no
|
12351
|
+
'APTO' AudioProtuneOption no
|
12352
|
+
'ARUW' AspectRatioUnwarped no
|
12353
|
+
'ARWA' AspectRatioWarped no
|
12312
12354
|
'ATTD' Attitude no
|
12313
12355
|
'ATTR' AttitudeTarget no
|
12356
|
+
'AUBT' AudioBlueTooth no
|
12314
12357
|
'AUDO' AudioSetting no
|
12358
|
+
'AUPT' AutoProtune no
|
12359
|
+
'BITR' BitrateSetting no
|
12315
12360
|
'BPOS' Controller? no
|
12316
12361
|
'CASN' CameraSerialNumber no
|
12362
|
+
'CDAT' CreationDate no
|
12363
|
+
'CDTM' CaptureDelayTimer no
|
12364
|
+
'CLDP' ClassificationDataPresent no
|
12317
12365
|
'CORI' CameraOrientation no
|
12366
|
+
'CPIN' ChapterNumber no
|
12318
12367
|
'CSEN' CoyoteSense no
|
12368
|
+
'CTRL' ControlLevel no
|
12319
12369
|
'CYTS' CoyoteStatus no
|
12320
12370
|
'DEVC' DeviceContainer GoPro GPMF
|
12371
|
+
'DUST' DurationSetting no
|
12321
12372
|
'DVID' DeviceID? no
|
12322
12373
|
'DVNM' DeviceName no
|
12323
|
-
'
|
12374
|
+
'DZMX' DigitalZoomAmount no
|
12375
|
+
'DZOM' DigitalZoomOn no
|
12376
|
+
'DZST' DigitalZoom no
|
12324
12377
|
'EISA' ElectronicImageStabilization no
|
12378
|
+
'EISE' ElectronicStabilizationOn no
|
12325
12379
|
'EMPT' Empty? no
|
12326
12380
|
'ESCS' EscapeStatus? no
|
12327
|
-
'EXPT'
|
12381
|
+
'EXPT' ExposureType no
|
12328
12382
|
'FACE' FaceDetected no
|
12329
12383
|
'FCNM' FaceNumbers no
|
12330
12384
|
'FMWR' FirmwareVersion no
|
@@ -12339,6 +12393,9 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
12339
12393
|
'GPSU' GPSDateTime no
|
12340
12394
|
'GRAV' GravityVector no
|
12341
12395
|
'GYRO' Gyroscope no
|
12396
|
+
'HCLT' HorizonControl no
|
12397
|
+
'HDRV' HDRVideo no
|
12398
|
+
'HSGT' HindsightSettings no
|
12342
12399
|
'HUES' PrediminantHue no
|
12343
12400
|
'IORI' ImageOrientation no
|
12344
12401
|
'ISOE' ISOSpeeds no
|
@@ -12346,30 +12403,45 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
12346
12403
|
'KBAT' BatteryStatus GoPro KBAT
|
12347
12404
|
'LNED' LocalPositionNED no
|
12348
12405
|
'MAGN' Magnetometer no
|
12406
|
+
'MAPX' MappingXCoefficients no
|
12407
|
+
'MAPY' MappingYCoefficients no
|
12349
12408
|
'MINF' Model no
|
12409
|
+
'MMOD' MediaMode no
|
12350
12410
|
'MTRX' AccelerometerMatrix no
|
12351
12411
|
'MUID' MediaUniqueID no
|
12352
12412
|
'MWET' MicrophoneWet no
|
12413
|
+
'MXCF' MappingXMode no
|
12414
|
+
'MYCF' MappingYMode no
|
12415
|
+
'ORDP' OrientationDataPresent no
|
12353
12416
|
'OREN' AutoRotation no
|
12354
12417
|
'ORIN' InputOrientation no
|
12355
12418
|
'ORIO' OutputOrientation no
|
12356
12419
|
'PHDR' HDRSetting no
|
12420
|
+
'PIMD' ProtuneISOMode no
|
12357
12421
|
'PIMN' AutoISOMin no
|
12358
12422
|
'PIMX' AutoISOMax no
|
12423
|
+
'POLY' PolynomialCoefficients no
|
12359
12424
|
'PRES' PhotoResolution no
|
12360
|
-
'
|
12425
|
+
'PRJT' LensProjection no
|
12426
|
+
'PRTN' Protune no
|
12361
12427
|
'PTCL' ColorMode no
|
12362
12428
|
'PTEV' ExposureCompensation no
|
12363
12429
|
'PTSH' Sharpness no
|
12364
12430
|
'PTWB' WhiteBalance no
|
12431
|
+
'PWPR' PowerProfile no
|
12432
|
+
'PYCF' PolynomialPower no
|
12433
|
+
'RAMP' SpeedRampSetting no
|
12365
12434
|
'RATE' Rate no
|
12366
12435
|
'RMRK' Comments no
|
12367
12436
|
'SCAL' ScaleFactor? no
|
12437
|
+
'SCAP' ScheduleCapture no
|
12368
12438
|
'SCEN' SceneClassification no
|
12369
12439
|
'SCPR' ScaledPressure no
|
12440
|
+
'SCTM' ScheduleCaptureTime no
|
12370
12441
|
'SHUT' ExposureTimes no
|
12371
12442
|
'SIMU' ScaledIMU no
|
12372
12443
|
'SIUN' SIUnits? no
|
12444
|
+
'SMTR' SpotMeter no
|
12373
12445
|
'SROT' SensorReadoutTime no
|
12374
12446
|
'STMP' TimeStamp no
|
12375
12447
|
'STNM' StreamName? no
|
@@ -12390,6 +12462,8 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
12390
12462
|
'WNDM' WindProcessing no
|
12391
12463
|
'WRGB' WhiteBalanceRGB no
|
12392
12464
|
'YAVG' LumaAverage no
|
12465
|
+
'ZFOV' DiagonalFieldOfView no
|
12466
|
+
'ZMPL' ZoomScaleNormalization no
|
12393
12467
|
|
12394
12468
|
=head3 GoPro GLPI Tags
|
12395
12469
|
|
@@ -16858,12 +16932,14 @@ These tags are written by Nikon DSLR's which have the live view feature.
|
|
16858
16932
|
26 AFAreaHeight int16u
|
16859
16933
|
28 ContrastDetectAFInFocus int8u
|
16860
16934
|
AFPointsSelected undef[20]
|
16935
|
+
AFPointsSelected int16u
|
16861
16936
|
42 AFImageWidth int16u
|
16862
16937
|
44 AFImageHeight int16u
|
16863
16938
|
46 AFAreaXPosition int16u
|
16864
16939
|
47 FocusPositionHorizontal int8u~
|
16865
16940
|
48 AFAreaYPosition int16u
|
16866
16941
|
AFPointsInFocus undef[20]
|
16942
|
+
AFPointsInFocus undef[7]
|
16867
16943
|
49 FocusPositionVertical int8u~
|
16868
16944
|
50 AFAreaWidth int16u
|
16869
16945
|
52 AFAreaHeight int16u
|
@@ -23069,7 +23145,8 @@ Valid from July 2020 for ILCE-1/7SM3, ILME-FX3.
|
|
23069
23145
|
|
23070
23146
|
=head3 Sony Tag9050d Tags
|
23071
23147
|
|
23072
|
-
Valid for ILCE-6700/7CM2/7CR/ZV-E1.
|
23148
|
+
Valid for ILCE-6700/7CM2/7CR/ZV-E1. Also for ILCE-1M2 when using mechanical
|
23149
|
+
shutter.
|
23073
23150
|
|
23074
23151
|
Index1 Tag Name Writable
|
23075
23152
|
------ -------- --------
|
@@ -23979,24 +24056,43 @@ files, and will extract any existing tags even if they aren't listed below.
|
|
23979
24056
|
These tags belong to the family 0 "PLIST" group, but family 1 group may be
|
23980
24057
|
either "XML" or "PLIST" depending on whether the format is XML or binary.
|
23981
24058
|
|
23982
|
-
Tag ID
|
23983
|
-
------
|
24059
|
+
Tag ID Tag Name Writable
|
24060
|
+
------ -------- --------
|
23984
24061
|
'MetaDataList//DateTimeOriginal'
|
23985
|
-
|
23986
|
-
'MetaDataList//Duration'
|
24062
|
+
DateTimeOriginal no
|
24063
|
+
'MetaDataList//Duration' Duration no
|
23987
24064
|
'MetaDataList//Geolocation/Latitude'
|
23988
|
-
|
24065
|
+
GPSLatitude no
|
23989
24066
|
'MetaDataList//Geolocation/Longitude'
|
23990
|
-
|
24067
|
+
GPSLongitude no
|
23991
24068
|
'MetaDataList//Geolocation/MapDatum'
|
23992
|
-
|
23993
|
-
'XMLFileType'
|
23994
|
-
'
|
23995
|
-
'
|
23996
|
-
'
|
23997
|
-
'
|
23998
|
-
'
|
23999
|
-
'
|
24069
|
+
GPSMapDatum no
|
24070
|
+
'XMLFileType' XMLFileType no
|
24071
|
+
'adjustmentData' AdjustmentData PLIST
|
24072
|
+
'cast//name' Cast no+
|
24073
|
+
'codirectors//name' Codirectors no+
|
24074
|
+
'directors//name' Directors no+
|
24075
|
+
'producers//name' Producers no+
|
24076
|
+
'screenwriters//name' Screenwriters no+
|
24077
|
+
'slowMotion/rate' SlowMotionRate no
|
24078
|
+
'slowMotion/regions' SlowMotionRegions no
|
24079
|
+
'slowMotion/regions/timeRange/duration/epoch'
|
24080
|
+
SlowMotionRegionsDurationEpoch no
|
24081
|
+
'slowMotion/regions/timeRange/duration/flags'
|
24082
|
+
SlowMotionRegionsDurationFlags no
|
24083
|
+
'slowMotion/regions/timeRange/duration/timescale'
|
24084
|
+
SlowMotionRegionsDurationTimeScale no
|
24085
|
+
'slowMotion/regions/timeRange/duration/value'
|
24086
|
+
SlowMotionRegionsDurationValue no
|
24087
|
+
'slowMotion/regions/timeRange/start/epoch'
|
24088
|
+
SlowMotionRegionsStartTimeEpoch no
|
24089
|
+
'slowMotion/regions/timeRange/start/flags'
|
24090
|
+
SlowMotionRegionsStartTimeFlags no
|
24091
|
+
'slowMotion/regions/timeRange/start/timescale'
|
24092
|
+
SlowMotionRegionsStartTimeScale no
|
24093
|
+
'slowMotion/regions/timeRange/start/value'
|
24094
|
+
SlowMotionRegionsStartTimeValue no
|
24095
|
+
'studio//name' Studio no+
|
24000
24096
|
|
24001
24097
|
=head2 CanonRaw Tags
|
24002
24098
|
|
@@ -29507,6 +29603,7 @@ C<integer>, C<real>, C<boolean> or C<name> for PDF tags.
|
|
29507
29603
|
'Keywords' Keywords string+
|
29508
29604
|
'ModDate' ModifyDate date
|
29509
29605
|
'Producer' Producer string
|
29606
|
+
'SourceModified' SourceModified date
|
29510
29607
|
'Subject' Subject string
|
29511
29608
|
'Title' Title string
|
29512
29609
|
'Trapped' Trapped string!
|
@@ -30284,7 +30381,7 @@ for the official QuickTime specification.
|
|
30284
30381
|
The tags below are extracted from timed metadata in QuickTime and other
|
30285
30382
|
formats of video files when the ExtractEmbedded option is used. Although
|
30286
30383
|
most of these tags are combined into the single table below, ExifTool
|
30287
|
-
currently reads
|
30384
|
+
currently reads 103 different types of timed GPS metadata from video files.
|
30288
30385
|
|
30289
30386
|
Tag Name Writable
|
30290
30387
|
-------- --------
|
@@ -31192,7 +31289,7 @@ MP4 sample table box.
|
|
31192
31289
|
'stps' PartialSyncSamples no
|
31193
31290
|
'stsc' SampleToChunk? no
|
31194
31291
|
'stsd' AudioSampleDesc QuickTime AudioSampleDesc
|
31195
|
-
|
31292
|
+
VisualSampleDesc QuickTime VisualSampleDesc
|
31196
31293
|
HintSampleDesc QuickTime HintSampleDesc
|
31197
31294
|
MetaSampleDesc QuickTime MetaSampleDesc
|
31198
31295
|
OtherSampleDesc QuickTime OtherSampleDesc
|
@@ -31338,7 +31435,7 @@ Child atoms found in "sinf" and/or "pinf" atoms.
|
|
31338
31435
|
'enda' Endianness no
|
31339
31436
|
'frma' PurchaseFileFormat no
|
31340
31437
|
|
31341
|
-
=head3 QuickTime
|
31438
|
+
=head3 QuickTime VisualSampleDesc Tags
|
31342
31439
|
|
31343
31440
|
ID/Index Tag Name Writable
|
31344
31441
|
-------- -------- --------
|
@@ -31533,6 +31630,7 @@ the config file.
|
|
31533
31630
|
'Lvlm' LevelMeter? rational64s
|
31534
31631
|
'MMA0' MinoltaMMA0 Minolta MMA
|
31535
31632
|
'MMA1' MinoltaMMA1 Minolta MMA
|
31633
|
+
'MUID' MediaUID no
|
31536
31634
|
'MVTG' FujiFilmMVTG EXIF
|
31537
31635
|
'NCDT' NikonNCDT Nikon NCDT
|
31538
31636
|
'PANA' PanasonicPANA Panasonic PANA
|
@@ -32021,7 +32119,7 @@ Tags used in QTIF QuickTime Image Files.
|
|
32021
32119
|
Tag ID Tag Name Writable
|
32022
32120
|
------ -------- --------
|
32023
32121
|
'idat' ImageData no
|
32024
|
-
'idsc' ImageDescription QuickTime
|
32122
|
+
'idsc' ImageDescription QuickTime VisualSampleDesc
|
32025
32123
|
'iicc' ICC_Profile ICC_Profile
|
32026
32124
|
|
32027
32125
|
=head2 RIFF Tags
|
@@ -214,7 +214,7 @@ sub ProcessGoogle($$)
|
|
214
214
|
|
215
215
|
delete $$et{ProcessGoogleTrailer}; # reset flag to process the Google trailer
|
216
216
|
|
217
|
-
return -1 if $$dirInfo{OutFile};
|
217
|
+
return -1 if $$dirInfo{OutFile}; # let caller handle the writing
|
218
218
|
|
219
219
|
# sometimes DirectoryItemLength is missing the Primary entry
|
220
220
|
$len = [ $len ] unless ref $len eq 'ARRAY';
|
@@ -566,7 +566,7 @@ sub WriteCRW($$)
|
|
566
566
|
my $trailPt;
|
567
567
|
while ($success) {
|
568
568
|
# check to see if trailer(s) exist(s)
|
569
|
-
my $trailInfo =
|
569
|
+
my $trailInfo = $et->IdentifyTrailer($raf) or last;
|
570
570
|
# rewrite the trailer(s)
|
571
571
|
$buff = '';
|
572
572
|
$$trailInfo{OutFile} = \$buff;
|
@@ -891,7 +891,7 @@ sub WriteQuickTime($$$)
|
|
891
891
|
$et or return 1; # allow dummy access to autoload this package
|
892
892
|
my ($mdat, @mdat, @mdatEdit, $edit, $track, $outBuff, $co, $term, $delCount);
|
893
893
|
my (%langTags, $canCreate, $delGrp, %boxPos, %didDir, $writeLast, $err, $atomCount);
|
894
|
-
my ($tag, $lastTag, $lastPos, $errStr, $trailer, $buf2, $keysGrp, $keysPath);
|
894
|
+
my ($tag, $lastTag, $lastPos, $errStr, $trailer, $buf2, $keysGrp, $keysPath, $itemIndex);
|
895
895
|
my $outfile = $$dirInfo{OutFile} || return 0;
|
896
896
|
my $raf = $$dirInfo{RAF}; # (will be null for lower-level atoms)
|
897
897
|
my $dataPt = $$dirInfo{DataPt}; # (will be null for top-level atoms)
|
@@ -982,8 +982,25 @@ sub WriteQuickTime($$$)
|
|
982
982
|
$atomCount = $$tagTablePtr{VARS}{ATOM_COUNT} if $$tagTablePtr{VARS};
|
983
983
|
|
984
984
|
$tag = $lastTag = '';
|
985
|
-
|
985
|
+
$itemIndex = 0 if $dirName eq 'ItemPropertyContainer';
|
986
|
+
|
987
|
+
# read ahead to parse item property associations if this is 'iprp' ItemProperties
|
988
|
+
# (necessary to determine which properties belong to primary item in HEIC file)
|
989
|
+
if ($dirName eq 'ItemProperties') {
|
990
|
+
my $pos = $raf->Tell();
|
991
|
+
for (;;) {
|
992
|
+
$raf->Read($buf2, 8) == 8 or last;
|
993
|
+
my $size = Get32u(\$buf2, 0) - 8; # (atom size without 8-byte header)
|
994
|
+
$tag = substr($buf2, 4, 4);
|
995
|
+
last if $size < 0;
|
996
|
+
$tag eq 'ipma' or $raf->Seek($size, 1), next;
|
997
|
+
ParseItemPropAssoc($buf2,$et) if $raf->Read($buf2,$size) == $size;
|
998
|
+
last;
|
999
|
+
}
|
1000
|
+
$raf->Seek($pos);
|
1001
|
+
}
|
986
1002
|
for (;;) { # loop through all atoms at this level
|
1003
|
+
++$itemIndex if defined $itemIndex;
|
987
1004
|
$lastPos = $raf->Tell();
|
988
1005
|
# stop processing if we reached a known trailer
|
989
1006
|
if ($trailer and $lastPos >= $$trailer[1]) {
|
@@ -1186,6 +1203,32 @@ sub WriteQuickTime($$$)
|
|
1186
1203
|
}
|
1187
1204
|
undef $tagInfo if $tagInfo and $$tagInfo{AddedUnknown};
|
1188
1205
|
|
1206
|
+
# don't write this tag unless associated with the primary item
|
1207
|
+
# (Note: This relies on iinf and dimg coming before iprp)
|
1208
|
+
if (defined $itemIndex and $$et{ItemInfo}) {
|
1209
|
+
my $items = $$et{ItemInfo};
|
1210
|
+
my ($id, $prop, $isPrimary);
|
1211
|
+
my $primary = $$et{PrimaryItem} || 0;
|
1212
|
+
my $pitem = $$items{$primary} || { };
|
1213
|
+
$$pitem{RefersTo} or $$pitem{RefersTo} = { };
|
1214
|
+
ItemID2: foreach $id (reverse sort { $a <=> $b } keys %$items) {
|
1215
|
+
next unless $$items{$id}{Association};
|
1216
|
+
my $item = $$items{$id};
|
1217
|
+
foreach $prop (@{$$item{Association}}) {
|
1218
|
+
next unless $prop == $itemIndex;
|
1219
|
+
my $dont = $dontInherit{$tag} || 0;
|
1220
|
+
last unless $id == $primary or (not $dont and
|
1221
|
+
($$item{RefersTo} and $$item{RefersTo}{$primary})) or
|
1222
|
+
# special case to assume this property belongs to the primary
|
1223
|
+
# image if it belongs to an item referred to by the primary
|
1224
|
+
($dont != 1 and $$pitem{RefersTo}{$id});
|
1225
|
+
$isPrimary = 1;
|
1226
|
+
last ItemID2;
|
1227
|
+
}
|
1228
|
+
}
|
1229
|
+
undef $tagInfo unless $isPrimary;
|
1230
|
+
}
|
1231
|
+
|
1189
1232
|
if ($tagInfo and (not defined $$tagInfo{Writable} or $$tagInfo{Writable})) {
|
1190
1233
|
my $subdir = $$tagInfo{SubDirectory};
|
1191
1234
|
my ($newData, @chunkOffset);
|
@@ -1225,6 +1268,7 @@ sub WriteQuickTime($$$)
|
|
1225
1268
|
OutFile => $outfile,
|
1226
1269
|
NoRefTest=> 1, # don't check directory references
|
1227
1270
|
WriteGroup => $$tagInfo{WriteGroup},
|
1271
|
+
Permanent => $$tagInfo{Permanent},
|
1228
1272
|
# initialize array to hold details about chunk offset table
|
1229
1273
|
# (each entry has 3-5 items: 0=atom type, 1=table offset, 2=table size,
|
1230
1274
|
# 3=optional base offset, 4=optional item ID)
|
@@ -1564,7 +1608,9 @@ sub WriteQuickTime($$$)
|
|
1564
1608
|
}
|
1565
1609
|
if ($msg) {
|
1566
1610
|
# (allow empty sample description for non-audio/video handler types, eg. 'url ', 'meta')
|
1567
|
-
|
1611
|
+
# (also, incorrectly written 'mett' SampleEntry by Google phones,
|
1612
|
+
# see https://exiftool.org/forum/index.php?msg=91158)
|
1613
|
+
if ($avType{$$et{MediaType}}) {
|
1568
1614
|
my $grp = $$et{CUR_WRITE_GROUP} || $parent;
|
1569
1615
|
$et->Error("$msg for $grp");
|
1570
1616
|
return $rtnErr;
|
@@ -4262,9 +4262,11 @@ sub WriteDirectory($$$;$)
|
|
4262
4262
|
if ($permanentDir{$grp0} and not ($$dirInfo{TagInfo} and $$dirInfo{TagInfo}{Deletable})) {
|
4263
4263
|
undef $delFlag;
|
4264
4264
|
}
|
4265
|
-
# (never delete an entire QuickTime group)
|
4266
4265
|
if ($delFlag) {
|
4267
|
-
if (
|
4266
|
+
if ($$dirInfo{Permanent}) {
|
4267
|
+
$self->Warn("Not deleting permanent $dirName directory");
|
4268
|
+
undef $grp1;
|
4269
|
+
} elsif (($grp0 =~ /^(MakerNotes)$/ or $grp1 =~ /^(IFD0|ExifIFD|MakerNotes)$/) and
|
4268
4270
|
$self->IsRawType() and
|
4269
4271
|
# allow non-permanent MakerNote directories to be deleted (ie. NikonCapture)
|
4270
4272
|
(not $$dirInfo{TagInfo} or not defined $$dirInfo{TagInfo}{Permanent} or
|
@@ -6027,7 +6029,7 @@ sub WriteJPEG($$)
|
|
6027
6029
|
Write($outfile, $hdr, $s, $segData) or $err = 1;
|
6028
6030
|
my ($buff, $endPos, $trailInfo);
|
6029
6031
|
my $delPreview = $$self{DEL_PREVIEW};
|
6030
|
-
$trailInfo = IdentifyTrailer($raf) unless $$delGroup{Trailer};
|
6032
|
+
$trailInfo = $self->IdentifyTrailer($raf) unless $$delGroup{Trailer};
|
6031
6033
|
my $nvTrail = $self->GetNewValueHash($Image::ExifTool::Extra{Trailer});
|
6032
6034
|
unless ($oldOutfile or $delPreview or $trailInfo or $$delGroup{Trailer} or $nvTrail or
|
6033
6035
|
$$self{HiddenData})
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
51
51
|
require Exporter;
|
52
52
|
|
53
|
-
$VERSION = '3.
|
53
|
+
$VERSION = '3.71';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -1247,8 +1247,22 @@ my %sPantryItem = (
|
|
1247
1247
|
NAMESPACE => 'pdfx',
|
1248
1248
|
NOTES => q{
|
1249
1249
|
PDF extension tags. This namespace is used to store application-defined PDF
|
1250
|
-
information, so there are
|
1251
|
-
created to enable writing of XMP-pdfx information.
|
1250
|
+
information, so there are few pre-defined tags. User-defined tags must be
|
1251
|
+
created to enable writing of other XMP-pdfx information.
|
1252
|
+
},
|
1253
|
+
SourceModified => {
|
1254
|
+
Name => 'SourceModified',
|
1255
|
+
Groups => { 2 => 'Time' },
|
1256
|
+
Shift => 'Time',
|
1257
|
+
ValueConv => 'require Image::ExifTool::PDF; $val = Image::ExifTool::PDF::ConvertPDFDate($val)',
|
1258
|
+
ValueConvInv => q{
|
1259
|
+
require Image::ExifTool::PDF;
|
1260
|
+
$val = Image::ExifTool::PDF::WritePDFValue($self,$val,"date");
|
1261
|
+
$val =~ tr/()//d;
|
1262
|
+
return $val;
|
1263
|
+
},
|
1264
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
1265
|
+
PrintConvInv => '$self->InverseDateTime($val)',
|
1252
1266
|
},
|
1253
1267
|
);
|
1254
1268
|
|
@@ -402,6 +402,7 @@ my %sLocationDetails = (
|
|
402
402
|
STRUCT_NAME => 'LocationDetails',
|
403
403
|
NAMESPACE => 'Iptc4xmpExt',
|
404
404
|
GROUPS => { 2 => 'Location' },
|
405
|
+
NOTES => 'Note that the GPS elements of this structure are in the "exif" namespace.',
|
405
406
|
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
406
407
|
City => { },
|
407
408
|
CountryCode => { },
|
@@ -420,6 +421,7 @@ my %sLocationDetails = (
|
|
420
421
|
PrintConvInv => '$val=~s/\s*m$//;$val',
|
421
422
|
},
|
422
423
|
GPSAltitudeRef => {
|
424
|
+
Namespace => 'exif',
|
423
425
|
Writable => 'integer',
|
424
426
|
PrintConv => {
|
425
427
|
OTHER => sub {
|