carrierwave-video 0.2.2 → 0.2.3
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.rdoc +6 -0
- data/carrierwave-video.gemspec +1 -1
- data/lib/carrierwave-video/version.rb +1 -1
- data/lib/carrierwave/video.rb +5 -0
- data/lib/carrierwave/video/ffmpeg_options.rb +29 -23
- data/spec/lib/carrierwave_video_spec.rb +53 -5
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -37,6 +37,9 @@ Pass in options to process:
|
|
37
37
|
Resolution passed to ffmpeg:
|
38
38
|
resolution: "640x360"
|
39
39
|
|
40
|
+
If you want to keep the same resolution:
|
41
|
+
resolution: :same
|
42
|
+
|
40
43
|
Watermark:
|
41
44
|
watermark: {
|
42
45
|
path: File.join(Rails.root, "directory", "file.png"),
|
@@ -59,6 +62,9 @@ They will be called with the parameters sent to process.
|
|
59
62
|
Logging:
|
60
63
|
logger: :method #returns object that behaves like Logger
|
61
64
|
|
65
|
+
Custom:
|
66
|
+
streamio-ffmpeg accepts custom params. You may pass these in but keep in mind the watermarking params will be appended if there were any.
|
67
|
+
|
62
68
|
= OGG/OGV & Theora
|
63
69
|
|
64
70
|
If you want to transcode to OGV format, I recommend using ffmpeg2theora. It works better.
|
data/carrierwave-video.gemspec
CHANGED
@@ -25,5 +25,5 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_runtime_dependency 'streamio-ffmpeg'
|
26
26
|
s.add_runtime_dependency 'carrierwave'
|
27
27
|
s.requirements << 'ruby, version 1.9 or greater'
|
28
|
-
s.requirements << 'ffmpeg, version 0.
|
28
|
+
s.requirements << 'ffmpeg, version 0.11.1 or greater with libx256, libfaac, libtheora, libvorbid, libvpx enabled'
|
29
29
|
end
|
data/lib/carrierwave/video.rb
CHANGED
@@ -49,6 +49,11 @@ module CarrierWave
|
|
49
49
|
|
50
50
|
with_trancoding_callbacks do
|
51
51
|
file = ::FFMPEG::Movie.new(current_path)
|
52
|
+
|
53
|
+
if opts[:resolution] == :same
|
54
|
+
@options.format_options[:resolution] = file.resolution
|
55
|
+
end
|
56
|
+
|
52
57
|
file.transcode(tmp_path, @options.format_options, @options.encoder_options)
|
53
58
|
File.rename tmp_path, current_path
|
54
59
|
end
|
@@ -2,12 +2,13 @@ module CarrierWave
|
|
2
2
|
module Video
|
3
3
|
class FfmpegOptions
|
4
4
|
attr_reader :watermark_path, :watermark_position, :watermark_pixels,
|
5
|
-
:format, :resolution, :callbacks
|
5
|
+
:format, :resolution, :custom, :callbacks
|
6
6
|
|
7
7
|
def initialize(format, options)
|
8
8
|
@format = format.to_s
|
9
9
|
@watermark = options[:watermark].present?
|
10
10
|
@resolution = options[:resolution] || "640x360"
|
11
|
+
@custom = options[:custom]
|
11
12
|
@callbacks = options[:callbacks] || {}
|
12
13
|
@logger = options[:logger]
|
13
14
|
@unparsed = options
|
@@ -32,29 +33,34 @@ module CarrierWave
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def format_options
|
35
|
-
format_options
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
36
|
+
@format_options ||= begin
|
37
|
+
result = case format
|
38
|
+
when "mp4"
|
39
|
+
{
|
40
|
+
video_codec: 'libx264',
|
41
|
+
audio_codec: 'libfaac',
|
42
|
+
custom: "-qscale 0 -vpre slow -vpre baseline -g 30 #{watermark_params}"
|
43
|
+
}
|
44
|
+
when "webm"
|
45
|
+
{
|
46
|
+
video_codec: 'libvpx',
|
47
|
+
audio_codec: 'libvorbis',
|
48
|
+
custom: "-b 1500k -ab 160000 -f webm -g 30 #{watermark_params}"
|
49
|
+
}
|
50
|
+
when "ogv"
|
51
|
+
{
|
52
|
+
video_codec: 'libtheora',
|
53
|
+
audio_codec: 'libvorbis',
|
54
|
+
custom: "-b 1500k -ab 160000 -g 30 #{watermark_params}"
|
55
|
+
}
|
56
|
+
else
|
57
|
+
{}
|
58
|
+
end
|
59
|
+
|
60
|
+
{ resolution: resolution }.merge(result).tap do |h|
|
61
|
+
h[:custom] = "#{custom} #{watermark_params}".strip if custom.present?
|
62
|
+
end
|
56
63
|
end
|
57
|
-
{ resolution: resolution }.merge(format_options)
|
58
64
|
end
|
59
65
|
|
60
66
|
def watermark?
|
@@ -48,9 +48,10 @@ describe CarrierWave::Video do
|
|
48
48
|
FFMPEG::Movie.should_receive(:new).and_return(movie)
|
49
49
|
end
|
50
50
|
|
51
|
-
context "no options set" do
|
51
|
+
context "with no options set" do
|
52
52
|
before { File.should_receive(:rename) }
|
53
|
-
|
53
|
+
|
54
|
+
it "calls transcode with correct format options" do
|
54
55
|
movie.should_receive(:transcode) do |path, opts, codec_opts|
|
55
56
|
codec_opts.should == {preserve_aspect_ratio: :width}
|
56
57
|
|
@@ -63,9 +64,17 @@ describe CarrierWave::Video do
|
|
63
64
|
|
64
65
|
converter.encode_video(format)
|
65
66
|
end
|
67
|
+
|
68
|
+
it "provides a default for the resolution" do
|
69
|
+
movie.should_receive(:transcode) do |path, opts, codec_opts|
|
70
|
+
opts[:resolution].should == '640x360'
|
71
|
+
end
|
72
|
+
|
73
|
+
converter.encode_video(format)
|
74
|
+
end
|
66
75
|
end
|
67
76
|
|
68
|
-
context "callbacks set" do
|
77
|
+
context "with callbacks set" do
|
69
78
|
before { movie.should_receive(:transcode) }
|
70
79
|
let(:opts) do
|
71
80
|
{ callbacks: {
|
@@ -108,7 +117,7 @@ describe CarrierWave::Video do
|
|
108
117
|
end
|
109
118
|
end
|
110
119
|
|
111
|
-
context "logger set" do
|
120
|
+
context "with logger set" do
|
112
121
|
let(:logger) { mock }
|
113
122
|
before do
|
114
123
|
converter.model.stub(:logger).and_return(logger)
|
@@ -141,7 +150,7 @@ describe CarrierWave::Video do
|
|
141
150
|
end
|
142
151
|
end
|
143
152
|
|
144
|
-
context "watermark set" do
|
153
|
+
context "with watermark set" do
|
145
154
|
before { File.should_receive(:rename) }
|
146
155
|
|
147
156
|
it "appends watermark params to custom params for ffmpeg" do
|
@@ -178,6 +187,45 @@ describe CarrierWave::Video do
|
|
178
187
|
})
|
179
188
|
end
|
180
189
|
end
|
190
|
+
|
191
|
+
context "with resolution set to :same" do
|
192
|
+
before do
|
193
|
+
File.should_receive(:rename)
|
194
|
+
movie.stub(:resolution).and_return('1280x720')
|
195
|
+
end
|
196
|
+
|
197
|
+
it "sets the output resolution to match that of the input" do
|
198
|
+
movie.should_receive(:transcode) do |path, opts, codec_opts|
|
199
|
+
opts[:resolution].should == '1280x720'
|
200
|
+
end
|
201
|
+
|
202
|
+
converter.encode_video(format, resolution: :same)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
context "with custom passed in" do
|
207
|
+
before do
|
208
|
+
File.should_receive(:rename)
|
209
|
+
end
|
210
|
+
|
211
|
+
it "takes the provided custom param" do
|
212
|
+
movie.should_receive(:transcode) do |path, opts, codec_opts|
|
213
|
+
opts[:custom].should == '-preset slow' # a la changes in ffmpeg 0.11.1
|
214
|
+
end
|
215
|
+
|
216
|
+
converter.encode_video(format, custom: '-preset slow')
|
217
|
+
end
|
218
|
+
|
219
|
+
it "maintains the watermark params" do
|
220
|
+
movie.should_receive(:transcode) do |path, opts, codec_opts|
|
221
|
+
opts[:custom].should == "-preset slow -vf \"movie=path/to/file.png [logo]; [in][logo] overlay= [out]\""
|
222
|
+
end
|
223
|
+
|
224
|
+
converter.encode_video(format, custom: '-preset slow', watermark: {
|
225
|
+
path: 'path/to/file.png'
|
226
|
+
})
|
227
|
+
end
|
228
|
+
end
|
181
229
|
end
|
182
230
|
|
183
231
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 3
|
9
|
+
version: 0.2.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- rheaton
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-07-30 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: "0"
|
120
120
|
requirements:
|
121
121
|
- ruby, version 1.9 or greater
|
122
|
-
- ffmpeg, version 0.
|
122
|
+
- ffmpeg, version 0.11.1 or greater with libx256, libfaac, libtheora, libvorbid, libvpx enabled
|
123
123
|
rubyforge_project: carrierwave-video
|
124
124
|
rubygems_version: 1.3.7
|
125
125
|
signing_key:
|