rvideo 0.8.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.
- data/ENV +100 -0
- data/ENV2 +129 -0
- data/History.txt +3 -0
- data/License.txt +20 -0
- data/Manifest.txt +44 -0
- data/README.txt +91 -0
- data/RULES +11 -0
- data/Rakefile +163 -0
- data/config/boot.rb +16 -0
- data/lib/rvideo.rb +19 -0
- data/lib/rvideo/errors.rb +21 -0
- data/lib/rvideo/inspector.rb +486 -0
- data/lib/rvideo/reporter.rb +176 -0
- data/lib/rvideo/reporter/views/index.html.erb +27 -0
- data/lib/rvideo/reporter/views/report.css +27 -0
- data/lib/rvideo/reporter/views/report.html.erb +81 -0
- data/lib/rvideo/reporter/views/report.js +9 -0
- data/lib/rvideo/tools/abstract_tool.rb +79 -0
- data/lib/rvideo/tools/ffmpeg.rb +111 -0
- data/lib/rvideo/tools/flvtool2.rb +45 -0
- data/lib/rvideo/transcoder.rb +113 -0
- data/lib/rvideo/version.rb +9 -0
- data/scripts/txt2html +67 -0
- data/setup.rb +1585 -0
- data/spec/files/kites.mp4 +0 -0
- data/spec/fixtures/ffmpeg_builds.yml +28 -0
- data/spec/fixtures/files.yml +374 -0
- data/spec/fixtures/recipes.yml +6 -0
- data/spec/integrations/files/files.yml +361 -0
- data/spec/integrations/formats_spec.rb +287 -0
- data/spec/integrations/inspection_spec.rb +15 -0
- data/spec/integrations/recipes_spec.rb +0 -0
- data/spec/integrations/rvideo_spec.rb +17 -0
- data/spec/integrations/transcoding_spec.rb +9 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/units/abstract_tool_spec.rb +112 -0
- data/spec/units/ffmpeg_spec.rb +703 -0
- data/spec/units/flvtool2_spec.rb +314 -0
- data/spec/units/inspector_spec.rb +41 -0
- data/spec/units/transcoder_spec.rb +140 -0
- data/website/index.html +219 -0
- data/website/index.txt +142 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- metadata +94 -0
@@ -0,0 +1,287 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RVideo
|
4
|
+
context "Using various builds of ffmpeg, RVideo should properly inspect" do
|
5
|
+
specify "a cell-phone MP4 file" do
|
6
|
+
@file = Inspector.new(:raw_response => files(:kites))
|
7
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
8
|
+
@file.raw_duration.should == "00:00:19.6"
|
9
|
+
@file.duration.should == 19600
|
10
|
+
@file.bitrate.should == 98
|
11
|
+
@file.bitrate_units.should == "kb/s"
|
12
|
+
@file.audio_stream_id.should == "#0.1"
|
13
|
+
@file.audio_codec.should == "samr / 0x726D6173"
|
14
|
+
@file.audio_sample_rate.should == 8000
|
15
|
+
@file.audio_sample_units.should == "Hz"
|
16
|
+
@file.audio_channels_string.should == "mono"
|
17
|
+
@file.video_codec.should == "mpeg4"
|
18
|
+
@file.video_stream_id.should == "#0.0"
|
19
|
+
@file.video_colorspace.should == "yuv420p"
|
20
|
+
@file.width.should == 176
|
21
|
+
@file.height.should == 144
|
22
|
+
@file.fps.should == "10.00"
|
23
|
+
end
|
24
|
+
|
25
|
+
specify "fancypants" do
|
26
|
+
@file = Inspector.new(:raw_response => files(:fancypants))
|
27
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
28
|
+
@file.raw_duration.should == "00:00:35.4"
|
29
|
+
@file.duration.should == 35400
|
30
|
+
@file.bitrate.should == 1980
|
31
|
+
@file.bitrate_units.should == "kb/s"
|
32
|
+
@file.audio_stream_id.should == "#0.1"
|
33
|
+
@file.audio_codec.should == "aac"
|
34
|
+
@file.audio_sample_rate.should == 44100
|
35
|
+
@file.audio_sample_units.should == "Hz"
|
36
|
+
@file.audio_channels_string.should == "stereo"
|
37
|
+
@file.video_codec.should == "h264"
|
38
|
+
@file.video_stream_id.should == "#0.0"
|
39
|
+
@file.video_colorspace.should == "yuv420p"
|
40
|
+
@file.width.should == 720
|
41
|
+
@file.height.should == 400
|
42
|
+
@file.fps.should == "23.98"
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "mpeg4/xvid" do
|
46
|
+
@file = Inspector.new(:raw_response => files(:chainsaw))
|
47
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
48
|
+
@file.raw_duration.should == "00:01:09.5"
|
49
|
+
@file.duration.should == 69500
|
50
|
+
@file.bitrate.should == 970
|
51
|
+
@file.bitrate_units.should == "kb/s"
|
52
|
+
@file.audio_stream_id.should == "#0.1"
|
53
|
+
@file.audio_codec.should == "mp2"
|
54
|
+
@file.audio_sample_rate.should == 48000
|
55
|
+
@file.audio_sample_units.should == "Hz"
|
56
|
+
@file.audio_channels_string.should == "stereo"
|
57
|
+
@file.video_codec.should == "mpeg4"
|
58
|
+
@file.video_stream_id.should == "#0.0"
|
59
|
+
@file.video_colorspace.should == "yuv420p"
|
60
|
+
@file.width.should == 624
|
61
|
+
@file.height.should == 352
|
62
|
+
@file.fps.should == "23.98"
|
63
|
+
end
|
64
|
+
|
65
|
+
specify "mpeg1" do
|
66
|
+
@file = Inspector.new(:raw_response => files(:mpeg1_957))
|
67
|
+
@file.container.should == "mpeg"
|
68
|
+
@file.raw_duration.should == "00:00:22.6"
|
69
|
+
@file.duration.should == 22600
|
70
|
+
@file.bitrate.should == 808
|
71
|
+
@file.bitrate_units.should == "kb/s"
|
72
|
+
@file.audio_stream_id.should == "#0.0"
|
73
|
+
@file.audio_codec.should == "mp2"
|
74
|
+
@file.audio_sample_rate.should == 32000
|
75
|
+
@file.audio_sample_units.should == "Hz"
|
76
|
+
@file.audio_channels_string.should == "mono"
|
77
|
+
@file.video_codec.should == "mpeg1video"
|
78
|
+
@file.video_stream_id.should == "#0.1"
|
79
|
+
@file.video_colorspace.should == "yuv420p"
|
80
|
+
@file.width.should == 320
|
81
|
+
@file.height.should == 240
|
82
|
+
@file.fps.should == "25.00"
|
83
|
+
end
|
84
|
+
|
85
|
+
specify "avi/mpeg4/mp3" do
|
86
|
+
@file = Inspector.new(:raw_response => files(:buffy))
|
87
|
+
@file.container.should == "avi"
|
88
|
+
@file.raw_duration.should == "00:43:25.3"
|
89
|
+
@file.duration.should == 2605300
|
90
|
+
@file.bitrate.should == 1266
|
91
|
+
@file.bitrate_units.should == "kb/s"
|
92
|
+
@file.audio_stream_id.should == "#0.1"
|
93
|
+
@file.audio_codec.should == "mp3"
|
94
|
+
@file.audio_sample_rate.should == 48000
|
95
|
+
@file.audio_sample_units.should == "Hz"
|
96
|
+
@file.audio_channels_string.should == "stereo"
|
97
|
+
@file.video_codec.should == "mpeg4"
|
98
|
+
@file.video_stream_id.should == "#0.0"
|
99
|
+
@file.video_colorspace.should == "yuv420p"
|
100
|
+
@file.width.should == 640
|
101
|
+
@file.height.should == 464
|
102
|
+
@file.fps.should == "23.98"
|
103
|
+
end
|
104
|
+
|
105
|
+
specify "HD mpeg2" do
|
106
|
+
@file = Inspector.new(:raw_response => files(:chairprank))
|
107
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
108
|
+
@file.raw_duration.should == "00:00:36.6"
|
109
|
+
@file.duration.should == 36600
|
110
|
+
@file.bitrate.should == 26602
|
111
|
+
@file.bitrate_units.should == "kb/s"
|
112
|
+
@file.audio_stream_id.should == "#0.0"
|
113
|
+
@file.audio_codec.should == "pcm_s16le"
|
114
|
+
@file.audio_sample_rate.should == 48000
|
115
|
+
@file.audio_sample_units.should == "Hz"
|
116
|
+
@file.audio_channels_string.should == "stereo"
|
117
|
+
@file.video_codec.should == "mpeg2video"
|
118
|
+
@file.video_stream_id.should == "#0.1"
|
119
|
+
@file.video_colorspace.should == "yuv420p"
|
120
|
+
@file.width.should == 1440
|
121
|
+
@file.height.should == 1080
|
122
|
+
@file.fps.should == "29.97"
|
123
|
+
end
|
124
|
+
|
125
|
+
specify "h264 (1)" do
|
126
|
+
@file = Inspector.new(:raw_response => files(:fire_short))
|
127
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
128
|
+
@file.raw_duration.should == "00:00:10.0"
|
129
|
+
@file.duration.should == 10000
|
130
|
+
@file.bitrate.should == 23232
|
131
|
+
@file.bitrate_units.should == "kb/s"
|
132
|
+
@file.audio_stream_id.should == "#0.0"
|
133
|
+
@file.audio_codec.should == "pcm_s16le"
|
134
|
+
@file.audio_sample_rate.should == 48000
|
135
|
+
@file.audio_sample_units.should == "Hz"
|
136
|
+
@file.audio_channels_string.should == "stereo"
|
137
|
+
@file.video_codec.should == "h264"
|
138
|
+
@file.video_stream_id.should == "#0.1"
|
139
|
+
@file.video_colorspace.should == "yuv420p"
|
140
|
+
@file.width.should == 1280
|
141
|
+
@file.height.should == 720
|
142
|
+
@file.fps.should == "29.97"
|
143
|
+
end
|
144
|
+
|
145
|
+
specify "h264 video only" do
|
146
|
+
@file = Inspector.new(:raw_response => files(:fire_video_only))
|
147
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
148
|
+
@file.raw_duration.should == "00:00:10.0"
|
149
|
+
@file.duration.should == 10000
|
150
|
+
@file.bitrate.should == 506
|
151
|
+
@file.bitrate_units.should == "kb/s"
|
152
|
+
@file.audio?.should == false
|
153
|
+
@file.audio_codec.should == nil
|
154
|
+
@file.video_codec.should == "h264"
|
155
|
+
@file.video_stream_id.should == "#0.0"
|
156
|
+
@file.video_colorspace.should == "yuv420p"
|
157
|
+
@file.width.should == 320
|
158
|
+
@file.height.should == 180
|
159
|
+
@file.fps.should == "29.97"
|
160
|
+
end
|
161
|
+
|
162
|
+
specify "aac audio only" do
|
163
|
+
@file = Inspector.new(:raw_response => files(:fire_audio_only))
|
164
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
165
|
+
@file.raw_duration.should == "00:00:10.0"
|
166
|
+
@file.duration.should == 10000
|
167
|
+
@file.bitrate.should == 86
|
168
|
+
@file.bitrate_units.should == "kb/s"
|
169
|
+
@file.audio_stream_id.should == "#0.0"
|
170
|
+
@file.audio_codec.should == "aac"
|
171
|
+
@file.audio_sample_rate.should == 48000
|
172
|
+
@file.audio_sample_units.should == "Hz"
|
173
|
+
@file.audio_channels_string.should == "stereo"
|
174
|
+
@file.video?.should == false
|
175
|
+
@file.video_codec.should be_nil
|
176
|
+
end
|
177
|
+
|
178
|
+
specify "apple intermediate" do
|
179
|
+
@file = Inspector.new(:raw_response => files(:fireproof))
|
180
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
181
|
+
@file.raw_duration.should == "00:00:18.7"
|
182
|
+
@file.duration.should == 18700
|
183
|
+
@file.bitrate.should == 24281
|
184
|
+
@file.bitrate_units.should == "kb/s"
|
185
|
+
@file.audio_stream_id.should == "#0.0"
|
186
|
+
@file.audio_codec.should == "pcm_s16be"
|
187
|
+
@file.audio_sample_rate.should == 48000
|
188
|
+
@file.audio_sample_units.should == "Hz"
|
189
|
+
@file.audio_channels_string.should == "mono"
|
190
|
+
@file.video_codec.should == "Apple Intermediate Codec"
|
191
|
+
@file.video_stream_id.should == "#0.1"
|
192
|
+
@file.video_colorspace.should == nil
|
193
|
+
@file.width.should == 1280
|
194
|
+
@file.height.should == 720
|
195
|
+
@file.fps.should == "600.00" # this is a known FFMPEG problem
|
196
|
+
end
|
197
|
+
|
198
|
+
specify "dv video" do
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
specify "msmpeg4" do
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
specify "mpeg2 ac3" do
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
specify "m4v h264" do
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
specify "3g2" do
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
specify "3gp (1)" do
|
219
|
+
|
220
|
+
end
|
221
|
+
|
222
|
+
specify "3gp (2)" do
|
223
|
+
|
224
|
+
end
|
225
|
+
|
226
|
+
specify "flv" do
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
specify "wmv (1)" do
|
231
|
+
|
232
|
+
end
|
233
|
+
|
234
|
+
specify "wmv/wmv3/wmav2" do
|
235
|
+
|
236
|
+
end
|
237
|
+
|
238
|
+
specify "wmva/wmva2" do
|
239
|
+
|
240
|
+
end
|
241
|
+
|
242
|
+
specify "mov/msmpeg4" do
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
specify "audio only mp3" do
|
247
|
+
@file = Inspector.new(:raw_response => files(:duck))
|
248
|
+
@file.container.should == "mp3"
|
249
|
+
@file.raw_duration.should == "00:02:03.0"
|
250
|
+
@file.duration.should == 123000
|
251
|
+
@file.bitrate.should == 128
|
252
|
+
@file.bitrate_units.should == "kb/s"
|
253
|
+
@file.audio_stream_id.should == "#0.0"
|
254
|
+
@file.audio_codec.should == "mp3"
|
255
|
+
@file.audio_sample_rate.should == 44100
|
256
|
+
@file.audio_sample_units.should == "Hz"
|
257
|
+
@file.audio_channels_string.should == "stereo"
|
258
|
+
@file.audio?.should == true
|
259
|
+
@file.video?.should == false
|
260
|
+
end
|
261
|
+
|
262
|
+
specify "audio only aac" do
|
263
|
+
@file = Inspector.new(:raw_response => files(:eiffel))
|
264
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
265
|
+
@file.raw_duration.should == "00:02:50.3"
|
266
|
+
@file.duration.should == 170300
|
267
|
+
@file.bitrate.should == 162
|
268
|
+
@file.bitrate_units.should == "kb/s"
|
269
|
+
@file.audio_stream_id.should == "#0.0"
|
270
|
+
@file.audio_codec.should == "aac"
|
271
|
+
@file.audio_sample_rate.should == 44100
|
272
|
+
@file.audio_sample_units.should == "Hz"
|
273
|
+
@file.audio_channels_string.should == "stereo"
|
274
|
+
@file.audio?.should == true
|
275
|
+
@file.video?.should == false
|
276
|
+
end
|
277
|
+
|
278
|
+
specify "invalid file" do
|
279
|
+
@file = Inspector.new(:raw_response => files(:invalid))
|
280
|
+
@file.container.should == "mov,mp4,m4a,3gp,3g2,mj2"
|
281
|
+
@file.raw_duration.should be_nil
|
282
|
+
@file.valid?.should be_false
|
283
|
+
@file.unknown_format?.should be_false
|
284
|
+
@file.unreadable_file?.should be_true
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
module RVideo
|
4
|
+
describe RVideo::Inspector do
|
5
|
+
before do
|
6
|
+
@files = YAML::load(File.open("#{FIXTURE_PATH}/files.yml"))
|
7
|
+
#return f[key.to_s]['response']
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should parse properly" do
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
module RVideo
|
4
|
+
describe RVideo, " with every recipe and file" do
|
5
|
+
it "should interpolate commands correctly" do
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should parse prepopulated output successfully" do
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should transcode to a viewable file" do
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../lib/rvideo'
|
2
|
+
|
3
|
+
def ffmpeg(key)
|
4
|
+
f = YAML::load(File.open("#{FIXTURE_PATH}/ffmpeg_builds.yml"))
|
5
|
+
return f[key.to_s]['response']
|
6
|
+
end
|
7
|
+
|
8
|
+
def files(key)
|
9
|
+
f = YAML::load(File.open("#{FIXTURE_PATH}/files.yml"))
|
10
|
+
return f[key.to_s]['response']
|
11
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RVideo
|
4
|
+
module Tools
|
5
|
+
describe AbstractTool, "#assign" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@command = "ffmpeg -i $input_file$ $output_file$"
|
9
|
+
@options = {:input_file => "foo", :output_file => "bar"}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should assign commands properly with options - ffmpeg" do
|
13
|
+
Ffmpeg.should_receive(:new).with(@command, @options)
|
14
|
+
AbstractTool.assign(@command, @options)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should assign properly without options - ffmpeg" do
|
18
|
+
Ffmpeg.should_receive(:new).with(@command, {})
|
19
|
+
AbstractTool.assign(@command)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return an instance of the specified tool" do
|
23
|
+
tool = AbstractTool.assign(@command, @options)
|
24
|
+
tool.class.should == Ffmpeg
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe AbstractTool, " when building a command" do
|
29
|
+
|
30
|
+
before do
|
31
|
+
@options = {:input_file => "foo", :output_file => "bar", :resolution => "baz"}
|
32
|
+
@simple_avi = "ffmpeg -i $input_file$ -ar 44100 -ab 64 -vcodec xvid -acodec mp3 -r 29.97 -s $resolution$ -y $output_file$"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should set supported options successfully" do
|
36
|
+
ffmpeg = Ffmpeg.new(@simple_avi, @options)
|
37
|
+
ffmpeg.options['resolution'].should == @options[:resolution]
|
38
|
+
ffmpeg.options['input_file'].should == @options[:input_file]
|
39
|
+
ffmpeg.options['output_file'].should == @options[:output_file]
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should work if options defined as strings, but referenced as symbols" do
|
43
|
+
options = {'input_file' => "foo", 'output_file' => "bar", 'resolution' => "baz"}
|
44
|
+
ffmpeg = Ffmpeg.new(@simple_avi, options)
|
45
|
+
ffmpeg.options[:resolution].should == options['resolution']
|
46
|
+
ffmpeg.options[:input_file].should == options['input_file']
|
47
|
+
ffmpeg.options[:output_file].should == options['output_file']
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should ignore extra options (not needed by the recipe)" do
|
51
|
+
Ffmpeg.new(@simple_avi, @options.merge(:foo => "bar"))
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should interpolate variables successfully" do
|
55
|
+
ffmpeg = Ffmpeg.new(@simple_avi, @options)
|
56
|
+
ffmpeg.command.should == "ffmpeg -i #{@options[:input_file]} -ar 44100 -ab 64 -vcodec xvid -acodec mp3 -r 29.97 -s #{@options[:resolution]} -y #{@options[:output_file]}"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "the matched_variable method should reference the variable without $" do
|
60
|
+
ffmpeg = Ffmpeg.new(@simple_avi, @options)
|
61
|
+
ffmpeg.matched_variable("$resolution$").should == "baz"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "the matched_variable method should raise an error when the variable is not found" do
|
65
|
+
ffmpeg = Ffmpeg.new(@simple_avi, @options)
|
66
|
+
lambda {
|
67
|
+
ffmpeg.matched_variable("$foo$")
|
68
|
+
}.should raise_error(TranscoderError::ParameterError)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should raise an exception when a required variable isn't set (1)" do
|
72
|
+
lambda {
|
73
|
+
ffmpeg = Ffmpeg.new(@simple_avi, {:input_file => "baz"})
|
74
|
+
}.should raise_error(TranscoderError::ParameterError)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "the should raise an error when a recipe includes a variable not supplied (2)" do
|
78
|
+
lambda {
|
79
|
+
ffmpeg = Ffmpeg.new(@simple_avi + " $novar$", @options)
|
80
|
+
}.should raise_error(TranscoderError::ParameterError)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "the should not raise an error when a variable is supplied but nil" do
|
84
|
+
ffmpeg = Ffmpeg.new(@simple_avi, @options.merge(:resolution => nil))
|
85
|
+
ffmpeg.command.should == "ffmpeg -i #{@options[:input_file]} -ar 44100 -ab 64 -vcodec xvid -acodec mp3 -r 29.97 -s -y #{@options[:output_file]}"
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should ignore escaped leading \$' do
|
89
|
+
ffmpeg = Ffmpeg.new('ffmpeg -i $input_file$ -ar 44100 -ab 64 -fakeoptions \$foo$ -vcodec xvid -acodec mp3 -r 29.97 -s $resolution$ -y $output_file$', @options)
|
90
|
+
ffmpeg.command.should == "ffmpeg -i #{@options[:input_file]} -ar 44100 -ab 64 -fakeoptions $foo$ -vcodec xvid -acodec mp3 -r 29.97 -s #{@options[:resolution]} -y #{@options[:output_file]}"
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should ignore escaped trailing \$' do
|
94
|
+
ffmpeg = Ffmpeg.new('ffmpeg -i $input_file$ -ar 44100 -ab 64 -fakeoptions $foo\$ -vcodec xvid -acodec mp3 -r 29.97 -s $resolution$ -y $output_file$', @options)
|
95
|
+
ffmpeg.command.should == "ffmpeg -i #{@options[:input_file]} -ar 44100 -ab 64 -fakeoptions $foo$ -vcodec xvid -acodec mp3 -r 29.97 -s #{@options[:resolution]} -y #{@options[:output_file]}"
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should ignore two escaped \$' do
|
99
|
+
ffmpeg = Ffmpeg.new('ffmpeg -i $input_file$ -ar 44100 -ab 64 -fakeoptions \$foo\$ -vcodec xvid -acodec mp3 -r 29.97 -s $resolution$ -y $output_file$', @options)
|
100
|
+
ffmpeg.command.should == "ffmpeg -i #{@options[:input_file]} -ar 44100 -ab 64 -fakeoptions $foo$ -vcodec xvid -acodec mp3 -r 29.97 -s #{@options[:resolution]} -y #{@options[:output_file]}"
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should access the original fps' do
|
104
|
+
@mock_inspector = mock("inspector")
|
105
|
+
Inspector.stub!(:new).and_return(@mock_inspector)
|
106
|
+
@mock_inspector.stub!(:fps).and_return 23.98
|
107
|
+
ffmpeg = Ffmpeg.new("ffmpeg -i $input_file$ -ar 44100 -ab 64 -vcodec xvid -acodec mp3 $original_fps$ -s $resolution$ -y $output_file$", @options)
|
108
|
+
ffmpeg.command.should == "ffmpeg -i #{@options[:input_file]} -ar 44100 -ab 64 -vcodec xvid -acodec mp3 -r 23.98 -s #{@options[:resolution]} -y #{@options[:output_file]}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|