teslacam-merge 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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