teslacam-merge 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c454a054f75c62785f06dad71f23a2f26ceacd75f261c8ffdbefc96f64942cd5
4
- data.tar.gz: e7b7256e16be5868d489db58c6ae5c682075a5790b941bd5414fd8742fa62857
3
+ metadata.gz: 64008345c39af5336762d10962b743355cce74bc376656242b5265d38eb73568
4
+ data.tar.gz: f3a150683e4ae613037c43bfce3f7fbdac981e833058206df33f33ca58bc4967
5
5
  SHA512:
6
- metadata.gz: 1a03cc0ccf4929faa055bbd3ae6d4a2d1475ca25f789b9a52f86b72c2c44de4136413f312cf0520e032761142a8dbde5cc8c79f6efc4a77d41a173e7dc0a1c9c
7
- data.tar.gz: 21fd8321e18f5dd150e10a5b24e80eb4c8bfeabac6ca19e8f3bec9d2e474d38e479385c074a255a8e0ba6bbdff6a7bf27068febbac11f9c3befedafa71af28ae
6
+ metadata.gz: 5e908cf4113a1fb9563248de1e16ff62b42bb5e1a6a1f7b63e4c83436abd0c36a84457da02b8b2d1c30de11cf9b7854e9c300703564393d811dc33d7c9196716
7
+ data.tar.gz: 3e984790348d66549dc672ca685a8ead81885210f0bea6d5cd8699943a89b1b503c31fd11b73d3f94713f67a226d23ef89c692dba320cb057d80cee71d23e59c
data/README.md CHANGED
@@ -3,8 +3,15 @@
3
3
  Combine TeslaCam videos into a single output video. Allows you to set
4
4
  the output video size, and add a title to the output video.
5
5
 
6
- Example:
6
+ ![teslacam-merge example](example.jpg)
7
+
8
+ Features:
9
+ * Uses [ffmpeg][] to combine output videos.
10
+ * Scale results.
11
+ * Automatically sorts input videos, and handles missing videos.
12
+ * Extracts timestamp from video file names.
7
13
 
14
+ Example:
8
15
  ```
9
16
  # combine given videos, set the title to "sample video", and write the
10
17
  # result to the file "sentry-example.mp4"
@@ -20,4 +27,14 @@ Install `teslacam-merge` via [RubyGems][]:
20
27
  gem install teslacam-merge
21
28
  ```
22
29
 
30
+ ## Presets
31
+ Valid values for the `--preset` option:
32
+
33
+ * `full`: output size: 2560x1920, font size: 32
34
+ * `large`: output size: 1920x1440, font size: 32
35
+ * `medium`: output size: 1440x1080, font size: 24
36
+ * `half`: output size: 1280x960, font size: 18
37
+ * `small`: output size: 640x480, font size: 16
38
+
23
39
  [rubygems]: https://rubygems.org/
40
+ [ffmpeg]: https://ffmpeg.org/
@@ -1,5 +1,5 @@
1
1
  module TeslaCam
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
 
4
4
  LIB_DIR = File.join(__dir__, 'teslacam').freeze
5
5
 
@@ -7,6 +7,7 @@ require 'logger'
7
7
  module TeslaCam::CLI
8
8
  LIB_DIR = File.join(__dir__, 'cli').freeze
9
9
  autoload :Config, File.join(LIB_DIR, 'config.rb')
10
+ autoload :Presets, File.join(LIB_DIR, 'presets.rb')
10
11
 
11
12
  #
12
13
  # Run from command-line.
@@ -21,7 +22,6 @@ module TeslaCam::CLI
21
22
  # create model from config and log
22
23
  model = ::TeslaCam::Model.new(config, log)
23
24
 
24
-
25
25
  # exec command
26
26
  log.debug { 'exec: %p' % [model.command] }
27
27
  ::Kernel.exec(*model.command)
@@ -8,35 +8,68 @@ class TeslaCam::CLI::Config < ::TeslaCam::Config
8
8
  # initialize defaults
9
9
  super()
10
10
 
11
+ defaults = ::TeslaCam::Config::DEFAULTS
11
12
  @inputs = OptionParser.new do |o|
12
- o.banner = "Usage: #{app} [options] <videos>"
13
+ o.banner = "Usage: #{app} [options] <input_videos>"
13
14
  o.separator ''
14
15
 
15
16
  o.separator 'Options:'
16
- o.on('-o', '--output [FILE]', String, 'Output file.') do |val|
17
+ o.on(
18
+ '-o', '--output [FILE]', String,
19
+ 'Output file (required).'
20
+ ) do |val|
17
21
  @output = val
18
22
  end
19
23
 
20
- o.on('-s', '--size [SIZE]', String, 'Output size (WxH).') do |val|
24
+ o.on(
25
+ '-s', '--size [SIZE]', String,
26
+ 'Output size (WxH).',
27
+ 'Defaults to %dx%d if unspecified.' % [
28
+ defaults[:size].w * 2,
29
+ defaults[:size].h * 2,
30
+ ]
31
+ ) do |val|
21
32
  md = val.match(/^(?<w>\d+)x(?<h>\d+)$/)
22
33
  raise "invalid size: #{val}" unless md
23
34
  @size = ::TeslaCam::Size.new(md[:w].to_i / 2, md[:h].to_i / 2)
24
35
  end
25
36
 
26
- o.on('--font-size [SIZE]', Integer, 'Font size.') do |val|
37
+ o.on(
38
+ '--font-size [SIZE]', Integer,
39
+ 'Font size.',
40
+ 'Defaults to %d if unspecified.' % [defaults[:font_size]]
41
+ ) do |val|
27
42
  raise "invalid font size: #{val}" if val < 1
28
43
  @font_size = val
29
44
  end
30
45
 
31
- o.on('--bg-color [COLOR]', Integer, 'Background color.') do |val|
32
- raise "invalid font size: #{val}" if val < 1
46
+ o.on(
47
+ '--bg-color [COLOR]', Integer,
48
+ 'Background color.',
49
+ 'Defaults to %s if unspecified.' % [defaults[:missing_color]]
50
+ ) do |val|
33
51
  @missing_color = val
34
52
  end
35
53
 
36
- o.on('-t', '--title [TITLE]', String, 'Video title.') do |val|
54
+ o.on(
55
+ '-t', '--title [TITLE]', String,
56
+ 'Video title.',
57
+ 'Defaults to "" if unspecified.'
58
+ ) do |val|
37
59
  @title = val
38
60
  end
39
61
 
62
+ presets = ::TeslaCam::CLI::Presets.list.join(', ')
63
+ o.on(
64
+ '-p', '--preset [name]', String,
65
+ 'Use preset.',
66
+ 'One of: %s.' % [::TeslaCam::CLI::Presets.list.join(', ')]
67
+ ) do |val|
68
+ p = ::TeslaCam::CLI::Presets.get(val)
69
+ @size = ::TeslaCam::Size.new(p[:size][0] / 2, p[:size][1] / 2)
70
+ @font_size = p[:font_size]
71
+ end
72
+
40
73
  o.on('-q', '--quiet', 'Silence ffmpeg output.') do
41
74
  @quiet = true
42
75
  end
@@ -0,0 +1,47 @@
1
+ require 'optparse'
2
+
3
+ #
4
+ # Parse config from command-line arguments
5
+ #
6
+ module TeslaCam::CLI::Presets
7
+ PRESETS = {
8
+ full: {
9
+ size: [2560, 1920],
10
+ font_size: 32,
11
+ },
12
+
13
+ # x0.75
14
+ large: {
15
+ size: [1920, 1440],
16
+ font_size: 32,
17
+ },
18
+
19
+ # x0.5625
20
+ medium: {
21
+ size: [1440, 1080],
22
+ font_size: 24,
23
+ },
24
+
25
+ # x0.5
26
+ half: {
27
+ size: [1280, 960],
28
+ font_size: 18,
29
+ },
30
+
31
+ # x0.25
32
+ small: {
33
+ size: [640, 480],
34
+ font_size: 16,
35
+ },
36
+ }
37
+
38
+ def self.get(s)
39
+ id = s.intern
40
+ raise "unknown preset: #{s}" unless PRESETS.key?(id)
41
+ PRESETS[id]
42
+ end
43
+
44
+ def self.list
45
+ PRESETS.keys.map { |v| v.to_s }.sort
46
+ end
47
+ end
@@ -11,6 +11,13 @@ class TeslaCam::Config
11
11
  :missing_color,
12
12
  :title
13
13
 
14
+ DEFAULTS = {
15
+ title: '',
16
+ size: ::TeslaCam::Size.new(320, 240),
17
+ font_size: 16,
18
+ missing_color: 'black',
19
+ }.freeze
20
+
14
21
  #
15
22
  # Create a new Config instance and set defaults.
16
23
  #
@@ -22,15 +29,15 @@ class TeslaCam::Config
22
29
  @quiet = false
23
30
 
24
31
  # video title
25
- @title = ''
32
+ @title = DEFAULTS[:title]
26
33
 
27
34
  # output size
28
- @size = ::TeslaCam::Size.new(320, 240)
35
+ @size = DEFAULTS[:size]
29
36
 
30
37
  # font size
31
- @font_size = 16
38
+ @font_size = DEFAULTS[:font_size]
32
39
 
33
40
  # background color for missing videos
34
- @missing_color = 'black'
41
+ @missing_color = DEFAULTS[:missing_color]
35
42
  end
36
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teslacam-merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Duncan
@@ -24,6 +24,7 @@ files:
24
24
  - lib/teslacam.rb
25
25
  - lib/teslacam/cli.rb
26
26
  - lib/teslacam/cli/config.rb
27
+ - lib/teslacam/cli/presets.rb
27
28
  - lib/teslacam/config.rb
28
29
  - lib/teslacam/filter.rb
29
30
  - lib/teslacam/model.rb