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
data/ENV
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
RVideo is only as good as the tools it uses. To make the best use of RVideo, follow these instructions.
|
2
|
+
|
3
|
+
1. First, install dependencies.
|
4
|
+
|
5
|
+
wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/all-20061022.tar.bz2 (Mencoder complete codec pack)
|
6
|
+
wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz (LAME mp3 encoder)
|
7
|
+
a (Ogg)
|
8
|
+
sudo gem install flvtool2 (flvtool2 flv packager)
|
9
|
+
|
10
|
+
unzip...
|
11
|
+
|
12
|
+
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
|
13
|
+
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
|
14
|
+
|
15
|
+
-. Move mplayer codecs.
|
16
|
+
|
17
|
+
sudo mkdir /usr/local/lib/codecs/
|
18
|
+
mv essential-20061022/* /usr/local/lib/codecs/
|
19
|
+
chmod -R 755 /usr/local/lib/codecs/
|
20
|
+
|
21
|
+
3. Build
|
22
|
+
add /usr/local/lib to /etc/ld.so.conf
|
23
|
+
yum install libncurses-devel
|
24
|
+
|
25
|
+
For most:
|
26
|
+
./configure --enable-shared
|
27
|
+
make
|
28
|
+
sudo make install
|
29
|
+
|
30
|
+
FAAC
|
31
|
+
-- sudo yum install automake, autoconf, libtool, m4, gcc-c++
|
32
|
+
sh bootstrap
|
33
|
+
./configure
|
34
|
+
make
|
35
|
+
sudo make install
|
36
|
+
|
37
|
+
FAAD
|
38
|
+
(report of bugs - http://www.webhostingtalk.com/archive/index.php/t-565563.html and http://wiki.linuxfromscratch.org/blfs/wiki/faad2)
|
39
|
+
|
40
|
+
sed -i 's/ /\t/' Makefile.am &&
|
41
|
+
sed -i 's/NULL/0/' common/mp4v2/{mp4property.h,rtphint.h} &&
|
42
|
+
sed -i '/dd(m/ s/^v/static v/' common/mp4ff/mp4ffint.h
|
43
|
+
autoreconf -vif
|
44
|
+
./configure && make && sudo make install
|
45
|
+
(maybe add --mp4v2 to ./configure?)
|
46
|
+
|
47
|
+
XVID
|
48
|
+
wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
|
49
|
+
./configure etc. from within xvid/build/generic
|
50
|
+
|
51
|
+
A52
|
52
|
+
wget http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz
|
53
|
+
./configure etc.
|
54
|
+
|
55
|
+
AMR
|
56
|
+
???
|
57
|
+
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-700.zip
|
58
|
+
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-700.zip
|
59
|
+
cd ffmpeg/libavcodec/
|
60
|
+
mkdir amr_float
|
61
|
+
mkdir amrwb_float
|
62
|
+
cd amr_float
|
63
|
+
unzip ../../../26104-700.zip
|
64
|
+
unzip 26104-700_ANSI_C_source_code.zip
|
65
|
+
cd ../amrwb_float/
|
66
|
+
unzip ../../../26204-700.zip
|
67
|
+
unzip 26204-700_ANSI-C_source_code.zip
|
68
|
+
** not working.
|
69
|
+
|
70
|
+
X264
|
71
|
+
svn co svn://svn.videolan.org/x264/trunk x264
|
72
|
+
sudo yum install yasm # for mmx/sse - not sure if these are supported
|
73
|
+
./configure --enable-pthread --enable-shared # error adding --enable-mp4-output
|
74
|
+
make && sudo make install
|
75
|
+
|
76
|
+
FFMPEG
|
77
|
+
./configure --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-liba52 --enable-libxvid --enable-libfaac --enable-libfaad --enable-libx264 --enable-xvid --enable-pp --enable-shared --enable-gpl
|
78
|
+
|
79
|
+
Sources:
|
80
|
+
http://vexxhost.com/blog/2007/03/03/installing-ffmpeg-ffmpeg-php-mplayer-mencoder-flv2tool-lame-mp3-encoder-libogg-%E2%80%93-the-easy-way/
|
81
|
+
http://cihilt.com/book/export/html/49
|
82
|
+
|
83
|
+
TODO
|
84
|
+
wget http://downloads.xiph.org/releases/flac/flac-1.2.0.tar.gz (FLAC) *
|
85
|
+
faac
|
86
|
+
faad
|
87
|
+
xvid
|
88
|
+
x264
|
89
|
+
mp4box
|
90
|
+
wget http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.bz2 (theora) *
|
91
|
+
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz (Vorbis) (Gives error - LD_LIBRARY_PATH something)
|
92
|
+
|
93
|
+
liba52 dlopened no
|
94
|
+
libamr-nb support no
|
95
|
+
libamr-wb support no
|
96
|
+
libdc1394 support no
|
97
|
+
libfaad dlopened no
|
98
|
+
libgsm enabled no
|
99
|
+
libnut enabled no
|
100
|
+
libtheora enabled no
|
data/ENV2
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
adduser rvideo
|
2
|
+
(add rvideo to sudoers)
|
3
|
+
su - rvideo
|
4
|
+
mkdir src
|
5
|
+
cd src
|
6
|
+
|
7
|
+
sudo apt-get update (necessary?)
|
8
|
+
sudo apt-get install automake
|
9
|
+
sudo apt-get install autoconf
|
10
|
+
sudo apt-get install libtool
|
11
|
+
sudo apt-get install m4
|
12
|
+
sudo apt-get install g++ (gcc-c++ in fedora?) # not in OS X - xcode instead?
|
13
|
+
sudo apt-get install yasm
|
14
|
+
|
15
|
+
wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/all-20061022.tar.bz2
|
16
|
+
wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
|
17
|
+
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
|
18
|
+
wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
|
19
|
+
wget http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz
|
20
|
+
wget http://downloads.sourceforge.net/faac/faac-1.25.tar.gz
|
21
|
+
wget http://downloads.sourceforge.net/faac/faad2-2.5.tar.gz
|
22
|
+
wget http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.bz2
|
23
|
+
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz
|
24
|
+
wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.0.tar.bz2
|
25
|
+
wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.2.tar.bz2
|
26
|
+
|
27
|
+
sudo gem install flvtool2
|
28
|
+
|
29
|
+
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
|
30
|
+
svn co svn://svn.videolan.org/x264/trunk x264
|
31
|
+
|
32
|
+
tar xzvf a52dec-0.7.4.tar.gz
|
33
|
+
tar xzvf faac-1.25.tar.gz
|
34
|
+
tar xzvf faad2-2.5.tar.gz
|
35
|
+
tar xzvf lame-3.97.tar.gz
|
36
|
+
tar xzvf xvidcore-1.1.3.tar.gz
|
37
|
+
tar xzvf libogg-1.1.3.tar.gz
|
38
|
+
tar xjvf all-20061022.tar.bz2
|
39
|
+
tar xjvf libtheora-1.0alpha7.tar.bz2
|
40
|
+
tar xjvf amrnb-7.0.0.0.tar.bz2
|
41
|
+
tar xjvf amrwb-7.0.0.2.tar.bz2
|
42
|
+
|
43
|
+
sudo mkdir /usr/local/lib/codecs
|
44
|
+
sudo mv all-20061022/* /usr/local/lib/codecs
|
45
|
+
sudo chmod -R 755 /usr/local/lib/codecs/
|
46
|
+
|
47
|
+
echo /usr/local/lib >>/etc/ld.so.conf # not OS X
|
48
|
+
sudo ldconfig -v # not OS X
|
49
|
+
|
50
|
+
cd libogg-1.1.3
|
51
|
+
./configure --enable-shared && make && sudo make install
|
52
|
+
cd ..
|
53
|
+
|
54
|
+
cd libvorbis-1.2.0
|
55
|
+
./configure --enable-shared && make && sudo make install
|
56
|
+
cd ..
|
57
|
+
:3
|
58
|
+
cd libtheora-1.0alpha7
|
59
|
+
./configure --enable-shared && make && sudo make install
|
60
|
+
cd ..
|
61
|
+
|
62
|
+
cd faac
|
63
|
+
# PATCH as described at http://research.m1stereo.tv/wiki/index.php/Build_video_enc_env#faac
|
64
|
+
autoreconf -vif
|
65
|
+
./configure --with-mp4v2 && make && sudo make install
|
66
|
+
cd ..
|
67
|
+
|
68
|
+
cd faad2
|
69
|
+
|
70
|
+
# OS X -
|
71
|
+
# Patch as per darwinports version
|
72
|
+
# Comment out #define HAS_LRINTF block in common.h (including lrintf method definition)
|
73
|
+
|
74
|
+
# PATCH as described at (Linux) http://research.m1stereo.tv/wiki/index.php/Build_video_enc_env#faad2
|
75
|
+
autoreconf -vif
|
76
|
+
./configure && make && sudo make install
|
77
|
+
cd ..
|
78
|
+
|
79
|
+
cd xvidcore/build/generic
|
80
|
+
# OS X (see http://rob.opendot.cl/index.php/useful-stuff/xvid-with-asm-on-os-x/)
|
81
|
+
./configure --enable-macosx_module
|
82
|
+
Edit build/generic/platform.inc and ADD the flags shown below:
|
83
|
+
"-undefined suppress" to SPECIFIC_CFLAGS
|
84
|
+
"-f macho -DPREFIX" to AFLAGS (so it reads AFLAGS="AFLAGS=-I$(<D)/ -f macho -DPREFIX")
|
85
|
+
"-read_only_relocs suppress" to SPECIFIC_LDFLAGS
|
86
|
+
|
87
|
+
# Linux
|
88
|
+
./configure && make && sudo make install
|
89
|
+
cd ../../..
|
90
|
+
|
91
|
+
cd a52dec-0.7.4
|
92
|
+
./configure --enable-shared=yes && make && sudo make install
|
93
|
+
cd ..
|
94
|
+
|
95
|
+
cd lame-3.97
|
96
|
+
./configure && make && sudo make install
|
97
|
+
cd ..
|
98
|
+
|
99
|
+
cd x264
|
100
|
+
./configure --enable-pthread && make && sudo make install
|
101
|
+
cd ..
|
102
|
+
|
103
|
+
cd amrnb-7.0.0.0/
|
104
|
+
./configure && make && sudo make install
|
105
|
+
cd ..
|
106
|
+
|
107
|
+
cd amrwb-7.0.0.0/
|
108
|
+
./configure && make && sudo make install
|
109
|
+
cd ..
|
110
|
+
|
111
|
+
cd ffmpeg
|
112
|
+
# apply patch from http://research.m1stereo.tv/wiki/index.php/Build_video_enc_env - though use libfaad.c, not faad.c
|
113
|
+
./configure --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-liba52 --enable-libxvid --enable-libfaac --enable-libfaad --enable-libx264 --enable-libxvid --enable-pp --enable-shared --enable-gpl --enable-libtheora --enable-libfaadbin --enable-liba52bin --enable-libamr_nb --enable-libamr_wb
|
114
|
+
make && sudo make install
|
115
|
+
cd ..
|
116
|
+
|
117
|
+
|
118
|
+
NOT EXECUTED
|
119
|
+
apt-get install libncurses-devel (names of yum packages)
|
120
|
+
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
|
121
|
+
twolame
|
122
|
+
flac
|
123
|
+
speex
|
124
|
+
libdv
|
125
|
+
libmad
|
126
|
+
libmpeg2
|
127
|
+
mpeg4ip
|
128
|
+
|
129
|
+
http://graphics.cs.uni-sb.de/NMM/Download/external/nmm-1.0.0/external-libraries-optional/mpeg2dec-0.4.0b.tar.gz
|
data/History.txt
ADDED
data/License.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2007 Jonathan Dahl and Slantwise Design
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
ENV
|
2
|
+
ENV2
|
3
|
+
History.txt
|
4
|
+
License.txt
|
5
|
+
Manifest.txt
|
6
|
+
README.txt
|
7
|
+
RULES
|
8
|
+
Rakefile
|
9
|
+
config/boot.rb
|
10
|
+
lib/rvideo.rb
|
11
|
+
lib/rvideo/errors.rb
|
12
|
+
lib/rvideo/inspector.rb
|
13
|
+
lib/rvideo/reporter.rb
|
14
|
+
lib/rvideo/reporter/views/index.html.erb
|
15
|
+
lib/rvideo/reporter/views/report.css
|
16
|
+
lib/rvideo/reporter/views/report.html.erb
|
17
|
+
lib/rvideo/reporter/views/report.js
|
18
|
+
lib/rvideo/tools/abstract_tool.rb
|
19
|
+
lib/rvideo/tools/ffmpeg.rb
|
20
|
+
lib/rvideo/tools/flvtool2.rb
|
21
|
+
lib/rvideo/transcoder.rb
|
22
|
+
lib/rvideo/version.rb
|
23
|
+
scripts/txt2html
|
24
|
+
setup.rb
|
25
|
+
spec/files/kites.mp4
|
26
|
+
spec/fixtures/ffmpeg_builds.yml
|
27
|
+
spec/fixtures/files.yml
|
28
|
+
spec/fixtures/recipes.yml
|
29
|
+
spec/integrations/files/files.yml
|
30
|
+
spec/integrations/formats_spec.rb
|
31
|
+
spec/integrations/inspection_spec.rb
|
32
|
+
spec/integrations/recipes_spec.rb
|
33
|
+
spec/integrations/rvideo_spec.rb
|
34
|
+
spec/integrations/transcoding_spec.rb
|
35
|
+
spec/spec.opts
|
36
|
+
spec/spec_helper.rb
|
37
|
+
spec/units/abstract_tool_spec.rb
|
38
|
+
spec/units/ffmpeg_spec.rb
|
39
|
+
spec/units/flvtool2_spec.rb
|
40
|
+
spec/units/inspector_spec.rb
|
41
|
+
spec/units/transcoder_spec.rb
|
42
|
+
website/index.html
|
43
|
+
website/index.txt
|
44
|
+
website/javascripts/rounded_corners_lite.inc.js
|
data/README.txt
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
RVideo
|
2
|
+
|
3
|
+
RVideo allows you to inspect and process video files.
|
4
|
+
|
5
|
+
|
6
|
+
Installation is a little involved. First, install the gem:
|
7
|
+
|
8
|
+
sudo gem install rvideo
|
9
|
+
|
10
|
+
Next, install ffmpeg and (possibly) other related libraries. This is
|
11
|
+
documented elsewhere on the web, and can be a headache. If you are on OS X,
|
12
|
+
the Darwinports build is reasonably good (though not perfect). Install with:
|
13
|
+
|
14
|
+
sudo port install ffmpeg
|
15
|
+
|
16
|
+
Or, for a better build (recommended), add additional video- and audio-related
|
17
|
+
libraries, like this:
|
18
|
+
|
19
|
+
sudo port install ffmpeg +lame +libogg +vorbis +faac +faad +xvid +x264 +a52
|
20
|
+
|
21
|
+
Most package management systems include a build of ffmpeg, but many include a
|
22
|
+
poor build. So you may need to compile from scratch.
|
23
|
+
|
24
|
+
If you want to create Flash Video files, also install flvtool2:
|
25
|
+
|
26
|
+
sudo gem install flvtool2
|
27
|
+
|
28
|
+
Once ffmpeg and RVideo are installed, you're set.
|
29
|
+
|
30
|
+
To inspect a file, initialize an RVideo file inspector object. See the
|
31
|
+
documentation for details.
|
32
|
+
|
33
|
+
A few examples:
|
34
|
+
|
35
|
+
file = RVideo::Inspector.new(:file => "#{APP_ROOT}/files/input.mp4")
|
36
|
+
|
37
|
+
file = RVideo::Inspector.new(:raw_response => @existing_response)
|
38
|
+
|
39
|
+
file = RVideo::Inspector.new(:file => "#{APP_ROOT}/files/input.mp4",
|
40
|
+
:ffmpeg_binary => "#{APP_ROOT}/bin/ffmpeg")
|
41
|
+
|
42
|
+
file.fps # "29.97"
|
43
|
+
file.duration # "00:05:23.4"
|
44
|
+
|
45
|
+
To transcode a video, initialize a Transcoder object.
|
46
|
+
|
47
|
+
transcoder = RVideo::Transcoder.new
|
48
|
+
|
49
|
+
Then pass a command and valid options to the execute method
|
50
|
+
|
51
|
+
recipe = "ffmpeg -i $input_file$ -ar 22050 -ab 64 -f flv -r 29.97 -s"
|
52
|
+
recipe += " $resolution$ -y $output_file$"
|
53
|
+
recipe += "\nflvtool2 -U $output_file$"
|
54
|
+
begin
|
55
|
+
transcoder.execute(recipe, {:input_file => "/path/to/input.mp4",
|
56
|
+
:output_file => "/path/to/output.flv", :resolution => "640x360"})
|
57
|
+
rescue TranscoderError => e
|
58
|
+
puts "Unable to transcode file: #{e.class} - #{e.message}"
|
59
|
+
end
|
60
|
+
|
61
|
+
If the job succeeds, you can access the metadata of the input and output
|
62
|
+
files with:
|
63
|
+
|
64
|
+
transcoder.original # RVideo::Inspector object
|
65
|
+
transcoder.processed # RVideo::Inspector object
|
66
|
+
|
67
|
+
If the transcoding succeeds, the file may still have problems. RVideo
|
68
|
+
will populate an errors array if the duration of the processed video
|
69
|
+
differs from the duration of the original video, or if the processed
|
70
|
+
file is unreadable.
|
71
|
+
|
72
|
+
Thanks to Peter Boling for early work on RVideo.
|
73
|
+
|
74
|
+
Contribute to RVideo! If you want to help out, there are a few things you can
|
75
|
+
do.
|
76
|
+
|
77
|
+
- Use, test, and submit bugs/patches
|
78
|
+
- We need a RVideo::Tools::Mencoder class to add mencoder support.
|
79
|
+
- Other tool classes would be great - On2, mp4box, Quicktime (?), etc.
|
80
|
+
- Submit other fixes, features, optimizations, and refactorings
|
81
|
+
|
82
|
+
If RVideo is useful to you, you may also be interested in RMovie, another Ruby
|
83
|
+
video library. See http://rmovie.rubyforge.org/ for more.
|
84
|
+
|
85
|
+
Finally, watch for Spinoza, a commercial video transcoder built by Slantwise
|
86
|
+
Design. Spinoza uses RVideo for its video processing, but adds file queuing,
|
87
|
+
distributed transcoding, a web-based transcoder dashboard, and more. See
|
88
|
+
http://spinoza.tv or http://slantwisedesign.com for more.
|
89
|
+
|
90
|
+
Copyright (c) 2007 Jonathan Dahl and Slantwise Design. Released under the MIT
|
91
|
+
license.
|
data/RULES
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Collection of transcoding edge cases and rules
|
2
|
+
------------------------
|
3
|
+
|
4
|
+
* mpeg4 output errors out if frame rate is not supplied
|
5
|
+
|
6
|
+
[mpeg4 @ 0x149e810]timebase not supported by mpeg 4 standard
|
7
|
+
Error while opening codec for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
|
8
|
+
|
9
|
+
Solution: provide a frame rate with -r (any frame rate will do)
|
10
|
+
|
11
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'hoe'
|
11
|
+
begin
|
12
|
+
require 'spec/rake/spectask'
|
13
|
+
rescue LoadError
|
14
|
+
puts 'To use rspec for testing you must install rspec gem:'
|
15
|
+
puts '$ sudo gem install rspec'
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
|
19
|
+
include FileUtils
|
20
|
+
require File.join(File.dirname(__FILE__), 'lib', 'rvideo', 'version')
|
21
|
+
|
22
|
+
AUTHOR = 'Jonathan Dahl (Slantwise Design)' # can also be an array of Authors
|
23
|
+
EMAIL = "jon@slantwisedesign.com"
|
24
|
+
DESCRIPTION = "Video transcoding library"
|
25
|
+
GEM_NAME = 'rvideo' # what ppl will type to install your gem
|
26
|
+
|
27
|
+
@config_file = "~/.rubyforge/user-config.yml"
|
28
|
+
@config = nil
|
29
|
+
def rubyforge_username
|
30
|
+
unless @config
|
31
|
+
begin
|
32
|
+
@config = YAML.load(File.read(File.expand_path(@config_file)))
|
33
|
+
rescue
|
34
|
+
puts <<-EOS
|
35
|
+
ERROR: No rubyforge config file found: #{@config_file}"
|
36
|
+
Run 'rubyforge setup' to prepare your env for access to Rubyforge
|
37
|
+
- See http://newgem.rubyforge.org/rubyforge.html for more details
|
38
|
+
EOS
|
39
|
+
exit
|
40
|
+
end
|
41
|
+
end
|
42
|
+
@rubyforge_username ||= @config["username"]
|
43
|
+
end
|
44
|
+
|
45
|
+
RUBYFORGE_PROJECT = 'rvideo' # The unix name for your project
|
46
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
47
|
+
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
48
|
+
|
49
|
+
NAME = "rvideo"
|
50
|
+
REV = nil
|
51
|
+
# UNCOMMENT IF REQUIRED:
|
52
|
+
# REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
|
53
|
+
VERS = Rvideo::VERSION::STRING + (REV ? ".#{REV}" : "")
|
54
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
|
55
|
+
RDOC_OPTS = ['--quiet', '--title', 'rvideo documentation',
|
56
|
+
"--opname", "index.html",
|
57
|
+
"--line-numbers",
|
58
|
+
"--main", "README",
|
59
|
+
"--inline-source"]
|
60
|
+
|
61
|
+
class Hoe
|
62
|
+
def extra_deps
|
63
|
+
@extra_deps.reject { |x| Array(x).first == 'hoe' }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Generate all the Rake tasks
|
68
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
69
|
+
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
70
|
+
p.author = AUTHOR
|
71
|
+
p.description = DESCRIPTION
|
72
|
+
p.email = EMAIL
|
73
|
+
p.summary = DESCRIPTION
|
74
|
+
p.url = HOMEPATH
|
75
|
+
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
76
|
+
p.test_globs = ["test/**/test_*.rb"]
|
77
|
+
p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
|
78
|
+
|
79
|
+
# == Optional
|
80
|
+
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
81
|
+
#p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
82
|
+
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
83
|
+
end
|
84
|
+
|
85
|
+
CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n")
|
86
|
+
PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
|
87
|
+
hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
|
88
|
+
|
89
|
+
desc 'Generate website files'
|
90
|
+
task :website_generate do
|
91
|
+
Dir['website/**/*.txt'].each do |txt|
|
92
|
+
sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
desc 'Upload website files to rubyforge'
|
97
|
+
task :website_upload do
|
98
|
+
host = "#{rubyforge_username}@rubyforge.org"
|
99
|
+
remote_dir = "/var/www/gforge-projects/#{PATH}/"
|
100
|
+
local_dir = 'website'
|
101
|
+
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
102
|
+
end
|
103
|
+
|
104
|
+
desc 'Generate and upload website files'
|
105
|
+
task :website => [:website_generate, :website_upload, :publish_docs]
|
106
|
+
|
107
|
+
desc 'Release the website and new gem version'
|
108
|
+
task :deploy => [:check_version, :website, :release] do
|
109
|
+
puts "Remember to create SVN tag:"
|
110
|
+
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
111
|
+
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
112
|
+
puts "Suggested comment:"
|
113
|
+
puts "Tagging release #{CHANGES}"
|
114
|
+
end
|
115
|
+
|
116
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
117
|
+
task :local_deploy => [:website_generate, :install_gem]
|
118
|
+
|
119
|
+
task :check_version do
|
120
|
+
unless ENV['VERSION']
|
121
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
122
|
+
exit
|
123
|
+
end
|
124
|
+
unless ENV['VERSION'] == VERS
|
125
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
126
|
+
exit
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
#require 'rake'
|
131
|
+
#require 'spec/rake/spectask'
|
132
|
+
require File.dirname(__FILE__) + '/lib/rvideo'
|
133
|
+
|
134
|
+
desc "Creates a HTML report using the recipes in report/recipes and files in report/input_files"
|
135
|
+
task(:report) do
|
136
|
+
require 'rvideo/reporter'
|
137
|
+
RVideo::Reporter.run
|
138
|
+
end
|
139
|
+
|
140
|
+
namespace :spec do
|
141
|
+
desc "Run Unit Specs"
|
142
|
+
Spec::Rake::SpecTask.new("units") do |t|
|
143
|
+
t.spec_files = FileList['spec/units/**/*.rb']
|
144
|
+
end
|
145
|
+
|
146
|
+
desc "Run Integration Specs"
|
147
|
+
Spec::Rake::SpecTask.new("integrations") do |t|
|
148
|
+
t.spec_files = FileList['spec/integrations/**/*.rb']
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
#desc "Process kites.mp4"
|
153
|
+
#task(:transcode) do
|
154
|
+
# RVideo::Transcoder.logger = Logger.new(STDOUT)
|
155
|
+
#
|
156
|
+
# r = RVideo::Recipe.new
|
157
|
+
# r.load("#{FIXTURE_PATH}/recipes.yml")
|
158
|
+
# r.find(:simple_avi)
|
159
|
+
# transcoder = RVideo::Transcoder.new
|
160
|
+
# transcoder.execute(r.command, {:input_file => "#{TEST_FILE_PATH}/kites.mp4", :output_file => "#{TEMP_PATH}/kites-transcoded.avi", :resolution => "320x240"})
|
161
|
+
# puts transcoder.executed_commands.inspect
|
162
|
+
#end
|
163
|
+
|