photein 0.2.5 → 0.2.7
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/README.md +3 -0
- data/lib/photein/image.rb +2 -1
- data/lib/photein/media_file.rb +1 -1
- data/lib/photein/version.rb +1 -1
- data/lib/photein/video.rb +35 -7
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54be61c96b880e74c19b8e59bc9d171388af6607beb29a51edaee077f98175dc
|
4
|
+
data.tar.gz: b22b16e57161d098756efd2ccf6608ac92c89b51f54e4824dae3485763583cc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3394739447961693bed792f05c3de4b3a676cdaf856796d60057a35f5c1d3c98e72af07e89ffa5dd1ab516b2602619656f461c8db09db4f942d6846ea57c2303
|
7
|
+
data.tar.gz: 7100474561dfc8423404247b1ca713b3df6740d63329fe8eb657a55f45d6e6a8d17a17d54acb93bd8aff51c83334269b9486cca8cbeda0af066c2210fceeb0e8
|
data/README.md
CHANGED
@@ -106,12 +106,15 @@ $ gem install photein
|
|
106
106
|
* Ruby 2.6+
|
107
107
|
* [ExifTool][]
|
108
108
|
* [MediaInfo][]
|
109
|
+
files)
|
109
110
|
* ImageMagick (for `--optimize-for=web` option)
|
110
111
|
* OptiPNG (for `--optimize-for=web` option)
|
111
112
|
* ffmpeg (for `--optimize-for={web,desktop}` options)
|
113
|
+
* [mkvtoolnix][] (for `--shift-timestamp` / `--local-tz` options on .webm
|
112
114
|
|
113
115
|
[ExifTool]: https://exiftool.org/
|
114
116
|
[MediaInfo]: https://mediaarea.net/MediaInfo
|
117
|
+
[mkvtoolnix]: https://mkvtoolnix.download/
|
115
118
|
|
116
119
|
Usage
|
117
120
|
-----
|
data/lib/photein/image.rb
CHANGED
@@ -14,6 +14,7 @@ module Photein
|
|
14
14
|
.jpg
|
15
15
|
.jpeg
|
16
16
|
.dng
|
17
|
+
.raf
|
17
18
|
.heic
|
18
19
|
.png
|
19
20
|
).freeze
|
@@ -96,7 +97,7 @@ module Photein
|
|
96
97
|
end
|
97
98
|
|
98
99
|
def non_optimizable_format?(lib_type)
|
99
|
-
return true if lib_type == :web &&
|
100
|
+
return true if lib_type == :web && %w(.dng .raf).include?(extname)
|
100
101
|
|
101
102
|
return false
|
102
103
|
end
|
data/lib/photein/media_file.rb
CHANGED
@@ -58,7 +58,7 @@ module Photein
|
|
58
58
|
update_exif_tags(dest_path.realdirpath.to_s) if !config.dry_run
|
59
59
|
end
|
60
60
|
end.compact.map(&:join).then do |threads|
|
61
|
-
# e.g.: with --library-web only,
|
61
|
+
# e.g.: with --library-web only, raw files are skipped, so DON'T DELETE!
|
62
62
|
FileUtils.rm(path, noop: threads.empty? || config.dry_run || config.keep)
|
63
63
|
end
|
64
64
|
end
|
data/lib/photein/version.rb
CHANGED
data/lib/photein/video.rb
CHANGED
@@ -21,6 +21,7 @@ module Photein
|
|
21
21
|
SUPPORTED_FORMATS = %w(
|
22
22
|
.mov
|
23
23
|
.mp4
|
24
|
+
.mkv
|
24
25
|
.webm
|
25
26
|
).freeze
|
26
27
|
|
@@ -111,7 +112,20 @@ module Photein
|
|
111
112
|
@local_tz ||= ActiveSupport::TimeZone[
|
112
113
|
MiniExiftool.new(path).then(&method(:gps_coords))&.then(&method(:coords_to_tz)) ||
|
113
114
|
config.local_tz ||
|
114
|
-
|
115
|
+
# Hardcode common zones that observe DST
|
116
|
+
# (Time.now.gmt_offset produces the wrong value during DST)
|
117
|
+
{
|
118
|
+
'PST' => 'America/Los_Angeles',
|
119
|
+
'PDT' => 'America/Los_Angeles',
|
120
|
+
'EST' => 'America/New_York',
|
121
|
+
'EDT' => 'America/New_York',
|
122
|
+
'CST' => 'America/Chicago',
|
123
|
+
'CDT' => 'America/Chicago',
|
124
|
+
'MST' => 'America/Denver',
|
125
|
+
'MDT' => 'America/Denver',
|
126
|
+
'GMT' => 'Europe/London',
|
127
|
+
'BST' => 'Europe/London',
|
128
|
+
}.fetch(Time.now.zone, Time.now.gmt_offset)
|
115
129
|
]
|
116
130
|
end
|
117
131
|
|
@@ -147,14 +161,28 @@ module Photein
|
|
147
161
|
return if config.timestamp_delta.zero? && config.local_tz.nil?
|
148
162
|
|
149
163
|
args = []
|
150
|
-
args.push("-AllDates=#{new_timestamp.strftime('%Y:%m:%d\\ %H:%M:%S')}") if config.timestamp_delta != 0
|
151
164
|
|
152
|
-
|
153
|
-
|
154
|
-
args.push("-
|
155
|
-
|
165
|
+
case path.extname
|
166
|
+
when '.mp4', '.mov'
|
167
|
+
args.push("-AllDates=#{new_timestamp.strftime('%Y:%m:%d\\ %H:%M:%S')}") if config.timestamp_delta != 0
|
168
|
+
|
169
|
+
if (lat, lon = config.tz_coordinates)
|
170
|
+
args.push("-xmp:GPSLatitude=#{lat}")
|
171
|
+
args.push("-xmp:GPSLongitude=#{lon}")
|
172
|
+
end
|
173
|
+
|
174
|
+
system("exiftool -overwrite_original #{args.join(' ')} #{path}", out: File::NULL, err: File::NULL)
|
175
|
+
when '.webm', '.mkv'
|
176
|
+
args.concat(['--set', "date=#{new_timestamp.strftime('%FT%H:%M:%SZ')}"]) if config.timestamp_delta != 0
|
156
177
|
|
157
|
-
|
178
|
+
# FIXME
|
179
|
+
if (lat, lon = config.tz_coordinates)
|
180
|
+
args.push("-xmp:GPSLatitude=#{lat}")
|
181
|
+
args.push("-xmp:GPSLongitude=#{lon}")
|
182
|
+
end
|
183
|
+
|
184
|
+
system("mkvpropedit #{path} #{args.join(' ')}", out: File::NULL, err: File::NULL)
|
185
|
+
end
|
158
186
|
end
|
159
187
|
end
|
160
188
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: photein
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Lue
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-06-28 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activesupport
|
@@ -57,14 +57,14 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '2.
|
60
|
+
version: '2.14'
|
61
61
|
type: :runtime
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '2.
|
67
|
+
version: '2.14'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
name: mini_magick
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|