rvideo 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,703 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RVideo
|
4
|
+
module Tools
|
5
|
+
|
6
|
+
describe Ffmpeg do
|
7
|
+
before do
|
8
|
+
setup_ffmpeg_spec
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should initialize with valid arguments" do
|
12
|
+
@ffmpeg.class.should == Ffmpeg
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have the correct tool_command" do
|
16
|
+
@ffmpeg.tool_command.should == 'ffmpeg'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should call parse_result on execute, with a ffmpeg result string" do
|
20
|
+
@ffmpeg.should_receive(:parse_result).once.with /\AFFmpeg version/
|
21
|
+
@ffmpeg.execute
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should mixin AbstractTool" do
|
25
|
+
Ffmpeg.included_modules.include?(AbstractTool::InstanceMethods).should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set supported options successfully" do
|
29
|
+
@ffmpeg.options[:resolution].should == @options[:resolution]
|
30
|
+
@ffmpeg.options[:input_file].should == @options[:input_file]
|
31
|
+
@ffmpeg.options[:output_file].should == @options[:output_file]
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
describe Ffmpeg, " when parsing a result" do
|
37
|
+
before do
|
38
|
+
setup_ffmpeg_spec
|
39
|
+
@result = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
40
|
+
Mac OSX universal build for ffmpegX
|
41
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
42
|
+
libavutil version: 49.0.0
|
43
|
+
libavcodec version: 51.9.0
|
44
|
+
libavformat version: 50.4.0
|
45
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
46
|
+
|
47
|
+
Seems that stream 1 comes from film source: 600.00 (600/1) -> 59.75 (239/4)
|
48
|
+
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'jobjob2.mov':
|
49
|
+
Duration: 00:01:09.0, start: 0.000000, bitrate: 28847 kb/s
|
50
|
+
Stream #0.0(eng): Audio: aac, 44100 Hz, stereo
|
51
|
+
Stream #0.1(eng), 59.75 fps(r): Video: dvvideo, yuv411p, 720x480
|
52
|
+
Stream mapping:
|
53
|
+
Stream #0.1 -> #0.0
|
54
|
+
Stream #0.0 -> #0.1
|
55
|
+
Press [q] to stop encoding
|
56
|
+
frame= 4126 q=31.0 Lsize= 5917kB time=69.1 bitrate= 702.0kbits/s
|
57
|
+
video:2417kB audio:540kB global headers:0kB muxing overhead 100.140277%
|
58
|
+
"
|
59
|
+
|
60
|
+
@result2 = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
61
|
+
Mac OSX universal build for ffmpegX
|
62
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
63
|
+
libavutil version: 49.0.0
|
64
|
+
libavcodec version: 51.9.0
|
65
|
+
libavformat version: 50.4.0
|
66
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
67
|
+
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/jon/code/spinoza/rvideo/config/../spec/files/kites.mp4':
|
68
|
+
Duration: 00:00:19.6, start: 0.000000, bitrate: 98 kb/s
|
69
|
+
Stream #0.0(und), 10.00 fps(r): Video: mpeg4, yuv420p, 176x144
|
70
|
+
Stream #0.1(und): Audio: amr_nb, 8000 Hz, mono
|
71
|
+
Output #0, avi, to '/Users/jon/code/spinoza/rvideo/config/../tmp/kites-transcoded.avi':
|
72
|
+
Stream #0.0, 29.97 fps(c): Video: xvid, yuv420p, 320x240, q=2-31, 200 kb/s
|
73
|
+
Stream #0.1: Audio: mp3, 44100 Hz, mono, 64 kb/s
|
74
|
+
Stream mapping:
|
75
|
+
Stream #0.0 -> #0.0
|
76
|
+
Stream #0.1 -> #0.1
|
77
|
+
Press [q] to stop encoding
|
78
|
+
frame= 584 q=6.0 Lsize= 708kB time=19.5 bitrate= 297.8kbits/s
|
79
|
+
video:49kB audio:153kB global headers:0kB muxing overhead 250.444444%
|
80
|
+
"
|
81
|
+
|
82
|
+
@result3 = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
83
|
+
Mac OSX universal build for ffmpegX
|
84
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
85
|
+
libavutil version: 49.0.0
|
86
|
+
libavcodec version: 51.9.0
|
87
|
+
libavformat version: 50.4.0
|
88
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
89
|
+
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/jon/code/spinoza/rvideo/config/../spec/files/kites.mp4':
|
90
|
+
Duration: 00:00:19.6, start: 0.000000, bitrate: 98 kb/s
|
91
|
+
Stream #0.0(und), 10.00 fps(r): Video: mpeg4, yuv420p, 176x144
|
92
|
+
Stream #0.1(und): Audio: amr_nb, 8000 Hz, mono
|
93
|
+
Output #0, avi, to '/Users/jon/code/spinoza/rvideo/config/../tmp/kites-transcoded.avi':
|
94
|
+
Stream #0.0, 29.97 fps(c): Video: xvid, yuv420p, 320x240, q=2-31, 200 kb/s
|
95
|
+
Stream #0.1: Audio: mp3, 44100 Hz, mono, 64 kb/s
|
96
|
+
Stream mapping:
|
97
|
+
Stream #0.0 -> #0.0
|
98
|
+
Stream #0.1 -> #0.1
|
99
|
+
Press [q] to stop encoding
|
100
|
+
frame= 273 fps= 31 q=10.0 Lsize= 398kB time=5.9 bitrate= 551.8kbits/s
|
101
|
+
video:284kB audio:92kB global headers:0kB muxing overhead 5.723981%
|
102
|
+
"
|
103
|
+
|
104
|
+
@result4 = "FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
|
105
|
+
configuration: --prefix=/opt/local --prefix=/opt/local --disable-vhook --mandir=/opt/local/share/man --enable-shared --enable-pthreads --enable-libmp3lame --enable-gpl --enable-libfaac --enable-libfaad --enable-xvid --enable-x264
|
106
|
+
libavutil version: 49.4.0
|
107
|
+
libavcodec version: 51.40.4
|
108
|
+
libavformat version: 51.12.1
|
109
|
+
built on Sep 19 2007 11:30:28, gcc: 4.0.1 (Apple Computer, Inc. build 5367)
|
110
|
+
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/Eric/Projects/rvidtest/rvideo/report/input_files/jobjob.mov':
|
111
|
+
Duration: 00:01:12.0, start: 0.000000, bitrate: 972 kb/s
|
112
|
+
Stream #0.0(eng): Video: mpeg4, yuv420p, 512x384, 29.97 fps(r)
|
113
|
+
Stream #0.1(eng): Audio: mp3, 48000 Hz, stereo
|
114
|
+
Output #0, mp3, to '/Users/Eric/Projects/rvidtest/rvideo/report/generated_reports/62/output_files/jobjob_mov/private_mp3.mp3':
|
115
|
+
Stream #0.0: Audio: mp3, 48000 Hz, stereo, 0 kb/s
|
116
|
+
Stream mapping:
|
117
|
+
Stream #0.1 -> #0.0
|
118
|
+
Press [q] to stop encoding
|
119
|
+
mdb:94, lastbuf:0 skipping granule 0
|
120
|
+
size= 1080kB time=69.1 bitrate= 128.0kbits /s
|
121
|
+
video:0kB audio:1080kB global headers:0kB muxing overhead 0.002893%
|
122
|
+
"
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should create correct result metadata" do
|
126
|
+
@ffmpeg.send(:parse_result, @result).should be_true
|
127
|
+
@ffmpeg.frame.should == '4126'
|
128
|
+
@ffmpeg.fps.should be_nil
|
129
|
+
@ffmpeg.q.should == '31.0'
|
130
|
+
@ffmpeg.size.should == '5917kB'
|
131
|
+
@ffmpeg.time.should == '69.1'
|
132
|
+
@ffmpeg.bitrate.should == '702.0kbits/s'
|
133
|
+
@ffmpeg.video_size.should == "2417kB"
|
134
|
+
@ffmpeg.audio_size.should == "540kB"
|
135
|
+
@ffmpeg.header_size.should == "0kB"
|
136
|
+
@ffmpeg.overhead.should == "100.140277%"
|
137
|
+
@ffmpeg.psnr.should be_nil
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should create correct result metadata (2)" do
|
141
|
+
@ffmpeg.send(:parse_result, @result2).should be_true
|
142
|
+
@ffmpeg.frame.should == '584'
|
143
|
+
@ffmpeg.fps.should be_nil
|
144
|
+
@ffmpeg.q.should == '6.0'
|
145
|
+
@ffmpeg.size.should == '708kB'
|
146
|
+
@ffmpeg.time.should == '19.5'
|
147
|
+
@ffmpeg.bitrate.should == '297.8kbits/s'
|
148
|
+
@ffmpeg.video_size.should == "49kB"
|
149
|
+
@ffmpeg.audio_size.should == "153kB"
|
150
|
+
@ffmpeg.header_size.should == "0kB"
|
151
|
+
@ffmpeg.overhead.should == "250.444444%"
|
152
|
+
@ffmpeg.psnr.should be_nil
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should create correct result metadata (3)" do
|
156
|
+
@ffmpeg.send(:parse_result, @result3).should be_true
|
157
|
+
@ffmpeg.frame.should == '273'
|
158
|
+
@ffmpeg.fps.should == "31"
|
159
|
+
@ffmpeg.q.should == '10.0'
|
160
|
+
@ffmpeg.size.should == '398kB'
|
161
|
+
@ffmpeg.time.should == '5.9'
|
162
|
+
@ffmpeg.bitrate.should == '551.8kbits/s'
|
163
|
+
@ffmpeg.video_size.should == "284kB"
|
164
|
+
@ffmpeg.audio_size.should == "92kB"
|
165
|
+
@ffmpeg.header_size.should == "0kB"
|
166
|
+
@ffmpeg.overhead.should == "5.723981%"
|
167
|
+
@ffmpeg.psnr.should be_nil
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should create correct result metadata (4)" do
|
171
|
+
@ffmpeg.send(:parse_result, @result4).should be_true
|
172
|
+
@ffmpeg.frame.should be_nil
|
173
|
+
@ffmpeg.fps.should be_nil
|
174
|
+
@ffmpeg.q.should be_nil
|
175
|
+
@ffmpeg.size.should == '1080kB'
|
176
|
+
@ffmpeg.time.should == '69.1'
|
177
|
+
@ffmpeg.bitrate.should == '128.0kbits'
|
178
|
+
@ffmpeg.video_size.should == "0kB"
|
179
|
+
@ffmpeg.audio_size.should == "1080kB"
|
180
|
+
@ffmpeg.header_size.should == "0kB"
|
181
|
+
@ffmpeg.overhead.should == "0.002893%"
|
182
|
+
@ffmpeg.psnr.should be_nil
|
183
|
+
end
|
184
|
+
|
185
|
+
it "ffmpeg should calculate PSNR if it is turned on" do
|
186
|
+
@ffmpeg.send(:parse_result, @result.gsub("Lsize=","LPSNR=Y:33.85 U:37.61 V:37.46 *:34.77 size=")).should be_true
|
187
|
+
@ffmpeg.psnr.should == "Y:33.85 U:37.61 V:37.46 *:34.77"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context Ffmpeg, " result parsing should raise an exception" do
|
192
|
+
|
193
|
+
setup do
|
194
|
+
setup_ffmpeg_spec
|
195
|
+
end
|
196
|
+
|
197
|
+
specify "when not passed a command" do
|
198
|
+
result = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
199
|
+
Mac OSX universal build for ffmpegX
|
200
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
201
|
+
libavutil version: 49.0.0
|
202
|
+
libavcodec version: 51.9.0
|
203
|
+
libavformat version: 50.4.0
|
204
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
205
|
+
usage: ffmpeg [[infile options] -i infile]... {[outfile options] outfile}...
|
206
|
+
Hyper fast Audio and Video encoder
|
207
|
+
|
208
|
+
Main options:
|
209
|
+
-L show license
|
210
|
+
-h show help
|
211
|
+
-version show version
|
212
|
+
-formats show available formats, codecs, protocols, ...
|
213
|
+
-f fmt force format
|
214
|
+
-img img_fmt force image format
|
215
|
+
-i filename input file name
|
216
|
+
-y overwrite output files
|
217
|
+
-t duration set the recording time
|
218
|
+
-fs limit_size set the limit file size
|
219
|
+
-ss time_off set the start time offset
|
220
|
+
-itsoffset time_off set the input ts offset
|
221
|
+
-title string set the title
|
222
|
+
-timestamp time set the timestamp
|
223
|
+
-author string set the author
|
224
|
+
-copyright string set the copyright
|
225
|
+
-comment string set the comment
|
226
|
+
-v verbose control amount of logging
|
227
|
+
-target type specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\", \"dv50\", \pal-vcd\", \"ntsc-svcd\", ...)
|
228
|
+
-dframes number set the number of data frames to record
|
229
|
+
-scodec codec force subtitle codec ('copy' to copy stream)
|
230
|
+
-newsubtitle add a new subtitle stream to the current output stream
|
231
|
+
-slang code set the ISO 639 language code (3 letters) of the current subtitle stream
|
232
|
+
|
233
|
+
Video options:
|
234
|
+
-b bitrate set video bitrate (in kbit/s)
|
235
|
+
-vframes number set the number of video frames to record
|
236
|
+
-r rate set frame rate (Hz value, fraction or abbreviation)
|
237
|
+
-s size set frame size (WxH or abbreviation)
|
238
|
+
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
|
239
|
+
-croptop size set top crop band size (in pixels)
|
240
|
+
-cropbottom size set bottom crop band size (in pixels)
|
241
|
+
-cropleft size set left crop band size (in pixels)
|
242
|
+
-cropright size set right crop band size (in pixels)
|
243
|
+
-padtop size set top pad band size (in pixels)
|
244
|
+
-padbottom size set bottom pad band size (in pixels)
|
245
|
+
-padleft size set left pad band size (in pixels)
|
246
|
+
-padright size set right pad band size (in pixels)
|
247
|
+
-padcolor color set color of pad bands (Hex 000000 thru FFFFFF)
|
248
|
+
-vn disable video
|
249
|
+
-bt tolerance set video bitrate tolerance (in kbit/s)
|
250
|
+
-maxrate bitrate set max video bitrate tolerance (in kbit/s)
|
251
|
+
-minrate bitrate set min video bitrate tolerance (in kbit/s)
|
252
|
+
-bufsize size set ratecontrol buffer size (in kByte)
|
253
|
+
-vcodec codec force video codec ('copy' to copy stream)
|
254
|
+
-sameq use same video quality as source (implies VBR)
|
255
|
+
-pass n select the pass number (1 or 2)
|
256
|
+
-passlogfile file select two pass log file name
|
257
|
+
-newvideo add a new video stream to the current output stream
|
258
|
+
|
259
|
+
Advanced Video options:
|
260
|
+
-pix_fmt format set pixel format
|
261
|
+
-g gop_size set the group of picture size
|
262
|
+
-intra use only intra frames
|
263
|
+
-vdt n discard threshold
|
264
|
+
-qscale q use fixed video quantiser scale (VBR)
|
265
|
+
-qmin q min video quantiser scale (VBR)
|
266
|
+
-qmax q max video quantiser scale (VBR)
|
267
|
+
-lmin lambda min video lagrange factor (VBR)
|
268
|
+
-lmax lambda max video lagrange factor (VBR)
|
269
|
+
-mblmin q min macroblock quantiser scale (VBR)
|
270
|
+
-mblmax q max macroblock quantiser scale (VBR)
|
271
|
+
-qdiff q max difference between the quantiser scale (VBR)
|
272
|
+
-qblur blur video quantiser scale blur (VBR)
|
273
|
+
-qsquish squish how to keep quantiser between qmin and qmax (0 = clip, 1 = use differentiable function)
|
274
|
+
-qcomp compression video quantiser scale compression (VBR)
|
275
|
+
-rc_init_cplx complexity initial complexity for 1-pass encoding
|
276
|
+
-b_qfactor factor qp factor between p and b frames
|
277
|
+
-i_qfactor factor qp factor between p and i frames
|
278
|
+
-b_qoffset offset qp offset between p and b frames
|
279
|
+
-i_qoffset offset qp offset between p and i frames
|
280
|
+
-ibias bias intra quant bias
|
281
|
+
-pbias bias inter quant bias
|
282
|
+
-rc_eq equation set rate control equation
|
283
|
+
-rc_override override rate control override for specific intervals
|
284
|
+
-me method set motion estimation method
|
285
|
+
-me_threshold motion estimaton threshold
|
286
|
+
-mb_threshold macroblock threshold
|
287
|
+
-bf frames use 'frames' B frames
|
288
|
+
-preme pre motion estimation
|
289
|
+
-bug param workaround not auto detected encoder bugs
|
290
|
+
-strict strictness how strictly to follow the standards
|
291
|
+
-deinterlace deinterlace pictures
|
292
|
+
-psnr calculate PSNR of compressed frames
|
293
|
+
-vstats dump video coding statistics to file
|
294
|
+
-vhook module insert video processing module
|
295
|
+
-intra_matrix matrix specify intra matrix coeffs
|
296
|
+
-inter_matrix matrix specify inter matrix coeffs
|
297
|
+
-top top=1/bottom=0/auto=-1 field first
|
298
|
+
-sc_threshold threshold scene change threshold
|
299
|
+
-me_range range limit motion vectors range (1023 for DivX player)
|
300
|
+
-dc precision intra_dc_precision
|
301
|
+
-mepc factor (1.0 = 256) motion estimation bitrate penalty compensation
|
302
|
+
-vtag fourcc/tag force video tag/fourcc
|
303
|
+
-skip_threshold threshold frame skip threshold
|
304
|
+
-skip_factor factor frame skip factor
|
305
|
+
-skip_exp exponent frame skip exponent
|
306
|
+
-genpts generate pts
|
307
|
+
-qphist show QP histogram
|
308
|
+
|
309
|
+
Audio options:
|
310
|
+
-aframes number set the number of audio frames to record
|
311
|
+
-ab bitrate set audio bitrate (in kbit/s)
|
312
|
+
-aq quality set audio quality (codec-specific)
|
313
|
+
-ar rate set audio sampling rate (in Hz)
|
314
|
+
-ac channels set number of audio channels
|
315
|
+
-an disable audio
|
316
|
+
-acodec codec force audio codec ('copy' to copy stream)
|
317
|
+
-vol volume change audio volume (256=normal)
|
318
|
+
-newaudio add a new audio stream to the current output stream
|
319
|
+
-alang code set the ISO 639 language code (3 letters) of the current audio stream
|
320
|
+
|
321
|
+
Advanced Audio options:
|
322
|
+
-atag fourcc/tag force audio tag/fourcc
|
323
|
+
|
324
|
+
Subtitle options:
|
325
|
+
-scodec codec force subtitle codec ('copy' to copy stream)
|
326
|
+
-newsubtitle add a new subtitle stream to the current output stream
|
327
|
+
-slang code set the ISO 639 language code (3 letters) of the current subtitle stream
|
328
|
+
|
329
|
+
Audio/Video grab options:
|
330
|
+
-vd device set video grab device
|
331
|
+
-vc channel set video grab channel (DV1394 only)
|
332
|
+
-tvstd standard set television standard (NTSC, PAL (SECAM))
|
333
|
+
-ad device set audio device
|
334
|
+
-grab format request grabbing using
|
335
|
+
-gd device set grab device
|
336
|
+
|
337
|
+
Advanced options:
|
338
|
+
-map file:stream[:syncfile:syncstream] set input stream mapping
|
339
|
+
-map_meta_data outfile:infile set meta data information of outfile from infile
|
340
|
+
-benchmark add timings for benchmarking
|
341
|
+
-dump dump each input packet
|
342
|
+
-hex when dumping packets, also dump the payload
|
343
|
+
-re read input at native frame rate
|
344
|
+
-loop_input loop (current only works with images)
|
345
|
+
-loop_output number of times to loop output in formats that support looping (0 loops forever)
|
346
|
+
-threads count thread count
|
347
|
+
-vsync video sync method
|
348
|
+
-async audio sync method
|
349
|
+
-vglobal video global header storage type
|
350
|
+
-copyts copy timestamps
|
351
|
+
-shortest finish encoding within shortest input
|
352
|
+
-dts_delta_threshold timestamp discontinuity delta threshold
|
353
|
+
-ps size set packet size in bits
|
354
|
+
-error rate error rate
|
355
|
+
-muxrate rate set mux rate
|
356
|
+
-packetsize size set packet size
|
357
|
+
-muxdelay seconds set the maximum demux-decode delay
|
358
|
+
-muxpreload seconds set the initial demux-decode delay
|
359
|
+
AVCodecContext AVOptions:
|
360
|
+
-bit_rate <int> E.VA.
|
361
|
+
-bit_rate_tolerance <int> E.V..
|
362
|
+
-flags <flags> EDVA.
|
363
|
+
-mv4 E.V.. use four motion vector by macroblock (mpeg4)
|
364
|
+
-obmc E.V.. use overlapped block motion compensation (h263+)
|
365
|
+
-qpel E.V.. use 1/4 pel motion compensation
|
366
|
+
-loop E.V.. use loop filter
|
367
|
+
-gmc E.V.. use gmc
|
368
|
+
-mv0 E.V.. always try a mb with mv=<0,0>
|
369
|
+
-part E.V.. use data partitioning
|
370
|
+
-gray EDV.. only decode/encode grayscale
|
371
|
+
-psnr E.V.. error[?] variables will be set during encoding
|
372
|
+
-naq E.V.. normalize adaptive quantization
|
373
|
+
-ildct E.V.. use interlaced dct
|
374
|
+
-low_delay .DV.. force low delay
|
375
|
+
-alt E.V.. enable alternate scantable (mpeg2/mpeg4)
|
376
|
+
-trell E.V.. use trellis quantization
|
377
|
+
-bitexact EDVAS use only bitexact stuff (except (i)dct)
|
378
|
+
-aic E.V.. h263 advanced intra coding / mpeg4 ac prediction
|
379
|
+
-umv E.V.. use unlimited motion vectors
|
380
|
+
-cbp E.V.. use rate distortion optimization for cbp
|
381
|
+
-qprd E.V.. use rate distortion optimization for qp selection
|
382
|
+
-aiv E.V.. h263 alternative inter vlc
|
383
|
+
-slice E.V..
|
384
|
+
-ilme E.V.. interlaced motion estimation
|
385
|
+
-scan_offset E.V.. will reserve space for svcd scan offset user data
|
386
|
+
-cgop E.V.. closed gop
|
387
|
+
-fast E.V.. allow non spec compliant speedup tricks
|
388
|
+
-sgop E.V.. strictly enforce gop size
|
389
|
+
-noout E.V.. skip bitstream encoding
|
390
|
+
-local_header E.V.. place global headers at every keyframe instead of in extradata
|
391
|
+
-me_method <int> E.V..
|
392
|
+
-gop_size <int> E.V..
|
393
|
+
-cutoff <int> E..A. set cutoff bandwidth
|
394
|
+
-qcompress <float> E.V..
|
395
|
+
-qblur <float> E.V..
|
396
|
+
-qmin <int> E.V..
|
397
|
+
-qmax <int> E.V..
|
398
|
+
-max_qdiff <int> E.V..
|
399
|
+
-max_b_frames <int> E.V..
|
400
|
+
-b_quant_factor <float> E.V..
|
401
|
+
-rc_strategy <int> E.V..
|
402
|
+
-b_strategy <int> E.V..
|
403
|
+
-hurry_up <int> .DV..
|
404
|
+
-bugs <int> .DV..
|
405
|
+
-autodetect .DV..
|
406
|
+
-old_msmpeg4 .DV..
|
407
|
+
-xvid_ilace .DV..
|
408
|
+
-ump4 .DV..
|
409
|
+
-no_padding .DV..
|
410
|
+
-amv .DV..
|
411
|
+
-ac_vlc .DV..
|
412
|
+
-qpel_chroma .DV..
|
413
|
+
-std_qpel .DV..
|
414
|
+
-qpel_chroma2 .DV..
|
415
|
+
-direct_blocksize .DV..
|
416
|
+
-edge .DV..
|
417
|
+
-hpel_chroma .DV..
|
418
|
+
-dc_clip .DV..
|
419
|
+
-ms .DV..
|
420
|
+
-lelim <int> E.V.. single coefficient elimination threshold for luminance (negative values also consider dc coefficient)
|
421
|
+
-celim <int> E.V.. single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)
|
422
|
+
-strict <int> E.V..
|
423
|
+
-very E.V..
|
424
|
+
-strict E.V..
|
425
|
+
-normal E.V..
|
426
|
+
-inofficial E.V..
|
427
|
+
-experimental E.V..
|
428
|
+
-b_quant_offset <float> E.V..
|
429
|
+
-er <int> .DV..
|
430
|
+
-careful .DV..
|
431
|
+
-compliant .DV..
|
432
|
+
-aggressive .DV..
|
433
|
+
-very_aggressive .DV..
|
434
|
+
-mpeg_quant <int> E.V..
|
435
|
+
-rc_qsquish <float> E.V..
|
436
|
+
-rc_qmod_amp <float> E.V..
|
437
|
+
-rc_qmod_freq <int> E.V..
|
438
|
+
-rc_eq <string> E.V..
|
439
|
+
-rc_max_rate <int> E.V..
|
440
|
+
-rc_min_rate <int> E.V..
|
441
|
+
-rc_buffer_size <int> E.V..
|
442
|
+
-rc_buf_aggressivity <float> E.V..
|
443
|
+
-i_quant_factor <float> E.V..
|
444
|
+
-i_quant_offset <float> E.V..
|
445
|
+
-rc_initial_cplx <float> E.V..
|
446
|
+
-dct <int> E.V..
|
447
|
+
-auto E.V..
|
448
|
+
-fastint E.V..
|
449
|
+
-int E.V..
|
450
|
+
-mmx E.V..
|
451
|
+
-mlib E.V..
|
452
|
+
-altivec E.V..
|
453
|
+
-faan E.V..
|
454
|
+
-lumi_mask <float> E.V.. lumimasking
|
455
|
+
-tcplx_mask <float> E.V.. temporal complexity masking
|
456
|
+
-scplx_mask <float> E.V.. spatial complexity masking
|
457
|
+
-p_mask <float> E.V.. inter masking
|
458
|
+
-dark_mask <float> E.V.. darkness masking
|
459
|
+
-idct <int> EDV..
|
460
|
+
-auto EDV..
|
461
|
+
-int EDV..
|
462
|
+
-simple EDV..
|
463
|
+
-simplemmx EDV..
|
464
|
+
-libmpeg2mmx EDV..
|
465
|
+
-ps2 EDV..
|
466
|
+
-mlib EDV..
|
467
|
+
-arm EDV..
|
468
|
+
-altivec EDV..
|
469
|
+
-sh4 EDV..
|
470
|
+
-simplearm EDV..
|
471
|
+
-h264 EDV..
|
472
|
+
-vp3 EDV..
|
473
|
+
-ipp EDV..
|
474
|
+
-xvidmmx EDV..
|
475
|
+
-ec <flags> .DV..
|
476
|
+
-guess_mvs .DV..
|
477
|
+
-deblock .DV..
|
478
|
+
-pred <int> E.V.. prediction method
|
479
|
+
-left E.V..
|
480
|
+
-plane E.V..
|
481
|
+
-median E.V..
|
482
|
+
-aspect <rational> E.V..
|
483
|
+
-debug <flags> EDVAS print specific debug info
|
484
|
+
-pict .DV..
|
485
|
+
-rc E.V..
|
486
|
+
-bitstream .DV..
|
487
|
+
-mb_type .DV..
|
488
|
+
-qp .DV..
|
489
|
+
-mv .DV..
|
490
|
+
-dct_coeff .DV..
|
491
|
+
-skip .DV..
|
492
|
+
-startcode .DV..
|
493
|
+
-pts .DV..
|
494
|
+
-er .DV..
|
495
|
+
-mmco .DV..
|
496
|
+
-bugs .DV..
|
497
|
+
-vis_qp .DV..
|
498
|
+
-vis_mb_type .DV..
|
499
|
+
-vismv <int> .DV.. visualize motion vectors
|
500
|
+
-pf .DV..
|
501
|
+
-bf .DV..
|
502
|
+
-bb .DV..
|
503
|
+
-mb_qmin <int> E.V..
|
504
|
+
-mb_qmax <int> E.V..
|
505
|
+
-cmp <int> E.V.. full pel me compare function
|
506
|
+
-subcmp <int> E.V.. sub pel me compare function
|
507
|
+
-mbcmp <int> E.V.. macroblock compare function
|
508
|
+
-ildctcmp <int> E.V.. interlaced dct compare function
|
509
|
+
-dia_size <int> E.V..
|
510
|
+
-last_pred <int> E.V..
|
511
|
+
-preme <int> E.V..
|
512
|
+
-precmp <int> E.V.. pre motion estimation compare function
|
513
|
+
-sad E.V..
|
514
|
+
-sse E.V..
|
515
|
+
-satd E.V..
|
516
|
+
-dct E.V..
|
517
|
+
-psnr E.V..
|
518
|
+
-bit E.V..
|
519
|
+
-rd E.V..
|
520
|
+
-zero E.V..
|
521
|
+
-vsad E.V..
|
522
|
+
-vsse E.V..
|
523
|
+
-nsse E.V..
|
524
|
+
-w53 E.V..
|
525
|
+
-w97 E.V..
|
526
|
+
-dctmax E.V..
|
527
|
+
-chroma E.V..
|
528
|
+
-pre_dia_size <int> E.V..
|
529
|
+
-subq <int> E.V.. sub pel motion estimation quality
|
530
|
+
-me_range <int> E.V..
|
531
|
+
-ibias <int> E.V..
|
532
|
+
-pbias <int> E.V..
|
533
|
+
-coder <int> E.V..
|
534
|
+
-vlc E.V.. variable length coder / huffman coder
|
535
|
+
-ac E.V.. arithmetic coder
|
536
|
+
-context <int> E.V.. context model
|
537
|
+
-mbd <int> E.V..
|
538
|
+
-simple E.V..
|
539
|
+
-bits E.V..
|
540
|
+
-rd E.V..
|
541
|
+
-sc_threshold <int> E.V..
|
542
|
+
-lmin <int> E.V.. min lagrange factor
|
543
|
+
-lmax <int> E.V.. max lagrange factor
|
544
|
+
-nr <int> E.V.. noise reduction
|
545
|
+
-rc_init_occupancy <int> E.V..
|
546
|
+
-inter_threshold <int> E.V..
|
547
|
+
-flags2 <flags> EDVA.
|
548
|
+
-antialias <int> .DV..
|
549
|
+
-auto .DV..
|
550
|
+
-fastint .DV..
|
551
|
+
-int .DV..
|
552
|
+
-float .DV..
|
553
|
+
-qns <int> E.V.. quantizer noise shaping
|
554
|
+
-thread_count <int> EDV..
|
555
|
+
-dc <int> E.V..
|
556
|
+
-nssew <int> E.V.. nsse weight
|
557
|
+
-skip_top <int> .DV..
|
558
|
+
-skip_bottom <int> .DV..
|
559
|
+
-profile <int> E.VA.
|
560
|
+
-unknown E.VA.
|
561
|
+
-level <int> E.VA.
|
562
|
+
-unknown E.VA.
|
563
|
+
-lowres <int> .DV..
|
564
|
+
-frame_skip_threshold <int> E.V..
|
565
|
+
-frame_skip_factor <int> E.V..
|
566
|
+
-frame_skip_exp <int> E.V..
|
567
|
+
-skipcmp <int> E.V.. frame skip compare function
|
568
|
+
-border_mask <float> E.V..
|
569
|
+
-mb_lmin <int> E.V..
|
570
|
+
-mb_lmax <int> E.V..
|
571
|
+
-me_penalty_compensation <int> E.V..
|
572
|
+
-bidir_refine <int> E.V..
|
573
|
+
-brd_scale <int> E.V..
|
574
|
+
-crf <int> E.V..
|
575
|
+
-cqp <int> E.V..
|
576
|
+
-keyint_min <int> E.V..
|
577
|
+
-refs <int> E.V..
|
578
|
+
-chromaoffset <int> E.V..
|
579
|
+
-bframebias <int> E.V..
|
580
|
+
-trellis <int> E.V..
|
581
|
+
-directpred <int> E.V..
|
582
|
+
-bpyramid E.V..
|
583
|
+
-wpred E.V..
|
584
|
+
-mixed_refs E.V..
|
585
|
+
-8x8dct E.V..
|
586
|
+
-fastpskip E.V..
|
587
|
+
-aud E.V..
|
588
|
+
-brdo E.V..
|
589
|
+
-complexityblur <float> E.V..
|
590
|
+
-deblockalpha <int> E.V..
|
591
|
+
-deblockbeta <int> E.V..
|
592
|
+
-partitions <flags> E.V..
|
593
|
+
-parti4x4 E.V..
|
594
|
+
-parti8x8 E.V..
|
595
|
+
-partp4x4 E.V..
|
596
|
+
-partp8x8 E.V..
|
597
|
+
-partb8x8 E.V..
|
598
|
+
-sc_factor <int> E.V.."
|
599
|
+
lambda {
|
600
|
+
@ffmpeg.send(:parse_result, result)
|
601
|
+
}.should raise_error(TranscoderError::InvalidCommand, "must pass a command to ffmpeg")
|
602
|
+
end
|
603
|
+
|
604
|
+
specify "when given a broken command" do
|
605
|
+
result = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
606
|
+
Mac OSX universal build for ffmpegX
|
607
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
608
|
+
libavutil version: 49.0.0
|
609
|
+
libavcodec version: 51.9.0
|
610
|
+
libavformat version: 50.4.0
|
611
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
612
|
+
Unable for find a suitable output format for 'foo'
|
613
|
+
"
|
614
|
+
lambda {
|
615
|
+
@ffmpeg.send(:parse_result, result)
|
616
|
+
}.should raise_error(TranscoderError::InvalidCommand, "Unable for find a suitable output format for 'foo'")
|
617
|
+
end
|
618
|
+
|
619
|
+
specify "when given a missing input file" do
|
620
|
+
result = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
621
|
+
Mac OSX universal build for ffmpegX
|
622
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
623
|
+
libavutil version: 49.0.0
|
624
|
+
libavcodec version: 51.9.0
|
625
|
+
libavformat version: 50.4.0
|
626
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
627
|
+
asdf: I/O error occured
|
628
|
+
Usually that means that input file is truncated and/or corrupted.
|
629
|
+
"
|
630
|
+
lambda {
|
631
|
+
@ffmpeg.send(:parse_result, result)
|
632
|
+
}.should raise_error(TranscoderError::InvalidFile, /I\/O error: .+/)
|
633
|
+
end
|
634
|
+
|
635
|
+
specify "when given a file it can't handle" do
|
636
|
+
puts "not tested"
|
637
|
+
end
|
638
|
+
|
639
|
+
specify "when cancelled halfway through" do
|
640
|
+
puts "not tested"
|
641
|
+
end
|
642
|
+
|
643
|
+
specify "when receiving unexpected results" do
|
644
|
+
result = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
645
|
+
Mac OSX universal build for ffmpegX
|
646
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
647
|
+
libavutil version: 49.0.0
|
648
|
+
libavcodec version: 51.9.0
|
649
|
+
libavformat version: 50.4.0
|
650
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
651
|
+
|
652
|
+
Seems that stream 1 comes from film source: 600.00 (600/1) -> 59.75 (239/4)
|
653
|
+
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'jobjob2.mov':
|
654
|
+
Duration: 00:01:09.0, start: 0.000000, bitrate: 28847 kb/s
|
655
|
+
Stream #0.0(eng): Audio: aac, 44100 Hz, stereo
|
656
|
+
Stream #0.1(eng), 59.75 fps(r): Video: dvvideo, yuv411p, 720x480
|
657
|
+
Stream mapping:
|
658
|
+
Stream #0.1 -> #0.0
|
659
|
+
Stream #0.0 -> #0.1
|
660
|
+
Press [q] to stop encoding
|
661
|
+
foo
|
662
|
+
bar
|
663
|
+
"
|
664
|
+
lambda {
|
665
|
+
@ffmpeg.send(:parse_result, result)
|
666
|
+
}.should raise_error(TranscoderError::UnexpectedResult, 'foo - bar')
|
667
|
+
end
|
668
|
+
|
669
|
+
specify "when a stream cannot be written" do
|
670
|
+
result = "FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard
|
671
|
+
Mac OSX universal build for ffmpegX
|
672
|
+
configuration: --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264
|
673
|
+
libavutil version: 49.0.0
|
674
|
+
libavcodec version: 51.9.0
|
675
|
+
libavformat version: 50.4.0
|
676
|
+
built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
|
677
|
+
|
678
|
+
Seems that stream 1 comes from film source: 600.00 (600/1) -> 59.75 (239/4)
|
679
|
+
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'jobjob2.mov':
|
680
|
+
Duration: 00:01:09.0, start: 0.000000, bitrate: 28847 kb/s
|
681
|
+
Stream #0.0(eng): Audio: aac, 44100 Hz, stereo
|
682
|
+
Stream #0.1(eng), 59.75 fps(r): Video: dvvideo, yuv411p, 720x480
|
683
|
+
Stream mapping:
|
684
|
+
Stream #0.1 -> #0.0
|
685
|
+
Stream #0.0 -> #0.1
|
686
|
+
Press [q] to stop encoding
|
687
|
+
[mp3 @ 0x54340c]flv doesnt support that sample rate, choose from (44100, 22050, 11025)
|
688
|
+
Could not write header for output file #0 (incorrect codec parameters ?)
|
689
|
+
"
|
690
|
+
lambda {
|
691
|
+
@ffmpeg.send(:parse_result, result)
|
692
|
+
}.should raise_error(TranscoderError, /flv doesnt support.*incorrect codec/)
|
693
|
+
end
|
694
|
+
|
695
|
+
end
|
696
|
+
end
|
697
|
+
end
|
698
|
+
|
699
|
+
def setup_ffmpeg_spec
|
700
|
+
@options = {:input_file => "foo", :output_file => "bar", :resolution => "baz"}
|
701
|
+
@simple_avi = "ffmpeg -i $input_file$ -ar 44100 -ab 64 -vcodec xvid -acodec mp3 -r 29.97 -s $resolution$ -y $output_file$"
|
702
|
+
@ffmpeg = RVideo::Tools::Ffmpeg.new(@simple_avi, @options)
|
703
|
+
end
|