streamio-ffmpeg 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.7.3 2010-08-26
2
+
3
+ * Replaced Jewler with simple dynamic gemspec file
4
+ * Spec files now not in published gem to make it a lot smaller in size
5
+ * Full output from ffmpeg command in error raised during transcoding
6
+
1
7
  == 0.7.2 2010-08-11
2
8
 
3
9
  * Added encoding option duration
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 David Backeus
1
+ Copyright (c) 2010 Streamio Networks AB
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -96,4 +96,4 @@ Use ffpreset files to avoid headaches when encoding with libx264 (http://www.ffm
96
96
 
97
97
  == Copyright
98
98
 
99
- Copyright (c) 2010 David Backeus. See LICENSE for details.
99
+ Copyright (c) 2010 Streamio Networks AB. See LICENSE for details.
@@ -37,7 +37,6 @@ module FFMPEG
37
37
  FFMPEG.logger.error "Failed encoding...\nCommand\n#{command}\nOutput\n#{output}\n"
38
38
  raise "Failed encoding: #{line}"
39
39
  end
40
- last_output = line
41
40
  end
42
41
  end
43
42
 
@@ -45,9 +44,9 @@ module FFMPEG
45
44
  FFMPEG.logger.info "Transcoding of #{@movie.path} to #{@output_file} succeeded\n"
46
45
  yield(1.0) if block_given?
47
46
  else
48
- errors = @errors.empty? ? "" : "Errors: #{@errors.join(", ")}"
47
+ errors = @errors.empty? ? "" : " Errors: #{@errors.join(", ")}. "
49
48
  FFMPEG.logger.error "Failed encoding...\n#{command}\n\n#{output}\n#{errors}\n"
50
- raise "Failed encoding. Last output: #{last_output}. #{errors}"
49
+ raise "Failed encoding.#{errors}Full output: #{output}"
51
50
  end
52
51
 
53
52
  encoded
@@ -0,0 +1,3 @@
1
+ module FFMPEG
2
+ VERSION = "0.7.3"
3
+ end
@@ -2,13 +2,12 @@ $LOAD_PATH.unshift File.dirname(__FILE__)
2
2
 
3
3
  require 'logger'
4
4
 
5
+ require 'ffmpeg/version'
5
6
  require 'ffmpeg/movie'
6
7
  require 'ffmpeg/transcoder'
7
8
  require 'ffmpeg/encoding_options'
8
9
 
9
10
  module FFMPEG
10
- VERSION = '0.5.0'
11
-
12
11
  # FFMPEG logs information about its progress when it's transcoding.
13
12
  # Jack in your own logger through this method if you wish to.
14
13
  #
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: streamio-ffmpeg
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 2
10
- version: 0.7.2
9
+ - 3
10
+ version: 0.7.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Backeus
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-11 00:00:00 +02:00
18
+ date: 2010-08-26 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -34,46 +34,31 @@ dependencies:
34
34
  version: 1.3.0
35
35
  type: :development
36
36
  version_requirements: *id001
37
- description: Simple wrapper around ffmpeg to get metadata from movies and do transcoding
38
- email: duztdruid@gmail.com
37
+ description: Simple yet powerful wrapper around ffmpeg to get metadata from movies and do transcoding.
38
+ email:
39
+ - david@streamio.se
39
40
  executables: []
40
41
 
41
42
  extensions: []
42
43
 
43
- extra_rdoc_files:
44
- - LICENSE
45
- - README.rdoc
44
+ extra_rdoc_files: []
45
+
46
46
  files:
47
- - .document
48
- - .gitignore
49
- - CHANGELOG
50
- - LICENSE
51
- - README.rdoc
52
- - Rakefile
53
- - VERSION
54
47
  - lib/ffmpeg/encoding_options.rb
55
48
  - lib/ffmpeg/movie.rb
56
49
  - lib/ffmpeg/transcoder.rb
50
+ - lib/ffmpeg/version.rb
57
51
  - lib/streamio-ffmpeg.rb
58
- - spec/ffmpeg/encoding_options_spec.rb
59
- - spec/ffmpeg/movie_spec.rb
60
- - spec/ffmpeg/transcoder_spec.rb
61
- - spec/fixtures/movies/awesome movie.mov
62
- - spec/fixtures/movies/awesome_widescreen.mov
63
- - spec/fixtures/movies/broken.mp4
64
- - spec/fixtures/movies/weird_aspect.small.mpg
65
- - spec/fixtures/sounds/napoleon.mp3
66
- - spec/spec.opts
67
- - spec/spec_helper.rb
68
- - spec/streamio-ffmpeg_spec.rb
69
- - streamio-ffmpeg.gemspec
52
+ - README.rdoc
53
+ - LICENSE
54
+ - CHANGELOG
70
55
  has_rdoc: true
71
56
  homepage: http://github.com/streamio/streamio-ffmpeg
72
57
  licenses: []
73
58
 
74
59
  post_install_message:
75
- rdoc_options:
76
- - --charset=UTF-8
60
+ rdoc_options: []
61
+
77
62
  require_paths:
78
63
  - lib
79
64
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -90,20 +75,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
75
  requirements:
91
76
  - - ">="
92
77
  - !ruby/object:Gem::Version
93
- hash: 3
78
+ hash: 23
94
79
  segments:
95
- - 0
96
- version: "0"
80
+ - 1
81
+ - 3
82
+ - 6
83
+ version: 1.3.6
97
84
  requirements: []
98
85
 
99
86
  rubyforge_project:
100
87
  rubygems_version: 1.3.7
101
88
  signing_key:
102
89
  specification_version: 3
103
- summary: Simple wrapper around ffmpeg to get metadata from movies and do transcoding
104
- test_files:
105
- - spec/ffmpeg/encoding_options_spec.rb
106
- - spec/ffmpeg/movie_spec.rb
107
- - spec/ffmpeg/transcoder_spec.rb
108
- - spec/spec_helper.rb
109
- - spec/streamio-ffmpeg_spec.rb
90
+ summary: Reads metadata and transcodes movies.
91
+ test_files: []
92
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,23 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
22
- script/*
23
- tmp/*
data/Rakefile DELETED
@@ -1,44 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "streamio-ffmpeg"
8
- gem.summary = %Q{Simple wrapper around ffmpeg to get metadata from movies and do transcoding}
9
- gem.description = %Q{Simple wrapper around ffmpeg to get metadata from movies and do transcoding}
10
- gem.email = "duztdruid@gmail.com"
11
- gem.homepage = "http://github.com/streamio/streamio-ffmpeg"
12
- gem.authors = ["David Backeus"]
13
- gem.add_development_dependency "rspec", "1.3.0"
14
- end
15
- Jeweler::GemcutterTasks.new
16
- rescue LoadError
17
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
18
- end
19
-
20
- require 'spec/rake/spectask'
21
- Spec::Rake::SpecTask.new(:spec) do |spec|
22
- spec.libs << 'lib' << 'spec'
23
- spec.spec_files = FileList['spec/**/*_spec.rb']
24
- end
25
-
26
- Spec::Rake::SpecTask.new(:rcov) do |spec|
27
- spec.libs << 'lib' << 'spec'
28
- spec.pattern = 'spec/**/*_spec.rb'
29
- spec.rcov = true
30
- end
31
-
32
- task :spec => :check_dependencies
33
-
34
- task :default => :spec
35
-
36
- require 'rake/rdoctask'
37
- Rake::RDocTask.new do |rdoc|
38
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
39
-
40
- rdoc.rdoc_dir = 'rdoc'
41
- rdoc.title = "streamio-ffmpeg #{version}"
42
- rdoc.rdoc_files.include('README*')
43
- rdoc.rdoc_files.include('lib/**/*.rb')
44
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.7.2
@@ -1,128 +0,0 @@
1
- require 'spec_helper.rb'
2
-
3
- module FFMPEG
4
- describe EncodingOptions do
5
- describe "ffmpeg arguments conversion" do
6
- it "should convert video codec" do
7
- EncodingOptions.new(:video_codec => "libx264").to_s.should == "-vcodec libx264"
8
- end
9
-
10
- it "should convert cropping options" do
11
- EncodingOptions.new(:croptop => 20).to_s.should == "-croptop 20"
12
- EncodingOptions.new(:cropbottom => 20).to_s.should == "-cropbottom 20"
13
- EncodingOptions.new(:cropleft => 20).to_s.should == "-cropleft 20"
14
- EncodingOptions.new(:cropright => 20).to_s.should == "-cropright 20"
15
- end
16
-
17
- it "should know the width from the resolution or be nil" do
18
- EncodingOptions.new(:resolution => "320x240").width.should == 320
19
- EncodingOptions.new.width.should be_nil
20
- end
21
-
22
- it "should know the height from the resolution or be nil" do
23
- EncodingOptions.new(:resolution => "320x240").height.should == 240
24
- EncodingOptions.new.height.should be_nil
25
- end
26
-
27
- it "should convert frame rate" do
28
- EncodingOptions.new(:frame_rate => 29.9).to_s.should == "-r 29.9"
29
- end
30
-
31
- it "should convert the resolution" do
32
- EncodingOptions.new(:resolution => "640x480").to_s.should include("-s 640x480")
33
- end
34
-
35
- it "should add calculated aspect ratio" do
36
- EncodingOptions.new(:resolution => "640x480").to_s.should include("-aspect 1.3333333")
37
- EncodingOptions.new(:resolution => "640x360").to_s.should include("-aspect 1.7777777777777")
38
- end
39
-
40
- it "should use specified aspect ratio if given" do
41
- EncodingOptions.new(:resolution => "640x480",
42
- :aspect => 1.77777777777778).to_s.should == "-s 640x480 -aspect 1.77777777777778"
43
- end
44
-
45
- it "should convert video bitrate" do
46
- EncodingOptions.new(:video_bitrate => "600k").to_s.should == "-b 600k"
47
- end
48
-
49
- it "should use k unit for video bitrate" do
50
- EncodingOptions.new(:video_bitrate => 600).to_s.should == "-b 600k"
51
- end
52
-
53
- it "should convert audio codec" do
54
- EncodingOptions.new(:audio_codec => "aac").to_s.should == "-acodec aac"
55
- end
56
-
57
- it "should convert audio bitrate" do
58
- EncodingOptions.new(:audio_bitrate => "128k").to_s.should == "-ab 128k"
59
- end
60
-
61
- it "should use k unit for audio bitrate" do
62
- EncodingOptions.new(:audio_bitrate => 128).to_s.should == "-ab 128k"
63
- end
64
-
65
- it "should convert audio sample rate" do
66
- EncodingOptions.new(:audio_sample_rate => 44100).to_s.should == "-ar 44100"
67
- end
68
-
69
- it "should convert audio channels" do
70
- EncodingOptions.new(:audio_channels => 2).to_s.should == "-ac 2"
71
- end
72
-
73
- it "should convert maximum video bitrate" do
74
- EncodingOptions.new(:video_max_bitrate => 600).to_s.should == "-maxrate 600k"
75
- end
76
-
77
- it "should convert mininimum video bitrate" do
78
- EncodingOptions.new(:video_min_bitrate => 600).to_s.should == "-minrate 600k"
79
- end
80
-
81
- it "should convert video bitrate tolerance" do
82
- EncodingOptions.new(:video_bitrate_tolerance => 100).to_s.should == "-bt 100k"
83
- end
84
-
85
- it "should convert buffer size" do
86
- EncodingOptions.new(:buffer_size => 2000).to_s.should == "-bufsize 2000k"
87
- end
88
-
89
- it "should convert threads" do
90
- EncodingOptions.new(:threads => 2).to_s.should == "-threads 2"
91
- end
92
-
93
- it "should convert duration" do
94
- EncodingOptions.new(:duration => 30).to_s.should == "-t 30"
95
- end
96
-
97
- it "should convert video preset" do
98
- EncodingOptions.new(:video_preset => "max").to_s.should == "-vpre max"
99
- end
100
-
101
- it "should convert audio preset" do
102
- EncodingOptions.new(:audio_preset => "max").to_s.should == "-apre max"
103
- end
104
-
105
- it "should convert file preset" do
106
- EncodingOptions.new(:file_preset => "max.ffpreset").to_s.should == "-fpre max.ffpreset"
107
- end
108
-
109
- it "should put the preset parameters last" do
110
- opts = Hash.new
111
- opts[:video_codec] = "libx264"
112
- opts[:video_preset] = "normal"
113
-
114
- converted = EncodingOptions.new(opts).to_s
115
- converted.should == "-vcodec libx264 -vpre normal"
116
- end
117
-
118
- it "should convert a lot of them simultaneously" do
119
- converted = EncodingOptions.new(:video_codec => "libx264", :audio_codec => "aac", :video_bitrate => "1000k").to_s
120
- converted.should match(/-acodec aac/)
121
- end
122
-
123
- it "should ignore options with nil value" do
124
- EncodingOptions.new(:video_codec => "libx264", :frame_rate => nil).to_s.should == "-vcodec libx264 "
125
- end
126
- end
127
- end
128
- end
@@ -1,150 +0,0 @@
1
- require 'spec_helper.rb'
2
-
3
- module FFMPEG
4
-
5
- describe Movie do
6
- describe "given a non existing file" do
7
- it "should throw ArgumentError" do
8
- lambda { Movie.new("i_dont_exist") }.should raise_error(Errno::ENOENT, /does not exist/)
9
- end
10
- end
11
-
12
- describe "parsing" do
13
- describe "given a non movie file" do
14
- before(:all) do
15
- @movie = Movie.new(__FILE__)
16
- end
17
-
18
- it "should not be valid" do
19
- @movie.should_not be_valid
20
- end
21
- end
22
-
23
- describe "given a mp3 file" do
24
- before(:all) do
25
- @movie = Movie.new("#{fixture_path}/sounds/napoleon.mp3")
26
- end
27
-
28
- it "should have uncertain duration" do
29
- @movie.should be_uncertain_duration
30
- end
31
- end
32
-
33
- describe "a broken mp4 file" do
34
- before(:all) do
35
- @movie = Movie.new("#{fixture_path}/movies/broken.mp4")
36
- end
37
-
38
- it "should not be valid" do
39
- @movie.should_not be_valid
40
- end
41
-
42
- it "should have nil calculated_aspect_ratio" do
43
- @movie.calculated_aspect_ratio.should be_nil
44
- end
45
- end
46
-
47
- describe "given a weird aspect ratio file" do
48
- before(:all) do
49
- @movie = Movie.new("#{fixture_path}/movies/weird_aspect.small.mpg")
50
- end
51
-
52
- it "should parse the DAR" do
53
- @movie.dar.should == "704:405"
54
- end
55
-
56
- it "should have correct calculated_aspect_ratio" do
57
- @movie.calculated_aspect_ratio.to_s[0..15].should == "1.73827160493827" # substringed to be 1.9 compatible
58
- end
59
- end
60
-
61
- describe "given an awesome movie file" do
62
- before(:all) do
63
- @movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
64
- end
65
-
66
- it "should not have uncertain duration" do
67
- @movie.should_not be_uncertain_duration
68
- end
69
-
70
- it "should remember the movie path" do
71
- @movie.path.should == "#{fixture_path}/movies/awesome movie.mov"
72
- end
73
-
74
- it "should parse duration to number of seconds" do
75
- @movie.duration.should == 7.5
76
- end
77
-
78
- it "should parse the bitrate" do
79
- @movie.bitrate.should == 481
80
- end
81
-
82
- it "should parse video stream information" do
83
- @movie.video_stream.should == "h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 371 kb/s, 16.75 fps, 15 tbr, 600 tbn, 1200 tbc"
84
- end
85
-
86
- it "should know the video codec" do
87
- @movie.video_codec.should == "h264"
88
- end
89
-
90
- it "should know the colorspace" do
91
- @movie.colorspace.should == "yuv420p"
92
- end
93
-
94
- it "should know the resolution" do
95
- @movie.resolution.should == "640x480"
96
- end
97
-
98
- it "should know the width and height" do
99
- @movie.width.should == 640
100
- @movie.height.should == 480
101
- end
102
-
103
- it "should know the framerate" do
104
- @movie.frame_rate.should == 16.75
105
- end
106
-
107
- it "should parse audio stream information" do
108
- @movie.audio_stream.should == "aac, 44100 Hz, stereo, s16, 75 kb/s"
109
- end
110
-
111
- it "should know the audio codec" do
112
- @movie.audio_codec.should == "aac"
113
- end
114
-
115
- it "should know the sample rate" do
116
- @movie.audio_sample_rate.should == 44100
117
- end
118
-
119
- it "should know the number of audio channels" do
120
- @movie.audio_channels.should == 2
121
- end
122
-
123
- it "should should be valid" do
124
- @movie.should be_valid
125
- end
126
-
127
- it "should calculate the aspect ratio" do
128
- @movie.calculated_aspect_ratio.to_s[0..15].should == "1.33333333333333" # substringed to be 1.9 compatible
129
- end
130
-
131
- it "should know the file size" do
132
- @movie.size.should == 455546
133
- end
134
- end
135
- end
136
-
137
- describe "transcode" do
138
- it "should run the transcoder" do
139
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
140
-
141
- mockery = mock(Transcoder)
142
- Transcoder.should_receive(:new).with(movie, "#{tmp_path}/awesome.flv", {:custom => "-vcodec libx264"}, :preserve_aspect_ratio => :width).and_return(mockery)
143
- mockery.should_receive(:run)
144
-
145
- movie.transcode("#{tmp_path}/awesome.flv", {:custom => "-vcodec libx264"}, :preserve_aspect_ratio => :width)
146
- end
147
- end
148
- end
149
-
150
- end
@@ -1,161 +0,0 @@
1
- require 'spec_helper.rb'
2
-
3
- module FFMPEG
4
- describe Transcoder do
5
- describe "initialization" do
6
- before(:each) do
7
- @movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
8
- @output_path = "#{tmp_path}/awesome.flv"
9
- end
10
-
11
- it "should accept EncodingOptions as options" do
12
- lambda { Transcoder.new(@movie, @output_path, EncodingOptions.new) }.should_not raise_error(ArgumentError)
13
- end
14
-
15
- it "should accept Hash as options" do
16
- lambda { Transcoder.new(@movie, @output_path, :video_codec => "libx264") }.should_not raise_error(ArgumentError)
17
- end
18
-
19
- it "should accept String as options" do
20
- lambda { Transcoder.new(@movie, @output_path, "-vcodec libx264") }.should_not raise_error(ArgumentError)
21
- end
22
-
23
- it "should not accept anything else as options" do
24
- lambda { Transcoder.new(@movie, @output_path, ["array?"]) }.should raise_error(ArgumentError, /Unknown options format/)
25
- end
26
- end
27
-
28
- describe "transcoding" do
29
- before(:each) do
30
- FFMPEG.logger.should_receive(:info).at_least(:once)
31
- end
32
-
33
- it "should transcode the movie with progress given an awesome movie" do
34
- FileUtils.rm_f "#{tmp_path}/awesome.flv"
35
-
36
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
37
-
38
- transcoder = Transcoder.new(movie, "#{tmp_path}/awesome.flv")
39
- stored_progress = 0
40
- transcoder.run { |progress| stored_progress = progress }
41
- transcoder.encoded.should be_valid
42
- stored_progress.should == 1.0
43
- File.exists?("#{tmp_path}/awesome.flv").should be_true
44
- end
45
-
46
- it "should transcode the movie with EncodingOptions" do
47
- FileUtils.rm_f "#{tmp_path}/optionalized.mp4"
48
-
49
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
50
- options = {:video_codec => "libx264", :frame_rate => 10, :resolution => "320x240", :video_bitrate => 300,
51
- :audio_codec => "libfaac", :audio_bitrate => 32, :audio_sample_rate => 22050, :audio_channels => 1,
52
- :custom => "-flags +loop -cmp +chroma -partitions +parti4x4+partp8x8 -flags2 +mixed_refs -me_method umh -subq 6 -refs 6 -rc_eq 'blurCplx^(1-qComp)' -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 21"}
53
-
54
- encoded = Transcoder.new(movie, "#{tmp_path}/optionalized.mp4", options).run
55
- encoded.video_codec.should == "h264"
56
- encoded.resolution.should == "320x240"
57
- encoded.frame_rate.should == 10.0
58
- encoded.audio_codec.should == "aac"
59
- encoded.audio_sample_rate.should == 22050
60
- encoded.audio_channels.should == 1
61
- end
62
-
63
- describe "aspect ratio preservation" do
64
- before(:each) do
65
- @movie = Movie.new("#{fixture_path}/movies/awesome_widescreen.mov")
66
- @options = {:resolution => "320x240"}
67
- end
68
-
69
- it "should work on width" do
70
- special_options = {:preserve_aspect_ratio => :width}
71
-
72
- encoded = Transcoder.new(@movie, "#{tmp_path}/preserved_aspect.mp4", @options, special_options).run
73
- encoded.resolution.should == "320x180"
74
- end
75
-
76
- it "should work on height" do
77
- special_options = {:preserve_aspect_ratio => :height}
78
-
79
- encoded = Transcoder.new(@movie, "#{tmp_path}/preserved_aspect.mp4", @options, special_options).run
80
- encoded.resolution.should == "426x240"
81
- end
82
-
83
- it "should not be used if original resolution is undeterminable" do
84
- @movie.should_receive(:calculated_aspect_ratio).and_return(nil)
85
- special_options = {:preserve_aspect_ratio => :height}
86
-
87
- encoded = Transcoder.new(@movie, "#{tmp_path}/preserved_aspect.mp4", @options, special_options).run
88
- encoded.resolution.should == "320x240"
89
- end
90
-
91
- it "should round to resolutions divisible by 2" do
92
- @movie.should_receive(:calculated_aspect_ratio).at_least(:once).and_return(1.234)
93
- special_options = {:preserve_aspect_ratio => :width}
94
-
95
- encoded = Transcoder.new(@movie, "#{tmp_path}/preserved_aspect.mp4", @options, special_options).run
96
- encoded.resolution.should == "320x260" # 320 / 1.234 should at first be rounded to 259
97
- end
98
- end
99
-
100
- it "should transcode the movie with String options" do
101
- FileUtils.rm_f "#{tmp_path}/string_optionalized.flv"
102
-
103
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
104
-
105
- encoded = Transcoder.new(movie, "#{tmp_path}/string_optionalized.flv", "-s 300x200 -ac 2").run
106
- encoded.resolution.should == "300x200"
107
- encoded.audio_channels.should == 2
108
- end
109
-
110
- it "should fail when given an invalid movie" do
111
- FFMPEG.logger.should_receive(:error)
112
- movie = Movie.new(__FILE__)
113
- transcoder = Transcoder.new(movie, "#{tmp_path}/fail.flv")
114
- lambda { transcoder.run }.should raise_error(RuntimeError, /no output file created/)
115
- end
116
-
117
- it "should fail if duration differs from original" do
118
- movie = Movie.new("#{fixture_path}/sounds/napoleon.mp3")
119
- movie.stub!(:duration).and_return(200)
120
- movie.stub!(:uncertain_duration?).and_return(false)
121
- transcoder = Transcoder.new(movie, "#{tmp_path}/duration_fail.flv")
122
- lambda { transcoder.run }.should raise_error(RuntimeError, /encoded file duration differed from original/)
123
- end
124
-
125
- it "should skip duration check if originals duration is uncertain" do
126
- movie = Movie.new("#{fixture_path}/sounds/napoleon.mp3")
127
- movie.stub!(:duration).and_return(200)
128
- movie.stub!(:uncertain_duration?).and_return(true)
129
- transcoder = Transcoder.new(movie, "#{tmp_path}/duration_fail.flv")
130
- lambda { transcoder.run }.should_not raise_error(RuntimeError)
131
- end
132
-
133
- it "should be able to transcode to images" do
134
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
135
-
136
- encoded = Transcoder.new(movie, "#{tmp_path}/image.png", :custom => "-ss 00:00:03 -vframes 1 -f image2").run
137
- encoded.resolution.should == "640x480"
138
-
139
- encoded = Transcoder.new(movie, "#{tmp_path}/image.jpg", :custom => "-ss 00:00:03 -vframes 1 -f image2").run
140
- encoded.resolution.should == "640x480"
141
- end
142
-
143
- it "should validate duration to the specified duration if given" do
144
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
145
-
146
- encoded = Transcoder.new(movie, "#{tmp_path}/durationalized.mp4", :duration => 2).run
147
-
148
- encoded.duration.should >= 1.8
149
- encoded.duration.should <= 2.2
150
- end
151
-
152
- it "should validate duration to original movies duration if duration specified to higher number than original" do
153
- movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
154
-
155
- expect {
156
- Transcoder.new(movie, "#{tmp_path}/durationalized.mp4", :duration => 10).run
157
- }.to_not raise_error
158
- end
159
- end
160
- end
161
- end
Binary file
Binary file
Binary file
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --color
data/spec/spec_helper.rb DELETED
@@ -1,21 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'streamio-ffmpeg'
4
- require 'spec'
5
- require 'spec/autorun'
6
- require 'fileutils'
7
-
8
- FFMPEG.logger = Logger.new(nil)
9
-
10
- Spec::Runner.configure do |config|
11
- end
12
-
13
- def fixture_path
14
- @fixture_path ||= File.join(File.dirname(__FILE__), 'fixtures')
15
- end
16
-
17
- def tmp_path
18
- @tmp_path ||= File.join(File.dirname(__FILE__), "..", "tmp")
19
- end
20
-
21
- FileUtils.mkdir_p tmp_path
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FFMPEG do
4
- describe "logger" do
5
- after(:each) do
6
- FFMPEG.logger = Logger.new(nil)
7
- end
8
-
9
- it "should be a Logger" do
10
- FFMPEG.logger.should be_instance_of(Logger)
11
- end
12
-
13
- it "should be at info level" do
14
- FFMPEG.logger = nil # Reset the logger so that we get the default
15
- FFMPEG.logger.level.should == Logger::INFO
16
- end
17
-
18
- it "should be assignable" do
19
- new_logger = Logger.new(STDOUT)
20
- FFMPEG.logger = new_logger
21
- FFMPEG.logger.should == new_logger
22
- end
23
- end
24
- end
@@ -1,70 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{streamio-ffmpeg}
8
- s.version = "0.7.2"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["David Backeus"]
12
- s.date = %q{2010-08-11}
13
- s.description = %q{Simple wrapper around ffmpeg to get metadata from movies and do transcoding}
14
- s.email = %q{duztdruid@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "CHANGELOG",
23
- "LICENSE",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "lib/ffmpeg/encoding_options.rb",
28
- "lib/ffmpeg/movie.rb",
29
- "lib/ffmpeg/transcoder.rb",
30
- "lib/streamio-ffmpeg.rb",
31
- "spec/ffmpeg/encoding_options_spec.rb",
32
- "spec/ffmpeg/movie_spec.rb",
33
- "spec/ffmpeg/transcoder_spec.rb",
34
- "spec/fixtures/movies/awesome movie.mov",
35
- "spec/fixtures/movies/awesome_widescreen.mov",
36
- "spec/fixtures/movies/broken.mp4",
37
- "spec/fixtures/movies/weird_aspect.small.mpg",
38
- "spec/fixtures/sounds/napoleon.mp3",
39
- "spec/spec.opts",
40
- "spec/spec_helper.rb",
41
- "spec/streamio-ffmpeg_spec.rb",
42
- "streamio-ffmpeg.gemspec"
43
- ]
44
- s.homepage = %q{http://github.com/streamio/streamio-ffmpeg}
45
- s.rdoc_options = ["--charset=UTF-8"]
46
- s.require_paths = ["lib"]
47
- s.rubygems_version = %q{1.3.7}
48
- s.summary = %q{Simple wrapper around ffmpeg to get metadata from movies and do transcoding}
49
- s.test_files = [
50
- "spec/ffmpeg/encoding_options_spec.rb",
51
- "spec/ffmpeg/movie_spec.rb",
52
- "spec/ffmpeg/transcoder_spec.rb",
53
- "spec/spec_helper.rb",
54
- "spec/streamio-ffmpeg_spec.rb"
55
- ]
56
-
57
- if s.respond_to? :specification_version then
58
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
59
- s.specification_version = 3
60
-
61
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
62
- s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
63
- else
64
- s.add_dependency(%q<rspec>, ["= 1.3.0"])
65
- end
66
- else
67
- s.add_dependency(%q<rspec>, ["= 1.3.0"])
68
- end
69
- end
70
-