media-preset 0.0.1 → 0.0.2
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.
- data/README.md +1 -1
- data/lib/media/preset.rb +46 -43
- data/lib/media/preset/android.rb +30 -39
- data/lib/media/preset/apple.rb +32 -41
- data/lib/media/preset/base.rb +42 -0
- data/lib/media/preset/h264.rb +25 -34
- data/lib/media/preset/kindle.rb +25 -34
- data/lib/media/preset/mp3.rb +22 -21
- data/lib/media/preset/mp4.rb +29 -31
- data/lib/media/preset/playstation.rb +23 -32
- data/lib/media/preset/prores.rb +23 -34
- data/lib/media/preset/theora.rb +24 -26
- data/lib/media/preset/version.rb +1 -1
- data/lib/media/preset/vorbis.rb +26 -25
- data/lib/media/preset/webm.rb +32 -46
- metadata +14 -12
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
List presets:
|
22
22
|
|
23
|
-
Media::Preset.all
|
23
|
+
Media::Preset.all # => {:android=>[:galaxy_y, :galaxy_mini, :wildfire, :galaxy_ace, :admire, :droid_charge, :galaxy_s, :galaxy_s_ii, :galaxy_s_plus, :epic_touch_4g, :desire, :droid_incredible, :thunderbolt, :evo_4g, :zio, :galaxy_s_iii, :rezound, :one_x, :galaxy_tab, :galaxy_tab_10_1, :galaxy_note, :infuse_4g, :galaxy_note_ii, :sensation, :droid_x, :droid_x2, :razr, :xoom, :small, :normal, :large_720p, :large_1080p], :apple=>[:ipod, :ipod_touch, :iphone, :ipod_touch_4, :iphone_4, :iphone_5, :ipad_3, :ipad, :apple_universal, :apple_tv], :h264=>[:hd, :sd], :webm=>[:hd, :sd], :prores=>[:normal_1080p, :normal_720p], :kindle=>[:fire], :playstation=>[:psp], :mp4=>nil, :mp3=>nil, :theora=>nil, :vorbis=>nil}
|
24
24
|
|
25
25
|
Use a preset:
|
26
26
|
|
data/lib/media/preset.rb
CHANGED
@@ -17,79 +17,82 @@ require_relative 'preset/webm'
|
|
17
17
|
module Media
|
18
18
|
module Preset
|
19
19
|
extend self
|
20
|
+
include Enumerable
|
20
21
|
|
21
22
|
def all
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
h264: H264.presets.keys,
|
26
|
-
webm: WebM.presets.keys,
|
27
|
-
prores: ProRes.presets.keys,
|
28
|
-
kindle: Kindle.presets.keys,
|
29
|
-
playstation: Playstation.presets.keys,
|
30
|
-
mp4: nil,
|
31
|
-
mp3: nil,
|
32
|
-
theora: nil,
|
33
|
-
vorbis: nil
|
34
|
-
}
|
23
|
+
[Android, Apple, H264, WebM, ProRes, Kindle, Playstation, MP4, MP3, Theora, Vorbis].each_with_object([]) do |group, obj|
|
24
|
+
group.presets.keys.map {|preset| obj << group.new(preset) }
|
25
|
+
end
|
35
26
|
end
|
36
27
|
|
37
|
-
def
|
38
|
-
|
28
|
+
def each &block
|
29
|
+
all.each &block
|
30
|
+
end
|
31
|
+
|
32
|
+
def android(preset)
|
33
|
+
raise 'invalid preset' unless Android.preset? preset
|
39
34
|
|
40
|
-
Android
|
35
|
+
Android.new(preset)
|
41
36
|
end
|
42
37
|
|
43
|
-
def apple(preset
|
44
|
-
raise 'invalid preset' unless Apple.
|
38
|
+
def apple(preset)
|
39
|
+
raise 'invalid preset' unless Apple.preset? preset
|
45
40
|
|
46
|
-
Apple
|
41
|
+
Apple.new(preset)
|
47
42
|
end
|
48
43
|
|
49
|
-
def h264(preset
|
50
|
-
raise 'invalid preset' unless H264.
|
44
|
+
def h264(preset)
|
45
|
+
raise 'invalid preset' unless H264.preset? preset
|
51
46
|
|
52
|
-
H264
|
47
|
+
H264.new(preset)
|
53
48
|
end
|
54
49
|
|
55
|
-
def webm(preset
|
56
|
-
raise 'invalid preset' unless WebM.
|
50
|
+
def webm(preset)
|
51
|
+
raise 'invalid preset' unless WebM.preset? preset
|
57
52
|
|
58
|
-
WebM
|
53
|
+
WebM.new(preset)
|
59
54
|
end
|
60
55
|
|
61
|
-
def prores(preset
|
62
|
-
raise 'invalid preset' unless ProRes.
|
63
|
-
|
64
|
-
ProRes
|
56
|
+
def prores(preset)
|
57
|
+
raise 'invalid preset' unless ProRes.preset? preset
|
58
|
+
|
59
|
+
ProRes.new(preset)
|
65
60
|
end
|
66
61
|
|
67
|
-
def kindle(preset
|
68
|
-
raise 'invalid preset' unless Kindle.
|
62
|
+
def kindle(preset)
|
63
|
+
raise 'invalid preset' unless Kindle.preset? preset
|
69
64
|
|
70
|
-
Kindle
|
65
|
+
Kindle.new(preset)
|
71
66
|
end
|
72
67
|
|
73
|
-
def playstation(preset
|
74
|
-
raise 'invalid preset' unless Playstation.
|
68
|
+
def playstation(preset)
|
69
|
+
raise 'invalid preset' unless Playstation.preset? preset
|
75
70
|
|
76
|
-
Playstation
|
71
|
+
Playstation.new(preset)
|
77
72
|
end
|
78
73
|
|
79
|
-
def mp4(
|
80
|
-
MP4
|
74
|
+
def mp4(preset=:default)
|
75
|
+
raise 'invalid preset' unless MP4.preset? preset
|
76
|
+
|
77
|
+
MP4.new(preset)
|
81
78
|
end
|
82
79
|
|
83
|
-
def mp3(
|
84
|
-
MP3
|
80
|
+
def mp3(preset=:default)
|
81
|
+
raise 'invalid preset' unless MP3.preset? preset
|
82
|
+
|
83
|
+
MP3.new(preset)
|
85
84
|
end
|
86
85
|
|
87
|
-
def theora(
|
88
|
-
Theora
|
86
|
+
def theora(preset=:default)
|
87
|
+
raise 'invalid preset' unless Theora.preset? preset
|
88
|
+
|
89
|
+
Theora.new(preset)
|
89
90
|
end
|
90
91
|
|
91
|
-
def vorbis(
|
92
|
-
Vorbis
|
92
|
+
def vorbis(preset=:default)
|
93
|
+
raise 'invalid preset' unless Vorbis.preset? preset
|
94
|
+
|
95
|
+
Vorbis.new(preset)
|
93
96
|
end
|
94
97
|
end
|
95
98
|
end
|
data/lib/media/preset/android.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
extend self
|
5
|
+
class Android < Base
|
5
6
|
|
6
|
-
def presets
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
galaxy_y: {height: 240, width: 320},
|
9
10
|
galaxy_mini: {height: 240, width: 320},
|
@@ -39,44 +40,34 @@ module Media
|
|
39
40
|
large_1080p: {height: 1920, width: 1080}
|
40
41
|
}
|
41
42
|
end
|
43
|
+
|
44
|
+
private
|
42
45
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
def extension
|
47
|
+
'mp4'
|
48
|
+
end
|
49
|
+
|
50
|
+
def conversion(input, output)
|
51
|
+
Media.convert do |c|
|
52
|
+
c.options y: true
|
47
53
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
o.options(
|
66
|
-
acodec: 'aac',
|
67
|
-
ab: '160k',
|
68
|
-
strict: 'experimental',
|
69
|
-
s: Media.size(width: @width, height: @height),
|
70
|
-
vcodec: 'libx264',
|
71
|
-
preset: 'slow',
|
72
|
-
'profile:v' => 'baseline',
|
73
|
-
level: 30,
|
74
|
-
maxrate: 10000000,
|
75
|
-
bufsize: 10000000,
|
76
|
-
f: 'mp4',
|
77
|
-
threads: 0
|
78
|
-
)
|
79
|
-
end
|
54
|
+
c.input input
|
55
|
+
|
56
|
+
c.output output do |o|
|
57
|
+
o.options(
|
58
|
+
acodec: 'aac',
|
59
|
+
ab: '160k',
|
60
|
+
strict: 'experimental',
|
61
|
+
s: Media.size(width: preset.width, height: preset.height),
|
62
|
+
vcodec: 'libx264',
|
63
|
+
preset: 'slow',
|
64
|
+
'profile:v' => 'baseline',
|
65
|
+
level: 30,
|
66
|
+
maxrate: 10000000,
|
67
|
+
bufsize: 10000000,
|
68
|
+
f: 'mp4',
|
69
|
+
threads: 0
|
70
|
+
)
|
80
71
|
end
|
81
72
|
end
|
82
73
|
end
|
data/lib/media/preset/apple.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
extend self
|
5
|
+
class Apple < Base
|
5
6
|
|
6
|
-
def presets
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
ipod: {height: 320, width: 480},
|
9
10
|
ipod_touch: {height: 480, width: 640},
|
@@ -17,46 +18,36 @@ module Media
|
|
17
18
|
apple_tv: {height: 720, width: 1280}
|
18
19
|
}
|
19
20
|
end
|
20
|
-
|
21
|
-
class Base
|
22
|
-
def initialize(args)
|
23
|
-
@width = args.fetch(:width) {raise 'width required'}
|
24
|
-
@height = args.fetch(:height) {raise 'height required'}
|
25
|
-
|
26
|
-
@input = args.fetch(:input) {raise 'input required'}
|
27
|
-
@output = args.fetch(:output) {raise 'output required'}
|
28
|
-
end
|
29
|
-
|
30
|
-
def call(&block)
|
31
|
-
conversion.call(&block)
|
32
|
-
end
|
33
21
|
|
34
|
-
|
22
|
+
private
|
35
23
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
24
|
+
def extension
|
25
|
+
'mov'
|
26
|
+
end
|
27
|
+
|
28
|
+
def conversion(input, output)
|
29
|
+
Media.convert do |c|
|
30
|
+
c.options y: true
|
31
|
+
|
32
|
+
c.input input
|
33
|
+
|
34
|
+
c.output output do |o|
|
35
|
+
o.options(
|
36
|
+
acodec: 'aac',
|
37
|
+
ac: 2,
|
38
|
+
strict: 'experimental',
|
39
|
+
ab: '160k',
|
40
|
+
s: Media.size(width: preset.width, height: preset.height),
|
41
|
+
vcodec: 'libx264',
|
42
|
+
preset: 'slow',
|
43
|
+
'profile:v' => 'baseline',
|
44
|
+
level: 30,
|
45
|
+
maxrate: 10000000,
|
46
|
+
bufsize: 10000000,
|
47
|
+
'b:v' => '1200k',
|
48
|
+
f: 'mp4',
|
49
|
+
threads: 0
|
50
|
+
)
|
60
51
|
end
|
61
52
|
end
|
62
53
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Media
|
4
|
+
module Preset
|
5
|
+
class Base
|
6
|
+
|
7
|
+
def self.presets
|
8
|
+
{}
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.preset?(preset)
|
12
|
+
!!presets[preset]
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize preset
|
16
|
+
@preset = preset
|
17
|
+
end
|
18
|
+
|
19
|
+
def call input, output, &block
|
20
|
+
conversion(input, output).call &block
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
[self.class.name.gsub(/^.*::/, ''), @preset, extension].map(&:downcase).join '.'
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def preset
|
30
|
+
OpenStruct.new self.class.presets[@preset]
|
31
|
+
end
|
32
|
+
|
33
|
+
def extension
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
def conversion(input, output)
|
38
|
+
raise NotImplementedError
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/media/preset/h264.rb
CHANGED
@@ -1,48 +1,39 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
extend self
|
5
|
+
class H264 < Base
|
5
6
|
|
6
|
-
def presets
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
hd: {height: 720, width: 1280},
|
9
10
|
sd: {height: 480, width: 640}
|
10
11
|
}
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
def initialize(args)
|
15
|
-
@width = args.fetch(:width) {raise 'width required'}
|
16
|
-
@height = args.fetch(:height) {raise 'height required'}
|
17
|
-
|
18
|
-
@input = args.fetch(:input) {raise 'input required'}
|
19
|
-
@output = args.fetch(:output) {raise 'output required'}
|
20
|
-
end
|
21
|
-
|
22
|
-
def call(&block)
|
23
|
-
conversion.call(&block)
|
24
|
-
end
|
14
|
+
private
|
25
15
|
|
26
|
-
|
16
|
+
def extension
|
17
|
+
'mp4'
|
18
|
+
end
|
27
19
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
20
|
+
def conversion(input, output)
|
21
|
+
Media.convert do |c|
|
22
|
+
c.options y: true
|
23
|
+
|
24
|
+
c.input input
|
25
|
+
|
26
|
+
c.output output do |o|
|
27
|
+
o.options(
|
28
|
+
s: Media.size(width: preset.width, height: preset.height),
|
29
|
+
vcodec: 'libx264',
|
30
|
+
strict: 'experimental',
|
31
|
+
preset: 'slow',
|
32
|
+
crf: 24,
|
33
|
+
acodec: 'aac',
|
34
|
+
ab: '96k',
|
35
|
+
ar: 44100
|
36
|
+
)
|
46
37
|
end
|
47
38
|
end
|
48
39
|
end
|
data/lib/media/preset/kindle.rb
CHANGED
@@ -1,47 +1,38 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
extend self
|
5
|
+
class Kindle < Base
|
5
6
|
|
6
|
-
def presets
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
fire: {height: 600, width: 1024}
|
9
10
|
}
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
def initialize(args)
|
14
|
-
@width = args.fetch(:width) {raise 'width required'}
|
15
|
-
@height = args.fetch(:height) {raise 'height required'}
|
16
|
-
|
17
|
-
@input = args.fetch(:input) {raise 'input required'}
|
18
|
-
@output = args.fetch(:output) {raise 'output required'}
|
19
|
-
end
|
20
|
-
|
21
|
-
def call(&block)
|
22
|
-
conversion.call(&block)
|
23
|
-
end
|
13
|
+
private
|
24
14
|
|
25
|
-
|
15
|
+
def extension
|
16
|
+
'mp4'
|
17
|
+
end
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
19
|
+
def conversion(input, output)
|
20
|
+
Media.convert do |c|
|
21
|
+
c.options y: true
|
22
|
+
|
23
|
+
c.input input
|
24
|
+
|
25
|
+
c.output output do |o|
|
26
|
+
o.options(
|
27
|
+
s: Media.size(width: preset.width, height: preset.height),
|
28
|
+
acodec: 'aac',
|
29
|
+
ab: '96k',
|
30
|
+
vcodec: 'libx264',
|
31
|
+
vpre: 'slow',
|
32
|
+
f: 'mp4',
|
33
|
+
crf: 22,
|
34
|
+
strict: 'experimental'
|
35
|
+
)
|
45
36
|
end
|
46
37
|
end
|
47
38
|
end
|
data/lib/media/preset/mp3.rb
CHANGED
@@ -1,30 +1,31 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
5
|
+
class MP3 < Base
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
def self.presets
|
8
|
+
{
|
9
|
+
default: {}
|
10
|
+
}
|
11
|
+
end
|
10
12
|
|
11
|
-
|
12
|
-
conversion.call(&block)
|
13
|
-
end
|
13
|
+
private
|
14
14
|
|
15
|
-
|
15
|
+
def extension
|
16
|
+
'mp3'
|
17
|
+
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
19
|
+
def conversion(input, output)
|
20
|
+
Media.convert do |c|
|
21
|
+
c.options y: true
|
22
|
+
|
23
|
+
c.input input
|
24
|
+
|
25
|
+
c.output output do |o|
|
26
|
+
o.options(
|
27
|
+
f: 'mp3'
|
28
|
+
)
|
28
29
|
end
|
29
30
|
end
|
30
31
|
end
|
data/lib/media/preset/mp4.rb
CHANGED
@@ -1,40 +1,38 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
5
|
+
class MP4 < Base
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@input = args.fetch(:input) {raise 'input required'}
|
11
|
-
@output = args.fetch(:output) {raise 'output required'}
|
12
|
-
end
|
7
|
+
def self.presets
|
8
|
+
{
|
9
|
+
default: { height: 800, width: 480 }
|
10
|
+
}
|
11
|
+
end
|
13
12
|
|
14
|
-
|
15
|
-
conversion.call(&block)
|
16
|
-
end
|
13
|
+
private
|
17
14
|
|
18
|
-
|
15
|
+
def extension
|
16
|
+
'mp4'
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
19
|
+
def conversion(input, output)
|
20
|
+
Media.convert do |c|
|
21
|
+
c.options y: true
|
22
|
+
|
23
|
+
c.input input
|
24
|
+
|
25
|
+
c.output output do |o|
|
26
|
+
o.options(
|
27
|
+
acodec: 'aac',
|
28
|
+
strict: 'experimental',
|
29
|
+
ab: '96k',
|
30
|
+
s: Media.size(width: preset.width, height: preset.height),
|
31
|
+
vcodec: 'libx264',
|
32
|
+
preset: 'slow',
|
33
|
+
f: 'mp4',
|
34
|
+
crf: 22
|
35
|
+
)
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
@@ -1,45 +1,36 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
extend self
|
5
|
+
class Playstation < Base
|
5
6
|
|
6
|
-
def presets
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
psp: {height: 240, width: 320}
|
9
10
|
}
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
-
def initialize(args)
|
14
|
-
@width = args.fetch(:width) {raise 'width required'}
|
15
|
-
@height = args.fetch(:height) {raise 'height required'}
|
16
|
-
|
17
|
-
@input = args.fetch(:input) {raise 'input required'}
|
18
|
-
@output = args.fetch(:output) {raise 'output required'}
|
19
|
-
end
|
20
|
-
|
21
|
-
def call(&block)
|
22
|
-
conversion.call(&block)
|
23
|
-
end
|
13
|
+
private
|
24
14
|
|
25
|
-
|
15
|
+
def extension
|
16
|
+
'mp4'
|
17
|
+
end
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
19
|
+
def conversion(input, output)
|
20
|
+
Media.convert do |c|
|
21
|
+
c.options y: true
|
22
|
+
|
23
|
+
c.input input
|
24
|
+
|
25
|
+
c.output output do |o|
|
26
|
+
o.options(
|
27
|
+
s: Media.size(width: preset.width, height: preset.height),
|
28
|
+
b: 512000,
|
29
|
+
ar: 24000,
|
30
|
+
ab: 64000,
|
31
|
+
f: 'psp',
|
32
|
+
r: 29.97
|
33
|
+
)
|
43
34
|
end
|
44
35
|
end
|
45
36
|
end
|
data/lib/media/preset/prores.rb
CHANGED
@@ -1,47 +1,36 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def presets
|
5
|
+
class ProRes < Base
|
6
|
+
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
normal_1080p: {height: 1080, width: 1920, profile: 2},
|
9
10
|
normal_720p: {height: 720, width: 1280, profile: 2}
|
10
11
|
}
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
def initialize(args)
|
15
|
-
@width = args.fetch(:width) {raise 'width required'}
|
16
|
-
@height = args.fetch(:height) {raise 'height required'}
|
17
|
-
|
18
|
-
@profile = args.fetch(:profile) {raise 'profile required'}
|
19
|
-
|
20
|
-
@input = args.fetch(:input) {raise 'input required'}
|
21
|
-
@output = args.fetch(:output) {raise 'output required'}
|
22
|
-
end
|
23
|
-
|
24
|
-
def call(&block)
|
25
|
-
conversion.call(&block)
|
26
|
-
end
|
14
|
+
private
|
27
15
|
|
28
|
-
|
16
|
+
def extension
|
17
|
+
'mov'
|
18
|
+
end
|
29
19
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
20
|
+
def conversion(input, output)
|
21
|
+
Media.convert do |c|
|
22
|
+
c.options y: true
|
23
|
+
|
24
|
+
c.input input
|
25
|
+
|
26
|
+
c.output output do |o|
|
27
|
+
o.options(
|
28
|
+
s: Media.size(width: preset.width, height: preset.height),
|
29
|
+
vcodec: 'prores',
|
30
|
+
profile: preset.profile,
|
31
|
+
acodec: 'pcm_s16be',
|
32
|
+
ar: 48000
|
33
|
+
)
|
45
34
|
end
|
46
35
|
end
|
47
36
|
end
|
data/lib/media/preset/theora.rb
CHANGED
@@ -1,35 +1,33 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
5
|
+
class Theora < Base
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@input = args.fetch(:input) {raise 'input required'}
|
11
|
-
@output = args.fetch(:output) {raise 'output required'}
|
12
|
-
end
|
7
|
+
def self.presets
|
8
|
+
{
|
9
|
+
default: {}
|
10
|
+
}
|
11
|
+
end
|
13
12
|
|
14
|
-
|
15
|
-
conversion.call(&block)
|
16
|
-
end
|
13
|
+
private
|
17
14
|
|
18
|
-
|
15
|
+
def extension
|
16
|
+
'.ogv'
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
19
|
+
def conversion(input, output)
|
20
|
+
Media.convert do |c|
|
21
|
+
c.options y: true
|
22
|
+
|
23
|
+
c.input input
|
24
|
+
|
25
|
+
c.output output do |o|
|
26
|
+
o.options(
|
27
|
+
f: 'ogg',
|
28
|
+
acodec: 'libvorbis',
|
29
|
+
aq: 60
|
30
|
+
)
|
33
31
|
end
|
34
32
|
end
|
35
33
|
end
|
data/lib/media/preset/version.rb
CHANGED
data/lib/media/preset/vorbis.rb
CHANGED
@@ -1,33 +1,34 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
5
|
+
class Vorbis < Base
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def call(&block)
|
12
|
-
conversion.call(&block)
|
13
|
-
end
|
7
|
+
def self.presets
|
8
|
+
{
|
9
|
+
default: {}
|
10
|
+
}
|
11
|
+
end
|
14
12
|
|
15
|
-
|
13
|
+
private
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
15
|
+
def extension
|
16
|
+
'.oga'
|
17
|
+
end
|
18
|
+
|
19
|
+
def conversion(input, output)
|
20
|
+
Media.convert do |c|
|
21
|
+
c.options y: true
|
22
|
+
|
23
|
+
c.input input
|
24
|
+
|
25
|
+
c.output output do |o|
|
26
|
+
o.options(
|
27
|
+
f: 'ogg',
|
28
|
+
vn: true,
|
29
|
+
acodec: 'libvorbis',
|
30
|
+
aq: 60
|
31
|
+
)
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
data/lib/media/preset/webm.rb
CHANGED
@@ -1,60 +1,46 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Media
|
2
4
|
module Preset
|
3
|
-
|
4
|
-
extend self
|
5
|
+
class WebM < Base
|
5
6
|
|
6
|
-
def presets
|
7
|
+
def self.presets
|
7
8
|
{
|
8
9
|
hd: {height: 720, width: 1280, qmax: 51, qmin: 11, slices: 4, video_bitrate: '2M'},
|
9
10
|
sd: {height: 480, width: 640, qmax: 63, qmin: 0, slices: 1, video_bitrate: '768K'}
|
10
11
|
}
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
def initialize(args)
|
15
|
-
@width = args.fetch(:width) {raise 'width required'}
|
16
|
-
@height = args.fetch(:height) {raise 'height required'}
|
17
|
-
|
18
|
-
@video_bitrate = args.fetch(:video_bitrate) {raise 'video_bitrate required'}
|
19
|
-
@qmax = args.fetch(:qmax) {raise 'qmax required'}
|
20
|
-
@qmin = args.fetch(:qmin) {raise 'qmin required'}
|
21
|
-
@slices = args.fetch(:slices) {raise 'slices required'}
|
22
|
-
|
23
|
-
@input = args.fetch(:input) {raise 'input required'}
|
24
|
-
@output = args.fetch(:output) {raise 'output required'}
|
25
|
-
end
|
26
|
-
|
27
|
-
def call(&block)
|
28
|
-
conversion.call(&block)
|
29
|
-
end
|
14
|
+
private
|
30
15
|
|
31
|
-
|
16
|
+
def extension
|
17
|
+
'webm'
|
18
|
+
end
|
32
19
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
20
|
+
def conversion(input, output)
|
21
|
+
Media.convert do |c|
|
22
|
+
c.options y: true
|
23
|
+
|
24
|
+
c.input input
|
25
|
+
|
26
|
+
c.output output do |o|
|
27
|
+
o.options(
|
28
|
+
s: Media.size(width: preset.width, height: preset.height),
|
29
|
+
vcodec: 'libvpx',
|
30
|
+
g: 120,
|
31
|
+
'lag-in-frames' => 16,
|
32
|
+
deadline: 'good',
|
33
|
+
'cpu-used' => 0,
|
34
|
+
vprofile: 0,
|
35
|
+
qmax: preset.qmax,
|
36
|
+
qmin: preset.qmin,
|
37
|
+
slices: preset.slices,
|
38
|
+
'b:v' => preset.video_bitrate,
|
39
|
+
acodec: 'libvorbis',
|
40
|
+
ab: '112k',
|
41
|
+
ar: 44100,
|
42
|
+
f: 'webm'
|
43
|
+
)
|
58
44
|
end
|
59
45
|
end
|
60
46
|
end
|
metadata
CHANGED
@@ -2,16 +2,22 @@
|
|
2
2
|
name: media-preset
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jamie Hodge
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.4
|
20
|
+
none: false
|
15
21
|
prerelease: false
|
16
22
|
type: :runtime
|
17
23
|
name: media
|
@@ -21,13 +27,13 @@ dependencies:
|
|
21
27
|
- !ruby/object:Gem::Version
|
22
28
|
version: 0.0.4
|
23
29
|
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
24
31
|
version_requirements: !ruby/object:Gem::Requirement
|
25
32
|
requirements:
|
26
|
-
- -
|
33
|
+
- - ! '>='
|
27
34
|
- !ruby/object:Gem::Version
|
28
|
-
version: 0
|
35
|
+
version: '0'
|
29
36
|
none: false
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
37
|
prerelease: false
|
32
38
|
type: :development
|
33
39
|
name: rake
|
@@ -37,13 +43,13 @@ dependencies:
|
|
37
43
|
- !ruby/object:Gem::Version
|
38
44
|
version: '0'
|
39
45
|
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
40
47
|
version_requirements: !ruby/object:Gem::Requirement
|
41
48
|
requirements:
|
42
49
|
- - ! '>='
|
43
50
|
- !ruby/object:Gem::Version
|
44
51
|
version: '0'
|
45
52
|
none: false
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
53
|
prerelease: false
|
48
54
|
type: :development
|
49
55
|
name: minitest
|
@@ -53,12 +59,6 @@ dependencies:
|
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '0'
|
55
61
|
none: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ! '>='
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0'
|
61
|
-
none: false
|
62
62
|
description: Media presets
|
63
63
|
email:
|
64
64
|
- jamiehodge@me.com
|
@@ -80,6 +80,8 @@ files:
|
|
80
80
|
bGliL21lZGlhL3ByZXNldC9hbmRyb2lkLnJi
|
81
81
|
- !binary |-
|
82
82
|
bGliL21lZGlhL3ByZXNldC9hcHBsZS5yYg==
|
83
|
+
- !binary |-
|
84
|
+
bGliL21lZGlhL3ByZXNldC9iYXNlLnJi
|
83
85
|
- !binary |-
|
84
86
|
bGliL21lZGlhL3ByZXNldC9oMjY0LnJi
|
85
87
|
- !binary |-
|