voyeur 0.1.2 → 0.2.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/.gitignore +2 -0
- data/README.md +21 -7
- data/lib/Voyeur/audio_converters/aac.rb +13 -0
- data/lib/Voyeur/audio_converters/ogg.rb +13 -0
- data/lib/Voyeur/converter.rb +29 -16
- data/lib/Voyeur/exceptions.rb +1 -1
- data/lib/Voyeur/media.rb +41 -0
- data/lib/Voyeur/media_time.rb +17 -0
- data/lib/Voyeur/version.rb +1 -1
- data/lib/Voyeur/video_converters/iphone.rb +14 -0
- data/lib/voyeur.rb +6 -2
- data/spec/converters/audio_converters/aac_spec.rb +59 -0
- data/spec/converters/audio_converters/ogg_spec.rb +59 -0
- data/spec/converters/video_converters/iphone_spec.rb +62 -0
- data/spec/converters/video_converters/mp4_spec.rb +62 -0
- data/spec/converters/video_converters/ogv_spec.rb +43 -0
- data/spec/converters/video_converters/webm_spec.rb +43 -0
- data/spec/media_time_spec.rb +48 -0
- data/spec/video_spec.rb +86 -45
- metadata +74 -69
- data/lib/Voyeur/video.rb +0 -23
- data/spec/converters/mp4_spec.rb +0 -66
- data/spec/converters/ogv_spec.rb +0 -46
- data/spec/converters/webm_spec.rb +0 -48
- data/spec/fixtures/test.3gp +0 -0
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Voyeur
|
2
|
-
Voyeur is a ruby library that will take your video files and convert
|
2
|
+
Voyeur is a ruby library that will take your video and audio files and convert
|
3
3
|
them to common HTML5 formats exposing an easy to use API. Seriously
|
4
4
|
it's like falling out of a tree then climbing back.
|
5
5
|
|
@@ -23,35 +23,49 @@ You can also try out automated [setup scripts](https://github.com/devthenet/ffmp
|
|
23
23
|
## Usage
|
24
24
|
Simple conversions may be done by simply:
|
25
25
|
|
26
|
-
Voyeur::
|
26
|
+
Voyeur::Media.new( filename: path_to_file ).convert( to: :mp4 )
|
27
27
|
|
28
28
|
This will convert the video into Mp4 and save it in the same directory
|
29
29
|
as the original video.
|
30
30
|
|
31
|
+
This will also work for audio using the same API by simply:
|
32
|
+
|
33
|
+
Voyeur::Media.new( filename: path_to_file ).convert( to: :acc )
|
34
|
+
|
35
|
+
This will convert the sound file into acc and save it in the same directory as the original video
|
36
|
+
|
37
|
+
You can call convert with a block, this will return a MediaTime object.
|
38
|
+
|
39
|
+
Voyeur::Media.new( filename: path_to_file ).convert( to: :mp4 ) do |time|
|
40
|
+
puts time.to_seconds
|
41
|
+
end
|
42
|
+
This will output how far along the video the conversion process is, it can be used to display percentage completed.
|
43
|
+
See bin/voyuer.rb for an example.
|
44
|
+
|
31
45
|
Alternatively you can convert to all 3 types at once:
|
32
46
|
|
33
|
-
Voyeur::
|
47
|
+
Voyeur::Media.new( filename: path_to_file ).convert_to_html5
|
34
48
|
This will convert the video into 3 formats. Mp4, Ogv and Webm and place
|
35
49
|
them in the same folder as the parent.
|
36
50
|
|
37
51
|
I have allowed the user to specify an output filename. (Note: if no
|
38
52
|
output filename the file is just named after the original file):
|
39
53
|
|
40
|
-
Voyeur::
|
54
|
+
Voyeur::Media.new( filename: path_to_file ).convert( to: :mp4, output_filename: "my_cool_video" )
|
41
55
|
|
42
56
|
This will give you a converted video called "my_cool_video.mp4".
|
43
57
|
|
44
58
|
You can also convert to all with the following:
|
45
59
|
|
46
|
-
Voyeur::
|
60
|
+
Voyeur::Media.new( filename: path_to_file ).convert_to_html5( output_filename: "my_cool_video" )
|
47
61
|
|
48
62
|
It is also possible to place the formatted video in a custom folder:
|
49
63
|
|
50
|
-
Voyeur::
|
64
|
+
Voyeur::Media.new( filename: path_to_file ).convert( to: :mp4, output_path: "my/cool/file/path" )
|
51
65
|
|
52
66
|
or
|
53
67
|
|
54
|
-
Voyeur::
|
68
|
+
Voyeur::Media.new( filename: path_to_file ).convert_to_html5( output_path: "my/cool/file/path" )
|
55
69
|
|
56
70
|
## Extendibility
|
57
71
|
|
data/lib/Voyeur/converter.rb
CHANGED
@@ -1,23 +1,30 @@
|
|
1
1
|
module Voyeur
|
2
2
|
class Converter
|
3
|
-
attr_accessor :
|
4
|
-
attr_reader :
|
3
|
+
attr_accessor :input_media
|
4
|
+
attr_reader :output_media
|
5
5
|
attr_reader :status
|
6
6
|
|
7
7
|
def self.create(options)
|
8
8
|
constant = Voyeur
|
9
|
-
klass =
|
10
|
-
|
11
|
-
|
9
|
+
klass = if options[:format].is_a?(Symbol)
|
10
|
+
klass_name = "#{options[:format].capitalize}"
|
11
|
+
raise Voyeur::Exceptions::InvalidFormat unless constant.const_defined? klass_name
|
12
|
+
constant.const_get(klass_name)
|
13
|
+
else
|
14
|
+
options[:format]
|
15
|
+
end
|
12
16
|
klass.new
|
13
17
|
end
|
14
18
|
|
15
19
|
def convert(options)
|
16
|
-
@
|
17
|
-
raise Voyeur::Exceptions::
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
@input_media = options[:media]
|
21
|
+
raise Voyeur::Exceptions::NoMediaPresent unless @input_media
|
22
|
+
@output_media = Media.new(filename: output_file(options[:output_path], options[:output_filename]))
|
23
|
+
if block_given?
|
24
|
+
self.call_external_converter{ |time| yield time }
|
25
|
+
else
|
26
|
+
self.call_external_converter
|
27
|
+
end
|
21
28
|
end
|
22
29
|
|
23
30
|
protected
|
@@ -28,27 +35,33 @@ module Voyeur
|
|
28
35
|
|
29
36
|
def output_path(output_path = nil)
|
30
37
|
raise Voyeur::Exceptions::InvalidLocation if output_path && !File.directory?(output_path)
|
31
|
-
output_path ? output_path : File.dirname(@
|
38
|
+
output_path ? output_path : File.dirname(@input_media.filename)
|
32
39
|
end
|
33
40
|
|
34
41
|
def output_filename(input_filename = nil)
|
35
|
-
filename = input_filename.nil? ? @
|
42
|
+
filename = input_filename.nil? ? @input_media.filename : input_filename
|
36
43
|
File.basename(filename, '.*') + ".#{self.file_extension}"
|
37
44
|
end
|
38
45
|
|
39
46
|
def call_external_converter
|
40
|
-
command = "ffmpeg -i #{@
|
47
|
+
command = "ffmpeg -y -i #{@input_media.filename} #{self.convert_options} #{@output_media.filename}"
|
41
48
|
out, err = ""
|
42
49
|
|
43
50
|
status = Open4::popen4(command) do |pid, stdin, stdout, stderr|
|
44
|
-
|
45
|
-
|
51
|
+
err = ''
|
52
|
+
out = ''
|
53
|
+
stderr.each("r") do |line|
|
54
|
+
err += line
|
55
|
+
if line =~ /time=(\d+:\d+:\d+.\d+)/
|
56
|
+
yield $1 if block_given?
|
57
|
+
end
|
58
|
+
end
|
46
59
|
end
|
47
60
|
|
48
61
|
error_message = err.split('\n').last
|
49
62
|
|
50
63
|
@status = { status: status.exitstatus, stdout: out, stderr: err,
|
51
|
-
|
64
|
+
error_message: error_message, media: @output_media }
|
52
65
|
return @status
|
53
66
|
end
|
54
67
|
end
|
data/lib/Voyeur/exceptions.rb
CHANGED
data/lib/Voyeur/media.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module Voyeur
|
2
|
+
class Media
|
3
|
+
attr_reader :filename
|
4
|
+
attr_reader :raw_duration
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
@filename = options[:filename]
|
8
|
+
self.get_info
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_info
|
12
|
+
output = ''
|
13
|
+
status = Open4::popen4("ffmpeg -i #{@filename}") do |pid, stdin, stdout, stderr|
|
14
|
+
output = stderr.read.strip
|
15
|
+
end
|
16
|
+
@raw_duration = $1 if output =~ /Duration: (\d+:\d+:\d+.\d+)/
|
17
|
+
end
|
18
|
+
|
19
|
+
def convert(options)
|
20
|
+
converter = Voyeur::Converter.create(format: options[:to])
|
21
|
+
|
22
|
+
if block_given?
|
23
|
+
converter.convert(media: self,
|
24
|
+
output_filename: options[:output_filename],
|
25
|
+
output_path: options[:output_path]){ |time| yield time }
|
26
|
+
else
|
27
|
+
converter.convert(media: self,
|
28
|
+
output_filename: options[:output_filename],
|
29
|
+
output_path: options[:output_path])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def convert_to_html5(options = nil)
|
34
|
+
[:mp4, :ogv, :webm].each do |f|
|
35
|
+
options_hash = {to: f}
|
36
|
+
options_hash.merge!(options) if options
|
37
|
+
convert(options_hash)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Voyeur
|
2
|
+
class MediaTime
|
3
|
+
attr_accessor :raw_time
|
4
|
+
attr_accessor :hours, :minutes, :seconds
|
5
|
+
|
6
|
+
def initialize(raw_time)
|
7
|
+
@hours, @minutes, @seconds = raw_time.split(":")
|
8
|
+
@hours = @hours.to_i
|
9
|
+
@minutes = @minutes.to_i
|
10
|
+
@seconds = @seconds.to_i
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_seconds
|
14
|
+
@seconds + (@minutes * 60) + (@hours * 60 * 60)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/Voyeur/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
#H.264 for iphone
|
2
|
+
module Voyeur
|
3
|
+
class Iphone < Converter
|
4
|
+
|
5
|
+
def file_extension
|
6
|
+
"mp4"
|
7
|
+
end
|
8
|
+
|
9
|
+
def convert_options
|
10
|
+
"-s 320x240 -r 30000/1001 -b 200k -bt 240k -vcodec libx264 -vpre ipod320 -acodec libfaac -ac 2 -ar 48000 -ab 192k"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/lib/voyeur.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require "Voyeur/version"
|
2
|
-
require "Voyeur/
|
2
|
+
require "Voyeur/media"
|
3
3
|
require "Voyeur/exceptions"
|
4
4
|
require "Voyeur/converter"
|
5
5
|
require "Voyeur/video_converters/ogv"
|
6
6
|
require "Voyeur/video_converters/mp4"
|
7
7
|
require "Voyeur/video_converters/webm"
|
8
|
-
require
|
8
|
+
require "Voyeur/video_converters/iphone"
|
9
|
+
require "Voyeur/audio_converters/aac"
|
10
|
+
require "Voyeur/audio_converters/ogg"
|
11
|
+
require "Voyeur/media_time"
|
12
|
+
require 'open4'
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::Aac do
|
4
|
+
let(:converter) { Voyeur::Converter.create(format: :aac) }
|
5
|
+
let(:audio) { Voyeur::Media.new(filename: valid_mpeg_file_path) }
|
6
|
+
|
7
|
+
it "should use the correct factory" do
|
8
|
+
converter.class.to_s.should == "Voyeur::Aac"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "default convert string" do
|
12
|
+
converter.convert_options.should == "-acodec libfaac -ac 2 -ar 44100 -ab 128k"
|
13
|
+
end
|
14
|
+
|
15
|
+
context "A valid audio files" do
|
16
|
+
after :each do
|
17
|
+
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "aac")) if File.exists?(valid_mpeg_file_path.gsub(/mpeg/, "aac"))
|
18
|
+
end
|
19
|
+
|
20
|
+
context "#convert_options: " do
|
21
|
+
it "names the file correctly" do
|
22
|
+
converter.convert(media: audio)
|
23
|
+
output_file = valid_mpeg_file_path.gsub(/mpeg/, "aac")
|
24
|
+
converter.output_media.filename.should == output_file
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns an audio file" do
|
28
|
+
converter.convert(media: audio)
|
29
|
+
converter.input_media.should == audio
|
30
|
+
end
|
31
|
+
|
32
|
+
context "audio file - " do
|
33
|
+
it "returns conversion status indicating success" do
|
34
|
+
result = converter.convert(media: audio)
|
35
|
+
result[:status].should == 0
|
36
|
+
result[:media].should == converter.output_media
|
37
|
+
end
|
38
|
+
|
39
|
+
it "allows it to be named" do
|
40
|
+
result = converter.convert(media: audio)
|
41
|
+
result[:status].should == 0
|
42
|
+
result[:media].should == converter.output_media
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "An invalid audio file" do
|
49
|
+
let(:audio) { Voyeur::Media.new(filename: 'test_media.mpeg') }
|
50
|
+
|
51
|
+
it "returns conversion status indicating failure" do
|
52
|
+
result = converter.convert(media: audio)
|
53
|
+
result[:status].should == 1
|
54
|
+
result[:media].should == converter.output_media
|
55
|
+
result[:error_message].should match(/test_media.mpeg: No such file or directory/)
|
56
|
+
result[:stderr].nil?.should == false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::Ogg do
|
4
|
+
let(:converter) { Voyeur::Converter.create(format: :ogg) }
|
5
|
+
let(:audio) { Voyeur::Media.new(filename: valid_mpeg_file_path) }
|
6
|
+
|
7
|
+
it "uses the correct factory" do
|
8
|
+
converter.class.to_s.should == "Voyeur::Ogg"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "default convert string" do
|
12
|
+
converter.convert_options.should == "-strict -2 -acodec vorbis -aq 60"
|
13
|
+
end
|
14
|
+
|
15
|
+
context "A valid audio files" do
|
16
|
+
after :each do
|
17
|
+
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "ogg")) if File.exists?(valid_mpeg_file_path.gsub(/mpeg/, "ogg"))
|
18
|
+
end
|
19
|
+
|
20
|
+
context "#convert_options: " do
|
21
|
+
it "names the media correctly" do
|
22
|
+
converter.convert(media: audio)
|
23
|
+
output_file = valid_mpeg_file_path.gsub(/mpeg/, "ogg")
|
24
|
+
converter.output_media.filename.should == output_file
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns an audio file" do
|
28
|
+
converter.convert(media: audio)
|
29
|
+
converter.input_media.should == audio
|
30
|
+
end
|
31
|
+
|
32
|
+
context "audio file - " do
|
33
|
+
it "returns conversion status indicating success" do
|
34
|
+
result = converter.convert(media: audio)
|
35
|
+
result[:status].should == 0
|
36
|
+
result[:media].should == converter.output_media
|
37
|
+
end
|
38
|
+
|
39
|
+
it "allows it to be named" do
|
40
|
+
result = converter.convert(media: audio)
|
41
|
+
result[:status].should == 0
|
42
|
+
result[:media].should == converter.output_media
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "An invalid audio file" do
|
49
|
+
let(:audio) { Voyeur::Media.new(filename: 'test_media.mpeg') }
|
50
|
+
|
51
|
+
it "returns conversion status indicating failure" do
|
52
|
+
result = converter.convert(media: audio)
|
53
|
+
result[:status].should == 1
|
54
|
+
result[:media].should == converter.output_media
|
55
|
+
result[:error_message].should match(/test_media.mpeg: No such file or directory/)
|
56
|
+
result[:stderr].nil?.should == false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::Iphone do
|
4
|
+
let(:converter) { Voyeur::Converter.create(format: :iphone) }
|
5
|
+
let(:media) { Voyeur::Media.new(filename: valid_mpeg_file_path) }
|
6
|
+
|
7
|
+
it "uses the correct factory" do
|
8
|
+
converter.class.to_s.should == "Voyeur::Iphone"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "default convert string" do
|
12
|
+
converter.convert_options.should == "-s 320x240 -r 30000/1001 -b 200k -bt 240k -vcodec libx264 -vpre ipod320 -acodec libfaac -ac 2 -ar 48000 -ab 192k"
|
13
|
+
end
|
14
|
+
|
15
|
+
context "A valid Media" do
|
16
|
+
after :each do
|
17
|
+
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "mp4")) if File.exists?(valid_mpeg_file_path.gsub(/mpeg/, "mp4"))
|
18
|
+
end
|
19
|
+
|
20
|
+
context "#convert_options" do
|
21
|
+
it "names the media correctly" do
|
22
|
+
converter.convert(media: media)
|
23
|
+
output_file = valid_mpeg_file_path.gsub(/mpeg/, "mp4")
|
24
|
+
converter.output_media.filename.should == output_file
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns a media" do
|
28
|
+
converter.convert(media: media)
|
29
|
+
converter.input_media.should == media
|
30
|
+
end
|
31
|
+
|
32
|
+
context "real media" do
|
33
|
+
it "returns conversion status indicating success" do
|
34
|
+
result = converter.convert(media: media)
|
35
|
+
result[:status].should == 0
|
36
|
+
result[:media].should == converter.output_media
|
37
|
+
end
|
38
|
+
|
39
|
+
it "allows them to name the media" do
|
40
|
+
result = converter.convert(media: media)
|
41
|
+
result[:status].should == 0
|
42
|
+
result[:media].should == converter.output_media
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "An invalid Media" do
|
49
|
+
let(:converter) { Voyeur::Converter.create(format: :iphone) }
|
50
|
+
let(:media) { Voyeur::Media.new(filename: 'test_media.mpeg') }
|
51
|
+
|
52
|
+
context "File does not exist" do
|
53
|
+
it "returns conversion status indicating failure" do
|
54
|
+
result = converter.convert(media: media)
|
55
|
+
result[:status].should == 1
|
56
|
+
result[:media].should == converter.output_media
|
57
|
+
result[:error_message].should match(/test_media.mpeg: No such file or directory/)
|
58
|
+
result[:stderr].nil?.should == false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::Mp4 do
|
4
|
+
let(:converter) { Voyeur::Converter.create(format: :mp4) }
|
5
|
+
let(:media) { Voyeur::Media.new(filename: valid_mpeg_file_path) }
|
6
|
+
|
7
|
+
it "uses the correct factory" do
|
8
|
+
converter.class.to_s.should == "Voyeur::Mp4"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "default convert string" do
|
12
|
+
converter.convert_options.should == "-b 1500k -vcodec libx264 -g 30"
|
13
|
+
end
|
14
|
+
|
15
|
+
context "A valid Media" do
|
16
|
+
after :each do
|
17
|
+
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "mp4")) if File.exists?(valid_mpeg_file_path.gsub(/mpeg/, "mp4"))
|
18
|
+
end
|
19
|
+
|
20
|
+
context "#convert_options" do
|
21
|
+
it "names the media correctly" do
|
22
|
+
converter.convert(media: media)
|
23
|
+
output_file = valid_mpeg_file_path.gsub(/mpeg/, "mp4")
|
24
|
+
converter.output_media.filename.should == output_file
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns a media" do
|
28
|
+
converter.convert(media: media)
|
29
|
+
converter.input_media.should == media
|
30
|
+
end
|
31
|
+
|
32
|
+
context "real media" do
|
33
|
+
it "returns conversion status indicating success" do
|
34
|
+
result = converter.convert(media: media)
|
35
|
+
result[:status].should == 0
|
36
|
+
result[:media].should == converter.output_media
|
37
|
+
end
|
38
|
+
|
39
|
+
it "allows them to name the media" do
|
40
|
+
result = converter.convert(media: media)
|
41
|
+
result[:status].should == 0
|
42
|
+
result[:media].should == converter.output_media
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "An invalid Media" do
|
49
|
+
let(:converter) { Voyeur::Converter.create(format: :mp4) }
|
50
|
+
let(:media) { Voyeur::Media.new(filename: 'test_media.mpeg') }
|
51
|
+
|
52
|
+
context "File does not exist" do
|
53
|
+
it "returns conversion status indicating failure" do
|
54
|
+
result = converter.convert(media: media)
|
55
|
+
result[:status].should == 1
|
56
|
+
result[:media].should == converter.output_media
|
57
|
+
result[:error_message].should match(/test_media.mpeg: No such file or directory/)
|
58
|
+
result[:stderr].nil?.should == false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::Ogv do
|
4
|
+
context "New Video" do
|
5
|
+
let(:converter) { Voyeur::Converter.create(format: :ogv) }
|
6
|
+
let(:media) { Voyeur::Media.new(filename: 'test_media.ogv') }
|
7
|
+
|
8
|
+
it "uses the correct factory" do
|
9
|
+
converter.class.to_s.should == "Voyeur::Ogv"
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#convert_options" do
|
13
|
+
it "default convert string" do
|
14
|
+
converter.convert_options.should == "-b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "raises an exception if no media is passed" do
|
18
|
+
media = nil
|
19
|
+
-> { converter.convert(media: media) }.should raise_error Voyeur::Exceptions::NoMediaPresent
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a media" do
|
23
|
+
converter.convert(media: media)
|
24
|
+
converter.input_media.should == media
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "An invalid Video" do
|
30
|
+
let(:converter) { Voyeur::Converter.create(format: :ogv) }
|
31
|
+
let(:media) { Voyeur::Media.new(filename: 'test_media.mpeg') }
|
32
|
+
|
33
|
+
context "File does not exist" do
|
34
|
+
it "returns conversion status indicating failure" do
|
35
|
+
result = converter.convert(media: media)
|
36
|
+
result[:status].should == 1
|
37
|
+
result[:media].should == converter.output_media
|
38
|
+
result[:error_message].should match(/test_media.mpeg: No such file or directory/)
|
39
|
+
result[:stderr].nil?.should == false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::Webm do
|
4
|
+
context "New Media" do
|
5
|
+
let(:converter) { Voyeur::Converter.create(format: :webm) }
|
6
|
+
let(:media) { Voyeur::Media.new(filename: 'test_media.webm') }
|
7
|
+
|
8
|
+
it "uses the correct factory" do
|
9
|
+
converter.class.to_s.should == "Voyeur::Webm"
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#convert_options" do
|
13
|
+
it "default convert string" do
|
14
|
+
converter.convert_options.should == "-b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "raises an exception if no media is passed" do
|
18
|
+
media = nil
|
19
|
+
-> { converter.convert(media: media) }.should raise_error Voyeur::Exceptions::NoMediaPresent
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns a media" do
|
23
|
+
converter.convert(media: media)
|
24
|
+
converter.input_media.should == media
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "An invalid Media" do
|
30
|
+
let(:converter) { Voyeur::Converter.create(format: :webm) }
|
31
|
+
let(:media) { Voyeur::Media.new(filename: 'test_media.mpeg') }
|
32
|
+
|
33
|
+
context "File does not exist" do
|
34
|
+
it "returns conversion status indicating failure" do
|
35
|
+
result = converter.convert(media: media)
|
36
|
+
result[:status].should == 1
|
37
|
+
result[:media].should == converter.output_media
|
38
|
+
result[:error_message].should match(/test_media.mpeg: No such file or directory/)
|
39
|
+
result[:stderr].nil?.should == false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Voyeur::MediaTime do
|
4
|
+
context "When passing a valid 0 time string in" do
|
5
|
+
let(:raw_time) { "00:00:00.00" }
|
6
|
+
let(:media_time) { Voyeur::MediaTime.new(raw_time) }
|
7
|
+
|
8
|
+
it "hours minutes and seconds should be 0" do
|
9
|
+
media_time.hours.should == 0
|
10
|
+
media_time.minutes.should == 0
|
11
|
+
media_time.seconds.should == 0
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns 0 seconds" do
|
15
|
+
media_time.to_seconds.should == 0
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "When passing a a valid 1 minutes long time string in" do
|
20
|
+
let(:raw_time) { "00:01:00.00" }
|
21
|
+
let(:media_time) { Voyeur::MediaTime.new(raw_time) }
|
22
|
+
|
23
|
+
it "haves minutes as one" do
|
24
|
+
media_time.hours.should == 0
|
25
|
+
media_time.minutes.should == 1
|
26
|
+
media_time.seconds.should == 0
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns 60 seconds" do
|
30
|
+
media_time.to_seconds.should == 60
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "When passing a valid string with 1 hour 10 minute and 20 seconds" do
|
35
|
+
let(:raw_time) { "01:10:20.00" }
|
36
|
+
let(:media_time) { Voyeur::MediaTime.new(raw_time) }
|
37
|
+
|
38
|
+
it "haves hour as one, minutes as 10 and seconds as 20" do
|
39
|
+
media_time.hours.should == 1
|
40
|
+
media_time.minutes.should == 10
|
41
|
+
media_time.seconds.should == 20
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns 4220 seconds" do
|
45
|
+
media_time.to_seconds.should == 4220
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/spec/video_spec.rb
CHANGED
@@ -1,78 +1,119 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Voyeur::
|
4
|
-
it '
|
3
|
+
describe Voyeur::Media do
|
4
|
+
it 'creates a new video object from a filename' do
|
5
5
|
video_input_name = 'test_file.mpeg'
|
6
|
-
video = Voyeur::
|
6
|
+
video = Voyeur::Media.new filename: video_input_name
|
7
7
|
video.filename.should == video_input_name
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
11
|
-
Voyeur::
|
12
|
-
|
13
|
-
|
10
|
+
it 'gets duration of a media object from a filename' do
|
11
|
+
video = Voyeur::Media.new( filename: valid_mpeg_file_path )
|
12
|
+
video.raw_duration.should_not be_nil
|
13
|
+
video.raw_duration.should_not == ''
|
14
14
|
end
|
15
15
|
|
16
|
-
it "
|
17
|
-
Voyeur::
|
18
|
-
|
19
|
-
File.
|
16
|
+
it "converts a video to ogv" do
|
17
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).convert(to: :ogv)
|
18
|
+
ogv_file = valid_mpeg_file_path.gsub(/mpeg/, "ogv")
|
19
|
+
File.should exist(ogv_file)
|
20
|
+
File.delete(ogv_file)
|
20
21
|
end
|
21
22
|
|
22
|
-
it "
|
23
|
-
Voyeur::
|
24
|
-
|
25
|
-
File.
|
23
|
+
it "converts a video to mp4" do
|
24
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).convert(to: :mp4)
|
25
|
+
mp4_file = valid_mpeg_file_path.gsub(/mpeg/, "mp4")
|
26
|
+
File.should exist(mp4_file)
|
27
|
+
File.delete(mp4_file)
|
26
28
|
end
|
27
29
|
|
28
|
-
it "
|
29
|
-
Voyeur::
|
30
|
-
|
31
|
-
File.
|
32
|
-
File.
|
33
|
-
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "ogv"))
|
34
|
-
File.exists?(valid_mpeg_file_path.gsub(/mpeg/, "webm")).should be_true
|
35
|
-
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "webm"))
|
30
|
+
it "converts a video to webm" do
|
31
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).convert(to: :webm)
|
32
|
+
webm_file = valid_mpeg_file_path.gsub(/mpeg/, "webm")
|
33
|
+
File.should exist(webm_file)
|
34
|
+
File.delete(webm_file)
|
36
35
|
end
|
37
36
|
|
38
|
-
it "
|
39
|
-
Voyeur::
|
37
|
+
it "converts a video to all HTML5 video formats" do
|
38
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).convert_to_html5
|
39
|
+
|
40
|
+
mp4_file = valid_mpeg_file_path.gsub(/mpeg/, "mp4")
|
41
|
+
File.should exist(mp4_file)
|
42
|
+
File.delete(mp4_file)
|
43
|
+
|
44
|
+
ogv_file = valid_mpeg_file_path.gsub(/mpeg/, "ogv")
|
45
|
+
File.should exist(ogv_file)
|
46
|
+
File.delete(ogv_file)
|
47
|
+
|
48
|
+
webm_path = valid_mpeg_file_path.gsub(/mpeg/, "webm")
|
49
|
+
File.should exist(webm_path)
|
50
|
+
File.delete(webm_path)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "allows the user to name the video" do
|
54
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).
|
40
55
|
convert(to: :webm, output_filename: "sexypants")
|
41
|
-
|
42
|
-
File.
|
56
|
+
webm_file = "#{fixture_file_path}/sexypants.webm"
|
57
|
+
File.should exist(webm_file)
|
58
|
+
File.delete(webm_file)
|
43
59
|
end
|
44
60
|
|
45
|
-
it "
|
61
|
+
it "allows the user to specify a video path" do
|
46
62
|
output_path = "#{fixture_file_path}/converted"
|
47
|
-
Voyeur::
|
63
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).
|
48
64
|
convert(to: :ogv, output_path: output_path)
|
49
|
-
|
50
|
-
File.
|
65
|
+
test_file = "#{output_path}/test.ogv"
|
66
|
+
File.should exist(test_file)
|
67
|
+
File.delete(test_file)
|
51
68
|
end
|
52
69
|
|
53
|
-
it "
|
70
|
+
it "allows a user to specify a video path and filename" do
|
54
71
|
output_path = "#{fixture_file_path}/converted"
|
55
|
-
Voyeur::
|
72
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).
|
56
73
|
convert(to: :ogv, output_path: output_path, output_filename: "supersexypants")
|
57
|
-
|
58
|
-
File.
|
74
|
+
supersexypants_file = "#{output_path}/supersexypants.ogv"
|
75
|
+
File.should exist(supersexypants_file)
|
76
|
+
File.delete(supersexypants_file)
|
59
77
|
end
|
60
78
|
|
61
|
-
it "
|
79
|
+
it "allows user to convert given to a format given a class name" do
|
80
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).convert(to: Voyeur::Webm)
|
81
|
+
webm_file = valid_mpeg_file_path.gsub(/mpeg/, "webm")
|
82
|
+
File.should exist(webm_file)
|
83
|
+
File.delete(webm_file)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "allows a user to specify a video path and filename when converting all formats" do
|
62
87
|
output_path = "#{fixture_file_path}/converted"
|
63
|
-
Voyeur::
|
88
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).
|
64
89
|
convert_to_html5(output_path: output_path, output_filename: "supersexypants")
|
65
|
-
|
66
|
-
File.
|
67
|
-
File.
|
68
|
-
|
69
|
-
|
70
|
-
File.
|
90
|
+
ogv_file = "#{output_path}/supersexypants.ogv"
|
91
|
+
File.should exist(ogv_file)
|
92
|
+
File.delete(ogv_file)
|
93
|
+
|
94
|
+
mp4_file = "#{output_path}/supersexypants.mp4"
|
95
|
+
File.should exist(mp4_file)
|
96
|
+
File.delete(mp4_file)
|
97
|
+
|
98
|
+
webm_file = "#{output_path}/supersexypants.webm"
|
99
|
+
File.should exist(webm_file)
|
100
|
+
File.delete(webm_file)
|
71
101
|
end
|
72
102
|
|
73
|
-
it "
|
103
|
+
it "nots allow the user to specify a folder that doesn't exist" do
|
74
104
|
output_path = "#{fixture_file_path}/icecream"
|
75
|
-
-> { Voyeur::
|
105
|
+
-> { Voyeur::Media.new( filename: valid_mpeg_file_path ).
|
76
106
|
convert(to: :ogv, output_path: output_path) }.should raise_error Voyeur::Exceptions::InvalidLocation
|
77
107
|
end
|
108
|
+
|
109
|
+
context "when convert is called with a block" do
|
110
|
+
it "updates the progress with time" do
|
111
|
+
output = ''
|
112
|
+
Voyeur::Media.new( filename: valid_mpeg_file_path ).convert(to: :ogv) do |time|
|
113
|
+
output += time
|
114
|
+
end
|
115
|
+
output.should_not == ''
|
116
|
+
output.length.should > 0
|
117
|
+
end
|
118
|
+
end
|
78
119
|
end
|
metadata
CHANGED
@@ -1,119 +1,124 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: voyeur
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
version: 0.1.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Peter Garbers
|
13
9
|
- Hendrik F. Louw
|
14
10
|
autorequire:
|
15
11
|
bindir: bin
|
16
12
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-08-16 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: rspec
|
23
|
-
|
24
|
-
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
31
23
|
type: :development
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: open4
|
35
24
|
prerelease: false
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: open4
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
43
39
|
type: :runtime
|
44
|
-
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
45
47
|
description: A ruby library to convert videos into common html5 formats
|
46
|
-
email:
|
48
|
+
email:
|
47
49
|
- peter.garbers@gmail.com
|
48
50
|
- hflouw@gmail.com
|
49
|
-
executables:
|
50
|
-
|
51
|
+
executables:
|
52
|
+
- voyeur.rb
|
51
53
|
extensions: []
|
52
|
-
|
53
54
|
extra_rdoc_files: []
|
54
|
-
|
55
|
-
files:
|
55
|
+
files:
|
56
56
|
- .gitignore
|
57
57
|
- Gemfile
|
58
58
|
- README.md
|
59
59
|
- Rakefile
|
60
60
|
- Voyeur.gemspec
|
61
|
+
- bin/voyeur.rb
|
62
|
+
- lib/Voyeur/audio_converters/aac.rb
|
63
|
+
- lib/Voyeur/audio_converters/ogg.rb
|
61
64
|
- lib/Voyeur/converter.rb
|
62
65
|
- lib/Voyeur/exceptions.rb
|
66
|
+
- lib/Voyeur/media.rb
|
67
|
+
- lib/Voyeur/media_time.rb
|
63
68
|
- lib/Voyeur/version.rb
|
64
|
-
- lib/Voyeur/
|
69
|
+
- lib/Voyeur/video_converters/iphone.rb
|
65
70
|
- lib/Voyeur/video_converters/mp4.rb
|
66
71
|
- lib/Voyeur/video_converters/ogv.rb
|
67
72
|
- lib/Voyeur/video_converters/webm.rb
|
68
73
|
- lib/voyeur.rb
|
69
74
|
- spec/converter_spec.rb
|
70
|
-
- spec/converters/
|
71
|
-
- spec/converters/
|
72
|
-
- spec/converters/
|
75
|
+
- spec/converters/audio_converters/aac_spec.rb
|
76
|
+
- spec/converters/audio_converters/ogg_spec.rb
|
77
|
+
- spec/converters/video_converters/iphone_spec.rb
|
78
|
+
- spec/converters/video_converters/mp4_spec.rb
|
79
|
+
- spec/converters/video_converters/ogv_spec.rb
|
80
|
+
- spec/converters/video_converters/webm_spec.rb
|
73
81
|
- spec/fixtures/converted/PLACEHOLDER
|
74
|
-
- spec/fixtures/test.3gp
|
75
82
|
- spec/fixtures/test.mpeg
|
83
|
+
- spec/media_time_spec.rb
|
76
84
|
- spec/spec_helper.rb
|
77
85
|
- spec/spec_helpers/video_file_spec_helper.rb
|
78
86
|
- spec/video_spec.rb
|
79
|
-
has_rdoc: true
|
80
87
|
homepage: http://devthenet.github.com/voyeur
|
81
88
|
licenses: []
|
82
|
-
|
83
89
|
post_install_message:
|
84
90
|
rdoc_options: []
|
85
|
-
|
86
|
-
require_paths:
|
91
|
+
require_paths:
|
87
92
|
- lib
|
88
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
- 0
|
101
|
-
version: "0"
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
102
105
|
requirements: []
|
103
|
-
|
104
106
|
rubyforge_project: Voyeur
|
105
|
-
rubygems_version: 1.
|
107
|
+
rubygems_version: 1.8.23
|
106
108
|
signing_key:
|
107
109
|
specification_version: 3
|
108
110
|
summary: Ruby library to convert common video formats to HTML5 formats
|
109
|
-
test_files:
|
111
|
+
test_files:
|
110
112
|
- spec/converter_spec.rb
|
111
|
-
- spec/converters/
|
112
|
-
- spec/converters/
|
113
|
-
- spec/converters/
|
113
|
+
- spec/converters/audio_converters/aac_spec.rb
|
114
|
+
- spec/converters/audio_converters/ogg_spec.rb
|
115
|
+
- spec/converters/video_converters/iphone_spec.rb
|
116
|
+
- spec/converters/video_converters/mp4_spec.rb
|
117
|
+
- spec/converters/video_converters/ogv_spec.rb
|
118
|
+
- spec/converters/video_converters/webm_spec.rb
|
114
119
|
- spec/fixtures/converted/PLACEHOLDER
|
115
|
-
- spec/fixtures/test.3gp
|
116
120
|
- spec/fixtures/test.mpeg
|
121
|
+
- spec/media_time_spec.rb
|
117
122
|
- spec/spec_helper.rb
|
118
123
|
- spec/spec_helpers/video_file_spec_helper.rb
|
119
124
|
- spec/video_spec.rb
|
data/lib/Voyeur/video.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Voyeur
|
2
|
-
class Video
|
3
|
-
attr_reader :filename
|
4
|
-
def initialize(options)
|
5
|
-
@filename = options[:filename]
|
6
|
-
end
|
7
|
-
|
8
|
-
def convert(options)
|
9
|
-
converter = Voyeur::Converter.create(format: options[:to])
|
10
|
-
converter.convert(video: self,
|
11
|
-
output_filename: options[:output_filename],
|
12
|
-
output_path: options[:output_path])
|
13
|
-
end
|
14
|
-
|
15
|
-
def convert_to_html5(options = nil)
|
16
|
-
[:mp4, :ogv, :webm].each do |f|
|
17
|
-
options_hash = {to: f}
|
18
|
-
options_hash.merge!(options) if options
|
19
|
-
convert(options_hash)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/spec/converters/mp4_spec.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Voyeur::Mp4 do
|
4
|
-
before :each do
|
5
|
-
@converter = Voyeur::Converter.create(format: :mp4)
|
6
|
-
@video = Voyeur::Video.new(filename: valid_mpeg_file_path)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should use the correct factory" do
|
10
|
-
@converter.class.to_s.should == "Voyeur::Mp4"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "default convert string" do
|
14
|
-
@converter.convert_options.should == "-b 1500k -vcodec libx264 -g 30"
|
15
|
-
end
|
16
|
-
|
17
|
-
context "A valid Video" do
|
18
|
-
after :each do
|
19
|
-
File.delete(valid_mpeg_file_path.gsub(/mpeg/, "mp4")) if File.exists?(valid_mpeg_file_path.gsub(/mpeg/, "mp4"))
|
20
|
-
end
|
21
|
-
|
22
|
-
context "#convert_options" do
|
23
|
-
it "should name the video correctly" do
|
24
|
-
@converter.convert(video: @video)
|
25
|
-
output_file = valid_mpeg_file_path.gsub(/mpeg/, "mp4")
|
26
|
-
@converter.output_video.filename.should == output_file
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should return a video" do
|
30
|
-
@converter.convert(video: @video)
|
31
|
-
@converter.input_video.should == @video
|
32
|
-
end
|
33
|
-
|
34
|
-
context "real video" do
|
35
|
-
it "should return conversion status indicating success" do
|
36
|
-
result = @converter.convert(video: @video)
|
37
|
-
result[:status].should == 0
|
38
|
-
result[:video].should == @converter.output_video
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should allow them to name the video" do
|
42
|
-
result = @converter.convert(video: @video)
|
43
|
-
result[:status].should == 0
|
44
|
-
result[:video].should == @converter.output_video
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "An invalid Video" do
|
51
|
-
before :each do
|
52
|
-
@converter = Voyeur::Converter.create(format: :mp4)
|
53
|
-
@video = Voyeur::Video.new(filename: 'test_video.mpeg')
|
54
|
-
end
|
55
|
-
|
56
|
-
context "File does not exist" do
|
57
|
-
it "should return conversion status indicating failure" do
|
58
|
-
result = @converter.convert(video: @video)
|
59
|
-
result[:status].should == 1
|
60
|
-
result[:video].should == @converter.output_video
|
61
|
-
result[:error_message].should match(/test_video.mpeg: No such file or directory/)
|
62
|
-
result[:stderr].nil?.should == false
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
data/spec/converters/ogv_spec.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Voyeur::Ogv do
|
4
|
-
context "New Video" do
|
5
|
-
before :each do
|
6
|
-
@converter = Voyeur::Converter.create(format: :ogv)
|
7
|
-
@video = Voyeur::Video.new(filename: 'test_video.ogv')
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should use the correct factory" do
|
11
|
-
@converter.class.to_s.should == "Voyeur::Ogv"
|
12
|
-
end
|
13
|
-
|
14
|
-
context "#convert_options" do
|
15
|
-
it "default convert string" do
|
16
|
-
@converter.convert_options.should == "-b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30"
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should raise an exception if no video is passed" do
|
20
|
-
@video = nil
|
21
|
-
-> { @converter.convert(video: @video) }.should raise_error Voyeur::Exceptions::NoVideoPresent
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should return a video" do
|
25
|
-
@converter.convert(video: @video)
|
26
|
-
@converter.input_video.should == @video
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "An invalid Video" do
|
32
|
-
before :each do
|
33
|
-
@converter = Voyeur::Converter.create(format: :ogv)
|
34
|
-
@video = Voyeur::Video.new(filename: 'test_video.mpeg')
|
35
|
-
end
|
36
|
-
context "File does not exist" do
|
37
|
-
it "should return conversion status indicating failure" do
|
38
|
-
result = @converter.convert(video: @video)
|
39
|
-
result[:status].should == 1
|
40
|
-
result[:video].should == @converter.output_video
|
41
|
-
result[:error_message].should match(/test_video.mpeg: No such file or directory/)
|
42
|
-
result[:stderr].nil?.should == false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Voyeur::Webm do
|
4
|
-
context "New Video" do
|
5
|
-
before :each do
|
6
|
-
@converter = Voyeur::Converter.create(format: :webm)
|
7
|
-
@video = Voyeur::Video.new(filename: 'test_video.webm')
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should use the correct factory" do
|
11
|
-
@converter.class.to_s.should == "Voyeur::Webm"
|
12
|
-
end
|
13
|
-
|
14
|
-
context "#convert_options" do
|
15
|
-
it "default convert string" do
|
16
|
-
@converter.convert_options.should == "-b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30"
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should raise an exception if no video is passed" do
|
20
|
-
@video = nil
|
21
|
-
-> { @converter.convert(video: @video) }.should raise_error Voyeur::Exceptions::NoVideoPresent
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should return a video" do
|
25
|
-
@converter.convert(video: @video)
|
26
|
-
@converter.input_video.should == @video
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "An invalid Video" do
|
32
|
-
before :each do
|
33
|
-
@converter = Voyeur::Converter.create(format: :webm)
|
34
|
-
@video = Voyeur::Video.new(filename: 'test_video.mpeg')
|
35
|
-
end
|
36
|
-
|
37
|
-
context "File does not exist" do
|
38
|
-
it "should return conversion status indicating failure" do
|
39
|
-
result = @converter.convert(video: @video)
|
40
|
-
result[:status].should == 1
|
41
|
-
result[:video].should == @converter.output_video
|
42
|
-
result[:error_message].should match(/test_video.mpeg: No such file or directory/)
|
43
|
-
result[:stderr].nil?.should == false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
data/spec/fixtures/test.3gp
DELETED
Binary file
|