streamio-ffmpeg 0.5.0 → 0.6.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/CHANGELOG +6 -0
 - data/README.rdoc +18 -1
 - data/VERSION +1 -1
 - data/lib/ffmpeg/encoding_options.rb +40 -1
 - data/lib/ffmpeg/movie.rb +6 -2
 - data/lib/ffmpeg/transcoder.rb +16 -1
 - data/spec/ffmpeg/encoding_options_spec.rb +28 -1
 - data/spec/ffmpeg/movie_spec.rb +6 -2
 - data/spec/ffmpeg/transcoder_spec.rb +22 -1
 - data/spec/fixtures/movies/awesome_widescreen.mov +0 -0
 - data/streamio-ffmpeg.gemspec +3 -2
 - metadata +4 -3
 
    
        data/CHANGELOG
    CHANGED
    
    | 
         @@ -1,3 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            == 0.6.0 2010-05-04
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Cropping options now handled by EncodingOptions (croptop, cropbottom, cropleft and cropright)
         
     | 
| 
      
 4 
     | 
    
         
            +
            * Aspect ratio parameter calculated and added by default
         
     | 
| 
      
 5 
     | 
    
         
            +
            * Added transcoder options to preserve original aspect ratio on width or height
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       1 
7 
     | 
    
         
             
            == 0.5.0 2010-04-28
         
     | 
| 
       2 
8 
     | 
    
         | 
| 
       3 
9 
     | 
    
         
             
            * Added logging capabilities 
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -48,7 +48,8 @@ Give custom command line options with a string. 
     | 
|
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
            Use the EncodingOptions parser for humanly readable transcoding options. Below you'll find all the supported options. Note that the :custom key will be used as is without modification so use it for any tricky business you might need.
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
              options = {:video_codec => "libx264", :frame_rate => 10, :resolution => "320x240", :video_bitrate => 300, 
     | 
| 
      
 51 
     | 
    
         
            +
              options = {:video_codec => "libx264", :frame_rate => 10, :resolution => "320x240", :video_bitrate => 300,
         
     | 
| 
      
 52 
     | 
    
         
            +
                         :croptop => 60, :cropbottom => 60, :cropleft => 10, :cropright => 10, :aspect => 1.333333,
         
     | 
| 
       52 
53 
     | 
    
         
             
                         :audio_codec => "libfaac", :audio_bitrate => 32, :audio_sample_rate => 22050, :audio_channels => 1,
         
     | 
| 
       53 
54 
     | 
    
         
             
                         :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"}
         
     | 
| 
       54 
55 
     | 
    
         
             
              movie.transcode("movie.mp4", options)
         
     | 
| 
         @@ -59,6 +60,22 @@ The transcode function returns a Movie object for the encoded file. 
     | 
|
| 
       59 
60 
     | 
    
         | 
| 
       60 
61 
     | 
    
         
             
              transcoded_movie.video_codec # "flv"
         
     | 
| 
       61 
62 
     | 
    
         
             
              transcoded_movie.audio_codec # "mp3"
         
     | 
| 
      
 63 
     | 
    
         
            +
              
         
     | 
| 
      
 64 
     | 
    
         
            +
            Aspect ratio is added to encoding options automatically if none is specified.
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              options = {:resolution => 320x180} # Will add -aspect 1.77777777777778 to ffmpeg
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            Preserve aspect ratio on width or height by using the preserve_aspect_ratio transcoder option.
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
              widescreen_movie = FFMPEG::Movie.new("path/to/widescreen_movie.mov")
         
     | 
| 
      
 71 
     | 
    
         
            +
              
         
     | 
| 
      
 72 
     | 
    
         
            +
              options = {:resolution => 320x240}
         
     | 
| 
      
 73 
     | 
    
         
            +
              
         
     | 
| 
      
 74 
     | 
    
         
            +
              transcoder_options = {:preserve_aspect_ratio => :width}
         
     | 
| 
      
 75 
     | 
    
         
            +
              widescreen_movie.transcode("movie.mp4", options, transcoder_options) # Output resolution will be 320x180
         
     | 
| 
      
 76 
     | 
    
         
            +
              
         
     | 
| 
      
 77 
     | 
    
         
            +
              transcoder_options = {:preserve_aspect_ratio => :height}
         
     | 
| 
      
 78 
     | 
    
         
            +
              widescreen_movie.transcode("movie.mp4", options, transcoder_options) # Output resolution will be 426x240
         
     | 
| 
       62 
79 
     | 
    
         | 
| 
       63 
80 
     | 
    
         
             
            == Copyright
         
     | 
| 
       64 
81 
     | 
    
         | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.6.0
         
     | 
| 
         @@ -7,9 +7,19 @@ module FFMPEG 
     | 
|
| 
       7 
7 
     | 
    
         
             
                end
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                def to_s
         
     | 
| 
       10 
     | 
    
         
            -
                  collect do |key, value|
         
     | 
| 
      
 10 
     | 
    
         
            +
                  parameters = collect do |key, value|
         
     | 
| 
       11 
11 
     | 
    
         
             
                    send("convert_#{key}", value) if supports_option?(key)
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end.join(" ")
         
     | 
| 
      
 13 
     | 
    
         
            +
                  parameters << " #{convert_aspect(calculate_aspect)}" if calculate_aspect?
         
     | 
| 
      
 14 
     | 
    
         
            +
                  parameters
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
                
         
     | 
| 
      
 17 
     | 
    
         
            +
                def width
         
     | 
| 
      
 18 
     | 
    
         
            +
                  self[:resolution].split("x").first.to_i rescue nil
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
                
         
     | 
| 
      
 21 
     | 
    
         
            +
                def height
         
     | 
| 
      
 22 
     | 
    
         
            +
                  self[:resolution].split("x").last.to_i rescue nil
         
     | 
| 
       13 
23 
     | 
    
         
             
                end
         
     | 
| 
       14 
24 
     | 
    
         | 
| 
       15 
25 
     | 
    
         
             
                private
         
     | 
| 
         @@ -17,6 +27,35 @@ module FFMPEG 
     | 
|
| 
       17 
27 
     | 
    
         
             
                  private_methods.include?("convert_#{option}")
         
     | 
| 
       18 
28 
     | 
    
         
             
                end
         
     | 
| 
       19 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                def convert_aspect(value)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  "-aspect #{value}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
                
         
     | 
| 
      
 34 
     | 
    
         
            +
                def calculate_aspect
         
     | 
| 
      
 35 
     | 
    
         
            +
                  width, height = self[:resolution].split("x")
         
     | 
| 
      
 36 
     | 
    
         
            +
                  width.to_f / height.to_f
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
                
         
     | 
| 
      
 39 
     | 
    
         
            +
                def calculate_aspect?
         
     | 
| 
      
 40 
     | 
    
         
            +
                  self[:aspect].nil? && self[:resolution]
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
                
         
     | 
| 
      
 43 
     | 
    
         
            +
                def convert_croptop(value)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  "-croptop #{value}"
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
                
         
     | 
| 
      
 47 
     | 
    
         
            +
                def convert_cropbottom(value)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  "-cropbottom #{value}"
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
                
         
     | 
| 
      
 51 
     | 
    
         
            +
                def convert_cropleft(value)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  "-cropleft #{value}"
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
                
         
     | 
| 
      
 55 
     | 
    
         
            +
                def convert_cropright(value)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  "-cropright #{value}"
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
                
         
     | 
| 
       20 
59 
     | 
    
         
             
                def convert_video_codec(value)
         
     | 
| 
       21 
60 
     | 
    
         
             
                  "-vcodec #{value}"
         
     | 
| 
       22 
61 
     | 
    
         
             
                end
         
     | 
    
        data/lib/ffmpeg/movie.rb
    CHANGED
    
    | 
         @@ -49,6 +49,10 @@ module FFMPEG 
     | 
|
| 
       49 
49 
     | 
    
         
             
                  resolution.split("x")[1].to_i rescue nil
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
                def calculated_aspect_ratio
         
     | 
| 
      
 53 
     | 
    
         
            +
                  width.to_f / height.to_f
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
                
         
     | 
| 
       52 
56 
     | 
    
         
             
                def audio_channels
         
     | 
| 
       53 
57 
     | 
    
         
             
                  return @audio_channels[/\d*/].to_i if @audio_channels["channels"]
         
     | 
| 
       54 
58 
     | 
    
         
             
                  return 1 if @audio_channels["mono"]
         
     | 
| 
         @@ -59,8 +63,8 @@ module FFMPEG 
     | 
|
| 
       59 
63 
     | 
    
         
             
                  video_stream[/(\d*\.?\d*)\s?fps/] ? $1.to_f : nil
         
     | 
| 
       60 
64 
     | 
    
         
             
                end
         
     | 
| 
       61 
65 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
                def transcode(output_file, options, &block)
         
     | 
| 
       63 
     | 
    
         
            -
                  Transcoder.new(self, output_file, options).run &block
         
     | 
| 
      
 66 
     | 
    
         
            +
                def transcode(output_file, options = EncodingOptions.new, transcoder_options = {}, &block)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  Transcoder.new(self, output_file, options, transcoder_options).run &block
         
     | 
| 
       64 
68 
     | 
    
         
             
                end
         
     | 
| 
       65 
69 
     | 
    
         | 
| 
       66 
70 
     | 
    
         
             
                protected
         
     | 
    
        data/lib/ffmpeg/transcoder.rb
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ require 'open3' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module FFMPEG
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Transcoder
         
     | 
| 
       5 
     | 
    
         
            -
                def initialize(movie, output_file, options = EncodingOptions.new)
         
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(movie, output_file, options = EncodingOptions.new, transcoder_options = {})
         
     | 
| 
       6 
6 
     | 
    
         
             
                  @movie = movie
         
     | 
| 
       7 
7 
     | 
    
         
             
                  @output_file = output_file
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
         @@ -14,7 +14,10 @@ module FFMPEG 
     | 
|
| 
       14 
14 
     | 
    
         
             
                    raise ArgumentError, "Unknown options format '#{options.class}', should be either EncodingOptions, Hash or String."
         
     | 
| 
       15 
15 
     | 
    
         
             
                  end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
                  @transcoder_options = transcoder_options
         
     | 
| 
       17 
18 
     | 
    
         
             
                  @errors = []
         
     | 
| 
      
 19 
     | 
    
         
            +
                  
         
     | 
| 
      
 20 
     | 
    
         
            +
                  apply_transcoder_options
         
     | 
| 
       18 
21 
     | 
    
         
             
                end
         
     | 
| 
       19 
22 
     | 
    
         | 
| 
       20 
23 
     | 
    
         
             
                def run
         
     | 
| 
         @@ -73,5 +76,17 @@ module FFMPEG 
     | 
|
| 
       73 
76 
     | 
    
         
             
                def encoded
         
     | 
| 
       74 
77 
     | 
    
         
             
                  @encoded ||= Movie.new(@output_file)
         
     | 
| 
       75 
78 
     | 
    
         
             
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
                
         
     | 
| 
      
 80 
     | 
    
         
            +
                private
         
     | 
| 
      
 81 
     | 
    
         
            +
                def apply_transcoder_options
         
     | 
| 
      
 82 
     | 
    
         
            +
                  case @transcoder_options[:preserve_aspect_ratio].to_s
         
     | 
| 
      
 83 
     | 
    
         
            +
                  when "width"
         
     | 
| 
      
 84 
     | 
    
         
            +
                    new_height = (@raw_options.width / @movie.calculated_aspect_ratio).to_i
         
     | 
| 
      
 85 
     | 
    
         
            +
                    @raw_options[:resolution] = "#{@raw_options.width}x#{new_height}"
         
     | 
| 
      
 86 
     | 
    
         
            +
                  when "height"
         
     | 
| 
      
 87 
     | 
    
         
            +
                    new_width = (@raw_options.height * @movie.calculated_aspect_ratio).to_i
         
     | 
| 
      
 88 
     | 
    
         
            +
                    @raw_options[:resolution] = "#{new_width}x#{@raw_options.height}"
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
       76 
91 
     | 
    
         
             
              end
         
     | 
| 
       77 
92 
     | 
    
         
             
            end
         
     | 
| 
         @@ -7,12 +7,39 @@ module FFMPEG 
     | 
|
| 
       7 
7 
     | 
    
         
             
                    EncodingOptions.new(:video_codec => "libx264").to_s.should == "-vcodec libx264"
         
     | 
| 
       8 
8 
     | 
    
         
             
                  end
         
     | 
| 
       9 
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 
     | 
    
         
            +
                  
         
     | 
| 
       10 
27 
     | 
    
         
             
                  it "should convert frame rate" do
         
     | 
| 
       11 
28 
     | 
    
         
             
                    EncodingOptions.new(:frame_rate => 29.9).to_s.should == "-r 29.9"
         
     | 
| 
       12 
29 
     | 
    
         
             
                  end
         
     | 
| 
       13 
30 
     | 
    
         | 
| 
       14 
31 
     | 
    
         
             
                  it "should convert the resolution" do
         
     | 
| 
       15 
     | 
    
         
            -
                    EncodingOptions.new(:resolution => "640x480").to_s.should  
     | 
| 
      
 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.77777777777778")
         
     | 
| 
      
 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"
         
     | 
| 
       16 
43 
     | 
    
         
             
                  end
         
     | 
| 
       17 
44 
     | 
    
         | 
| 
       18 
45 
     | 
    
         
             
                  it "should convert video bitrate" do
         
     | 
    
        data/spec/ffmpeg/movie_spec.rb
    CHANGED
    
    | 
         @@ -81,6 +81,10 @@ module FFMPEG 
     | 
|
| 
       81 
81 
     | 
    
         
             
                    it "should should be valid" do
         
     | 
| 
       82 
82 
     | 
    
         
             
                      @movie.should be_valid
         
     | 
| 
       83 
83 
     | 
    
         
             
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
                    
         
     | 
| 
      
 85 
     | 
    
         
            +
                    it "should calculate the aspect ratio" do
         
     | 
| 
      
 86 
     | 
    
         
            +
                      @movie.calculated_aspect_ratio.to_s.should == "1.33333333333333"
         
     | 
| 
      
 87 
     | 
    
         
            +
                    end
         
     | 
| 
       84 
88 
     | 
    
         
             
                  end
         
     | 
| 
       85 
89 
     | 
    
         
             
                end
         
     | 
| 
       86 
90 
     | 
    
         | 
| 
         @@ -89,10 +93,10 @@ module FFMPEG 
     | 
|
| 
       89 
93 
     | 
    
         
             
                    movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
         
     | 
| 
       90 
94 
     | 
    
         | 
| 
       91 
95 
     | 
    
         
             
                    mockery = mock(Transcoder)
         
     | 
| 
       92 
     | 
    
         
            -
                    Transcoder.should_receive(:new).with(movie, "#{tmp_path}/awesome.flv", :custom => "-vcodec libx264").and_return(mockery)
         
     | 
| 
      
 96 
     | 
    
         
            +
                    Transcoder.should_receive(:new).with(movie, "#{tmp_path}/awesome.flv", {:custom => "-vcodec libx264"}, :preserve_aspect_ratio => :width).and_return(mockery)
         
     | 
| 
       93 
97 
     | 
    
         
             
                    mockery.should_receive(:run)
         
     | 
| 
       94 
98 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
                    movie.transcode("#{tmp_path}/awesome.flv", :custom => "-vcodec libx264")
         
     | 
| 
      
 99 
     | 
    
         
            +
                    movie.transcode("#{tmp_path}/awesome.flv", {:custom => "-vcodec libx264"}, :preserve_aspect_ratio => :width)
         
     | 
| 
       96 
100 
     | 
    
         
             
                  end
         
     | 
| 
       97 
101 
     | 
    
         
             
                end
         
     | 
| 
       98 
102 
     | 
    
         
             
              end
         
     | 
| 
         @@ -47,7 +47,7 @@ module FFMPEG 
     | 
|
| 
       47 
47 
     | 
    
         
             
                    FileUtils.rm_f "#{tmp_path}/optionalized.mp4"
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
                    movie = Movie.new("#{fixture_path}/movies/awesome movie.mov")
         
     | 
| 
       50 
     | 
    
         
            -
                    options = {:video_codec => "libx264", :frame_rate => 10, :resolution => "320x240", :video_bitrate => 300, 
     | 
| 
      
 50 
     | 
    
         
            +
                    options = {:video_codec => "libx264", :frame_rate => 10, :resolution => "320x240", :video_bitrate => 300,
         
     | 
| 
       51 
51 
     | 
    
         
             
                               :audio_codec => "libfaac", :audio_bitrate => 32, :audio_sample_rate => 22050, :audio_channels => 1,
         
     | 
| 
       52 
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 
53 
     | 
    
         | 
| 
         @@ -60,6 +60,27 @@ module FFMPEG 
     | 
|
| 
       60 
60 
     | 
    
         
             
                    encoded.audio_channels.should == 1
         
     | 
| 
       61 
61 
     | 
    
         
             
                  end
         
     | 
| 
       62 
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 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       63 
84 
     | 
    
         
             
                  it "should transcode the movie with String options" do
         
     | 
| 
       64 
85 
     | 
    
         
             
                    FileUtils.rm_f "#{tmp_path}/string_optionalized.flv"
         
     | 
| 
       65 
86 
     | 
    
         | 
| 
         Binary file 
     | 
    
        data/streamio-ffmpeg.gemspec
    CHANGED
    
    | 
         @@ -5,11 +5,11 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{streamio-ffmpeg}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.6.0"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["David Backeus"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{2010-04 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2010-05-04}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.description = %q{Simple wrapper around ffmpeg to get metadata from movies and do transcoding}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.email = %q{duztdruid@gmail.com}
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
| 
         @@ -32,6 +32,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       32 
32 
     | 
    
         
             
                 "spec/ffmpeg/movie_spec.rb",
         
     | 
| 
       33 
33 
     | 
    
         
             
                 "spec/ffmpeg/transcoder_spec.rb",
         
     | 
| 
       34 
34 
     | 
    
         
             
                 "spec/fixtures/movies/awesome movie.mov",
         
     | 
| 
      
 35 
     | 
    
         
            +
                 "spec/fixtures/movies/awesome_widescreen.mov",
         
     | 
| 
       35 
36 
     | 
    
         
             
                 "spec/spec.opts",
         
     | 
| 
       36 
37 
     | 
    
         
             
                 "spec/spec_helper.rb",
         
     | 
| 
       37 
38 
     | 
    
         
             
                 "spec/stremio-ffmpeg_spec.rb",
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version 
     | 
|
| 
       4 
4 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       5 
5 
     | 
    
         
             
              segments: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              - 0
         
     | 
| 
       7 
     | 
    
         
            -
              -  
     | 
| 
      
 7 
     | 
    
         
            +
              - 6
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 0
         
     | 
| 
       9 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 9 
     | 
    
         
            +
              version: 0.6.0
         
     | 
| 
       10 
10 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       11 
11 
     | 
    
         
             
            authors: 
         
     | 
| 
       12 
12 
     | 
    
         
             
            - David Backeus
         
     | 
| 
         @@ -14,7 +14,7 @@ autorequire: 
     | 
|
| 
       14 
14 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       15 
15 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            date: 2010-04 
     | 
| 
      
 17 
     | 
    
         
            +
            date: 2010-05-04 00:00:00 +02:00
         
     | 
| 
       18 
18 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       19 
19 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -56,6 +56,7 @@ files: 
     | 
|
| 
       56 
56 
     | 
    
         
             
            - spec/ffmpeg/movie_spec.rb
         
     | 
| 
       57 
57 
     | 
    
         
             
            - spec/ffmpeg/transcoder_spec.rb
         
     | 
| 
       58 
58 
     | 
    
         
             
            - spec/fixtures/movies/awesome movie.mov
         
     | 
| 
      
 59 
     | 
    
         
            +
            - spec/fixtures/movies/awesome_widescreen.mov
         
     | 
| 
       59 
60 
     | 
    
         
             
            - spec/spec.opts
         
     | 
| 
       60 
61 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       61 
62 
     | 
    
         
             
            - spec/stremio-ffmpeg_spec.rb
         
     |