exiftool_vendored 11.71.0 → 11.75.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +39 -0
- data/bin/MANIFEST +17 -4
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +23 -26
- data/bin/config_files/convert_regions.config +139 -5
- data/bin/exiftool +21 -21
- data/bin/fmt_files/gpx.fmt +2 -1
- data/bin/fmt_files/gpx_wpt.fmt +2 -1
- data/bin/fmt_files/kml.fmt +2 -2
- data/bin/fmt_files/kml_track.fmt +46 -0
- data/bin/lib/Image/ExifTool.pm +42 -33
- data/bin/lib/Image/ExifTool.pod +21 -21
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
- data/bin/lib/Image/ExifTool/Canon.pm +2 -1
- data/bin/lib/Image/ExifTool/CanonCustom.pm +30 -4
- data/bin/lib/Image/ExifTool/Exif.pm +36 -63
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
- data/bin/lib/Image/ExifTool/Lang/ru.pm +4233 -503
- data/bin/lib/Image/ExifTool/MakerNotes.pm +6 -12
- data/bin/lib/Image/ExifTool/Nikon.pm +2 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +751 -0
- data/bin/lib/Image/ExifTool/Photoshop.pm +12 -11
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -5
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +316 -44
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +72 -55
- data/bin/lib/Image/ExifTool/TagLookup.pm +73 -7
- data/bin/lib/Image/ExifTool/TagNames.pod +249 -18
- data/bin/lib/Image/ExifTool/Text.pm +160 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -2
- data/bin/lib/Image/ExifTool/Writer.pl +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +19 -26
- data/bin/lib/Image/ExifTool/XMP2.pl +46 -9
- data/bin/lib/Image/ExifTool/XMPStruct.pl +14 -4
- data/bin/perl-Image-ExifTool.spec +19 -19
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +6 -7
- data/bin/config_files/blueskysea.config +0 -101
- data/bin/config_files/dji.config +0 -131
- data/bin/config_files/mini0806.config +0 -99
- data/bin/config_files/thinkware.config +0 -144
data/bin/config_files/dji.config
DELETED
@@ -1,131 +0,0 @@
|
|
1
|
-
#------------------------------------------------------------------------------
|
2
|
-
# File: dji.config
|
3
|
-
#
|
4
|
-
# Description: This config file defines Composite tags to convert embedded
|
5
|
-
# metadata in videos from DJI drones
|
6
|
-
#
|
7
|
-
# Usage: exiftool -config dji.config -ee FILE
|
8
|
-
#
|
9
|
-
# Example command to create .gpx log file from DJI video
|
10
|
-
# (requires gpx.fmt available in the full Exiftool distribution):
|
11
|
-
#
|
12
|
-
# exiftool -config dji.config -p gpx.fmt -ee -api QuickTimeUTC FILE
|
13
|
-
#
|
14
|
-
# Requires: ExifTool version 10.75 or later
|
15
|
-
#
|
16
|
-
# Revisions: 2018/03/23 - P. Harvey Created
|
17
|
-
#------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
%Image::ExifTool::UserDefined = (
|
20
|
-
'Image::ExifTool::Composite' => {
|
21
|
-
GROUPS => { 2 => 'Location' },
|
22
|
-
#
|
23
|
-
# Example embedded "Text" from a DJI FC6310:
|
24
|
-
#
|
25
|
-
# "F/3.5, SS 1000, ISO 100, EV 0, GPS (8.6499, 53.1665, 18), D 24.26m,
|
26
|
-
# H 6.00m, H.S 2.10m/s, V.S 0.00m/s \n"
|
27
|
-
#
|
28
|
-
# F/ = F Number
|
29
|
-
# SS = shutter speed
|
30
|
-
# ISO = ISO
|
31
|
-
# GPS = (longitude, latitude, ???)
|
32
|
-
# D = horizontal distance from home point
|
33
|
-
# H = vertical distance from home point
|
34
|
-
# H.S = horizontal speed
|
35
|
-
# V.S = vertical speed
|
36
|
-
#
|
37
|
-
# Note: SubDoc flag is set for all these tags so they will be generated for
|
38
|
-
# all embedded documents
|
39
|
-
#
|
40
|
-
GPSDateTime => {
|
41
|
-
Description => 'GPS Date/Time',
|
42
|
-
Groups => { 2 => 'Time' },
|
43
|
-
SubDoc => 1,
|
44
|
-
Require => {
|
45
|
-
0 => 'Text',
|
46
|
-
1 => 'SampleTime',
|
47
|
-
2 => 'Main:CreateDate',
|
48
|
-
3 => 'Main:Duration',
|
49
|
-
},
|
50
|
-
# (assuming CreateDate is the end time of the video, we subtract
|
51
|
-
# Duration because a SampleTime of zero is at the start of the video)
|
52
|
-
ValueConv => q{
|
53
|
-
my $diff = $val[1] - $val[3];
|
54
|
-
my $sign = $diff =~ s/^-// ? '-' : '';
|
55
|
-
my $time = $val[2] . '.000';
|
56
|
-
ShiftTime($time, "${sign}0:0:$diff");
|
57
|
-
return $time;
|
58
|
-
},
|
59
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
60
|
-
},
|
61
|
-
GPSLatitude => {
|
62
|
-
SubDoc => 1,
|
63
|
-
Require => { 0 => 'Text' },
|
64
|
-
RawConv => '$val[0] =~ /GPS \(\S+,\s*([-+]?\d*\.\d+)/ ? $1 : undef',
|
65
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
66
|
-
},
|
67
|
-
GPSLongitude => {
|
68
|
-
SubDoc => 1,
|
69
|
-
Require => { 0 => 'Text' },
|
70
|
-
RawConv => '$val[0] =~ /GPS \(([-+]?\d*\.\d+),/ ? $1 : undef',
|
71
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
72
|
-
},
|
73
|
-
GPSAltitude => {
|
74
|
-
SubDoc => 1,
|
75
|
-
Require => { 0 => 'Text' },
|
76
|
-
RawConv => '$val[0] =~ /,\s*H\s+([-+]?\d+\.?\d*)m/ ? $1 : undef',
|
77
|
-
},
|
78
|
-
GPSSpeed => {
|
79
|
-
SubDoc => 1,
|
80
|
-
Require => { 0 => 'Text' },
|
81
|
-
RawConv => '$val[0] =~ /,\s*H.S\s+([-+]?\d+\.?\d*)/ ? $1 * 3.6 : undef',
|
82
|
-
},
|
83
|
-
GPSSpeedRef => {
|
84
|
-
SubDoc => 1,
|
85
|
-
Require => { 0 => 'Text' },
|
86
|
-
RawConv => '$val[0] =~ /,\s*H.S\s+([-+]?\d+\.?\d*)m\/s/ ? "K" : undef',
|
87
|
-
PrintConv => { K => 'km/h', M => 'mph', N => 'knots' },
|
88
|
-
},
|
89
|
-
Distance => {
|
90
|
-
SubDoc => 1,
|
91
|
-
Require => { 0 => 'Text' },
|
92
|
-
RawConv => '$val[0] =~ /,\s*D\s+(\d+\.?\d*)m/ ? $1 * 3.6 : undef',
|
93
|
-
PrintConv => '"$val m"',
|
94
|
-
},
|
95
|
-
VerticalSpeed => {
|
96
|
-
SubDoc => 1,
|
97
|
-
Require => { 0 => 'Text' },
|
98
|
-
RawConv => '$val[0] =~ /,\s*V.S\s+([-+]?\d+\.?\d*)/ ? $1 : undef',
|
99
|
-
PrintConv => '"$val m/s"',
|
100
|
-
},
|
101
|
-
FNumber => {
|
102
|
-
Groups => { 2 => 'Camera' },
|
103
|
-
SubDoc => 1,
|
104
|
-
Require => { 0 => 'Text' },
|
105
|
-
RawConv => '$val[0] =~ /\bF\/(\d+\.?\d*)/ ? $1 : undef',
|
106
|
-
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
107
|
-
},
|
108
|
-
ExposureTime => {
|
109
|
-
Groups => { 2 => 'Camera' },
|
110
|
-
SubDoc => 1,
|
111
|
-
Require => { 0 => 'Text' },
|
112
|
-
RawConv => '$val[0] =~ /\bSS\s+(\d+\.?\d*)/ ? 1/$1 : undef',
|
113
|
-
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
114
|
-
},
|
115
|
-
ExposureCompensation => {
|
116
|
-
Groups => { 2 => 'Camera' },
|
117
|
-
SubDoc => 1,
|
118
|
-
Require => { 0 => 'Text' },
|
119
|
-
RawConv => '$val[0] =~ /\bEV\s+([-+]?\d+\.?\d*)(\/\d+)?/ ? ($1 / ($2 || 1)) : undef',
|
120
|
-
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
121
|
-
},
|
122
|
-
ISO => {
|
123
|
-
Groups => { 2 => 'Camera' },
|
124
|
-
SubDoc => 1,
|
125
|
-
Require => { 0 => 'Text' },
|
126
|
-
RawConv => '$val[0] =~ /\bISO\s+(\d+\.?\d*)/ ? $1 : undef',
|
127
|
-
},
|
128
|
-
},
|
129
|
-
);
|
130
|
-
|
131
|
-
1; #end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
#------------------------------------------------------------------------------
|
2
|
-
# File: mini0806.config
|
3
|
-
#
|
4
|
-
# Description: This config file defines Composite tags to convert embedded
|
5
|
-
# metadata in Mini 0806 dashcam videos
|
6
|
-
#
|
7
|
-
# Usage: exiftool -config mini0806.config -ee FILE
|
8
|
-
#
|
9
|
-
# Example command to create .gpx log file from Mini 0806 video
|
10
|
-
# (requires gpx.fmt available in the full Exiftool distribution):
|
11
|
-
#
|
12
|
-
# exiftool -config mini0806.config -p gpx.fmt -ee FILE
|
13
|
-
#
|
14
|
-
# Requires: ExifTool version 10.75 or later
|
15
|
-
#
|
16
|
-
# Revisions: 2019/05/28 - P. Harvey Created
|
17
|
-
#------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
%Image::ExifTool::UserDefined = (
|
20
|
-
'Image::ExifTool::Composite' => {
|
21
|
-
GROUPS => { 2 => 'Location' },
|
22
|
-
#
|
23
|
-
# Example embedded "Text" from a Mini 0806 MOV video:
|
24
|
-
#
|
25
|
-
# "A,270519,201555.000,3356.8925,N,08420.2071,W,000.0,331.0M,+01.84,-09.80,-00.61;\n"
|
26
|
-
#
|
27
|
-
# Note: SubDoc flag is set for all these tags so they will be generated for
|
28
|
-
# all embedded documents
|
29
|
-
#
|
30
|
-
GPSDateTime => {
|
31
|
-
Description => 'GPS Date/Time',
|
32
|
-
Groups => { 2 => 'Time' },
|
33
|
-
SubDoc => 1,
|
34
|
-
Require => 'Text',
|
35
|
-
RawConv => q{
|
36
|
-
if ($val[0] =~ /^A,(\d{2})(\d{2})(\d{2}),(\d{2})(\d{2})(\d{2}(\.\d+)?)/) {
|
37
|
-
return "20$3:$2:$1 $4:$5:$6Z";
|
38
|
-
} else {
|
39
|
-
return undef;
|
40
|
-
}
|
41
|
-
},
|
42
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
43
|
-
},
|
44
|
-
GPSLatitude => {
|
45
|
-
SubDoc => 1,
|
46
|
-
Require => 'Text',
|
47
|
-
RawConv => q{
|
48
|
-
if ($val[0] =~ /^A,.*?,.*?,(\d{2})(\d+\.\d+),([NS])/) {
|
49
|
-
return ($1 + $2/60) * ($3 eq 'S' ? -1 : 1);
|
50
|
-
} else {
|
51
|
-
return undef;
|
52
|
-
}
|
53
|
-
},
|
54
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
55
|
-
},
|
56
|
-
GPSLongitude => {
|
57
|
-
SubDoc => 1,
|
58
|
-
Require => 'Text',
|
59
|
-
RawConv => q{
|
60
|
-
if ($val[0] =~ /^A,.*?,.*?,.*?,.*?,(\d{3})(\d+\.\d+),([EW])/) {
|
61
|
-
return ($1 + $2/60) * ($3 eq 'W' ? -1 : 1);
|
62
|
-
} else {
|
63
|
-
return undef;
|
64
|
-
}
|
65
|
-
},
|
66
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
67
|
-
},
|
68
|
-
GPSAltitude => {
|
69
|
-
SubDoc => 1,
|
70
|
-
Require => 'Text',
|
71
|
-
RawConv => q{
|
72
|
-
my @a = split ',', $val[0];
|
73
|
-
return undef unless $a[0] eq 'A' and $a[8] =~ s/M$//;
|
74
|
-
return $a[8];
|
75
|
-
},
|
76
|
-
PrintConv => '"$val m"',
|
77
|
-
},
|
78
|
-
GPSSpeed => {
|
79
|
-
SubDoc => 1,
|
80
|
-
Require => 'Text',
|
81
|
-
RawConv => q{
|
82
|
-
my @a = split ',', $val[0];
|
83
|
-
return undef unless $a[0] eq 'A' and $a[7] =~ /^\d+\.\d+$/;
|
84
|
-
return $a[7]; # (NC)
|
85
|
-
},
|
86
|
-
},
|
87
|
-
Accelerometer => {
|
88
|
-
SubDoc => 1,
|
89
|
-
Require => 'Text',
|
90
|
-
RawConv => q{
|
91
|
-
my @a = split ',', $val[0];
|
92
|
-
return undef unless $a[11] =~ s/;\s*$//;
|
93
|
-
return "$a[9] $a[10] $a[11]";
|
94
|
-
},
|
95
|
-
},
|
96
|
-
},
|
97
|
-
);
|
98
|
-
|
99
|
-
1; #end
|
@@ -1,144 +0,0 @@
|
|
1
|
-
#------------------------------------------------------------------------------
|
2
|
-
# File: thinkware.config
|
3
|
-
#
|
4
|
-
# Description: This config file defines Composite tags to decode subtitle text
|
5
|
-
# from Thinkware dashcam videos
|
6
|
-
#
|
7
|
-
# Usage: exiftool -config thinkware.config -ee FILE
|
8
|
-
#
|
9
|
-
# Example command to create .gpx log file from Thinkware video
|
10
|
-
# (requires gpx.fmt available in the full Exiftool distribution):
|
11
|
-
#
|
12
|
-
# exiftool -config thinkware.config -p gpx.fmt -ee -api QuickTimeUTC FILE
|
13
|
-
#
|
14
|
-
# Requires: ExifTool version 10.75 or later
|
15
|
-
#
|
16
|
-
# Revisions: 2019/09/30 - P. Harvey Created
|
17
|
-
#------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
use Time::Local;
|
20
|
-
|
21
|
-
#------------------------------------------------------------------------------
|
22
|
-
# Decode GPS from Thinkware subtitle Text
|
23
|
-
# Inputs: 0) ExifTool ref, 1) Text value
|
24
|
-
# Returns: Hash containing GPS tags
|
25
|
-
sub Image::ExifTool::UserDefined::DecodeGPS($$)
|
26
|
-
{
|
27
|
-
my ($et, $val) = @_;
|
28
|
-
unless ($$et{ThinkwareInfo}{Text} and $val eq $$et{ThinkwareInfo}{Text}) {
|
29
|
-
my %gps;
|
30
|
-
$$et{ThinkwareInfo}{GPS} = \%gps;
|
31
|
-
$$et{ThinkwareInfo}{Text} = $val;
|
32
|
-
#
|
33
|
-
# Example embedded "Text" from a Thinkware Q800:
|
34
|
-
#
|
35
|
-
# "gsensori,4,512,-67,-12,100;GNRMC,161313.00,A,4529.87489,N,07337.01215,W,6.225,35.34,310819,,,A*52..;
|
36
|
-
# CAR,0,0,0,0.0,0,0,0,0,0,0,0,0"
|
37
|
-
#
|
38
|
-
if ($val =~ /[A-Z]{2}RMC,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/ and
|
39
|
-
# do some basic sanity checks on the date
|
40
|
-
$13 <= 31 and $14 <= 12 and $15 <= 99)
|
41
|
-
{
|
42
|
-
$gps{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
|
43
|
-
$gps{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
|
44
|
-
$gps{speed} = $11 if length $11;
|
45
|
-
$gps{track} = $12 if length $12;
|
46
|
-
my $year = $15 + ($15 >= 70 ? 1900 : 2000);
|
47
|
-
$gps{datetime} = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ', $year, $14, $13, $1, $2, $3);
|
48
|
-
}
|
49
|
-
}
|
50
|
-
return $$et{ThinkwareInfo}{GPS};
|
51
|
-
}
|
52
|
-
|
53
|
-
# Composite tags to decode information from subtitle Text
|
54
|
-
%Image::ExifTool::UserDefined = (
|
55
|
-
'Image::ExifTool::Composite' => {
|
56
|
-
GROUPS => { 2 => 'Location' },
|
57
|
-
#
|
58
|
-
# Note: SubDoc flag is set for all these tags so they will be generated for
|
59
|
-
# all embedded documents
|
60
|
-
#
|
61
|
-
GPSDateTime => {
|
62
|
-
Description => 'GPS Date/Time',
|
63
|
-
Groups => { 2 => 'Time' },
|
64
|
-
SubDoc => 1,
|
65
|
-
Require => 'Text',
|
66
|
-
RawConv => q{
|
67
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
68
|
-
return $$gps{datetime};
|
69
|
-
},
|
70
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
71
|
-
},
|
72
|
-
GPSLatitude => {
|
73
|
-
SubDoc => 1,
|
74
|
-
Require => 'Text',
|
75
|
-
RawConv => q{
|
76
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
77
|
-
return $$gps{lat};
|
78
|
-
},
|
79
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
80
|
-
},
|
81
|
-
GPSLongitude => {
|
82
|
-
SubDoc => 1,
|
83
|
-
Require => 'Text',
|
84
|
-
RawConv => q{
|
85
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
86
|
-
return $$gps{lon};
|
87
|
-
},
|
88
|
-
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
89
|
-
},
|
90
|
-
GPSSpeed => {
|
91
|
-
SubDoc => 1,
|
92
|
-
Require => 'Text',
|
93
|
-
RawConv => q{
|
94
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
95
|
-
# convert from knots to km/hr
|
96
|
-
return defined $$gps{speed} ? $$gps{speed} * 1.852 : undef;
|
97
|
-
},
|
98
|
-
},
|
99
|
-
GPSSpeedRef => {
|
100
|
-
SubDoc => 1,
|
101
|
-
Require => 'Text',
|
102
|
-
RawConv => q{
|
103
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
104
|
-
return defined $$gps{speed} ? 'K' : undef;
|
105
|
-
},
|
106
|
-
PrintConv => { K => 'km/h', M => 'mph', N => 'knots' },
|
107
|
-
},
|
108
|
-
GPSTrack => {
|
109
|
-
SubDoc => 1,
|
110
|
-
Require => 'Text',
|
111
|
-
RawConv => q{
|
112
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
113
|
-
return $$gps{track};
|
114
|
-
},
|
115
|
-
},
|
116
|
-
GPSTrackRef => {
|
117
|
-
SubDoc => 1,
|
118
|
-
Require => 'Text',
|
119
|
-
RawConv => q{
|
120
|
-
my $gps = Image::ExifTool::UserDefined::DecodeGPS($self, $val[0]);
|
121
|
-
return defined $$gps{track} ? 'T' : undef;
|
122
|
-
},
|
123
|
-
PrintConv => { M => 'Magnetic North', T => 'True North' },
|
124
|
-
},
|
125
|
-
GSensor => {
|
126
|
-
SubDoc => 1,
|
127
|
-
Require => 'Text',
|
128
|
-
RawConv => q{
|
129
|
-
return undef unless $val[0] =~ /gsensori,(.*?)(;|$)/;
|
130
|
-
return $1;
|
131
|
-
},
|
132
|
-
},
|
133
|
-
Car => {
|
134
|
-
SubDoc => 1,
|
135
|
-
Require => 'Text',
|
136
|
-
RawConv => q{
|
137
|
-
return undef unless $val[0] =~ /CAR,(.*?)(;|$)/;
|
138
|
-
return $1;
|
139
|
-
},
|
140
|
-
},
|
141
|
-
},
|
142
|
-
);
|
143
|
-
|
144
|
-
1; #end
|