ffprober 0.0.1 → 0.0.2
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 +1 -0
 - data/.travis.yml +7 -0
 - data/README.md +12 -3
 - data/lib/ffprober/parser.rb +24 -2
 - data/lib/ffprober/version.rb +1 -1
 - data/spec/assets/301-extracting_a_ruby_gem.m4v +0 -0
 - data/spec/ffprober_spec.rb +49 -27
 - metadata +10 -7
 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # FfprobeR
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            a Ruby wrapper for ffprobe (part of ffmpeg)
         
     | 
| 
      
 4 
     | 
    
         
            +
            [](http://travis-ci.org/beanieboi/ffprober)
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            ## Installation
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
         @@ -18,7 +19,15 @@ Or install it yourself as: 
     | 
|
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
            ## Usage
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
                require 'ffprober'
         
     | 
| 
      
 23 
     | 
    
         
            +
                ffprobe = Ffprober::Parser.from_file("my_awesome_video.mp4")
         
     | 
| 
      
 24 
     | 
    
         
            +
                ffprobe.size #=> 44772490
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            ## TODOS
         
     | 
| 
      
 27 
     | 
    
         
            +
            a smarter way to determine the version of ffprobe
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            ## FFMPEG version
         
     | 
| 
      
 30 
     | 
    
         
            +
            tested with ffprobe version 0.10.2
         
     | 
| 
       22 
31 
     | 
    
         | 
| 
       23 
32 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       24 
33 
     | 
    
         | 
    
        data/lib/ffprober/parser.rb
    CHANGED
    
    | 
         @@ -1,10 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Ffprober
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Parser
         
     | 
| 
       3 
     | 
    
         
            -
                @@ffprobe_path = `which ffprobe`
         
     | 
| 
       4 
3 
     | 
    
         
             
                @@options = '-v quiet -print_format json -show_format -show_streams'
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
                def self.from_file(file_to_parse)
         
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
      
 6 
     | 
    
         
            +
                  raise ArgumentError.new("found unsupported ffprobe version") unless ffprobe_version_valid?
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  json_output = `#{ffprobe_path} #{@@options} #{file_to_parse}`
         
     | 
| 
       8 
9 
     | 
    
         
             
                  from_json(json_output)
         
     | 
| 
       9 
10 
     | 
    
         
             
                end
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
         @@ -34,5 +35,26 @@ module Ffprober 
     | 
|
| 
       34 
35 
     | 
    
         
             
                    Ffprober::AudioStream.new(s)
         
     | 
| 
       35 
36 
     | 
    
         
             
                  end
         
     | 
| 
       36 
37 
     | 
    
         
             
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def self.ffprobe_version_valid?
         
     | 
| 
      
 40 
     | 
    
         
            +
                  !(ffprobe_version =~ /ffprobe version 0.10.2/).nil?
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def self.ffprobe_version
         
     | 
| 
      
 44 
     | 
    
         
            +
                  version = `#{ffprobe_path} -version`
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def self.ffprobe_path
         
     | 
| 
      
 48 
     | 
    
         
            +
                  name = 'ffprobe'
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  if File.executable? name
         
     | 
| 
      
 51 
     | 
    
         
            +
                    cmd
         
     | 
| 
      
 52 
     | 
    
         
            +
                  else
         
     | 
| 
      
 53 
     | 
    
         
            +
                    path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |path|
         
     | 
| 
      
 54 
     | 
    
         
            +
                      File.executable? File.join(path, name)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    }
         
     | 
| 
      
 56 
     | 
    
         
            +
                    path && File.expand_path(name, path)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
       37 
59 
     | 
    
         
             
              end
         
     | 
| 
       38 
60 
     | 
    
         
             
            end
         
     | 
    
        data/lib/ffprober/version.rb
    CHANGED
    
    
| 
         Binary file 
     | 
    
        data/spec/ffprober_spec.rb
    CHANGED
    
    | 
         @@ -2,47 +2,69 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            describe Ffprober do
         
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              describe "format" do
         
     | 
| 
       10 
     | 
    
         
            -
                it "should determine the correct filename" do
         
     | 
| 
       11 
     | 
    
         
            -
                  @ffprobe.format.filename.should eq("301-extracting-a-ruby-gem.mp4")
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe "from_file", :if => Ffprober::Parser.ffprobe_version_valid? do
         
     | 
| 
      
 6 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @ffprobe = Ffprober::Parser.from_file('spec/assets/301-extracting_a_ruby_gem.m4v')
         
     | 
| 
       12 
8 
     | 
    
         
             
                end
         
     | 
| 
       13 
9 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
       15 
     | 
    
         
            -
                   
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                describe "format" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  it "should determine the correct filename" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @ffprobe.format.filename.should eq("spec/assets/301-extracting_a_ruby_gem.m4v")
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
       17 
14 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
                  it "should find the correct size" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @ffprobe.format.size.should eq("130694")
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  it "should find the correct bit_rate" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @ffprobe.format.bit_rate.should eq("502669")
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
       20 
22 
     | 
    
         
             
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       21 
24 
     | 
    
         
             
              end
         
     | 
| 
       22 
25 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
              describe " 
     | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
       25 
     | 
    
         
            -
                  @ffprobe. 
     | 
| 
      
 26 
     | 
    
         
            +
              describe "from_json" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @ffprobe = Ffprober::Parser.from_json(File.read('spec/assets/301-extracting_a_ruby_gem.json'))
         
     | 
| 
       26 
29 
     | 
    
         
             
                end
         
     | 
| 
       27 
30 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
                   
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
                describe "format" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  it "should determine the correct filename" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @ffprobe.format.filename.should eq("301-extracting-a-ruby-gem.mp4")
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
       31 
35 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
                  it "should find the correct size" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @ffprobe.format.size.should eq("44772490")
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
       33 
39 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                   
     | 
| 
      
 40 
     | 
    
         
            +
                  it "should find the correct bit_rate" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @ffprobe.format.bit_rate.should eq("361309")
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
       37 
43 
     | 
    
         
             
                end
         
     | 
| 
       38 
44 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                 
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
      
 45 
     | 
    
         
            +
                describe "audio_streams" do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  it "should determine the correct number of audio streams" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @ffprobe.audio_streams.count.should eq(1)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  it "should determine the correct sample rate of the first audio stream" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @ffprobe.audio_streams.first.sample_rate.should eq("48000")
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       41 
54 
     | 
    
         
             
                end
         
     | 
| 
       42 
55 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                 
     | 
| 
       44 
     | 
    
         
            -
                   
     | 
| 
      
 56 
     | 
    
         
            +
                describe "video_streams" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  it "should determine the correct width of the first video streams" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @ffprobe.video_streams.first.width.should eq(960)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  it "should determine the correct width of the first video streams" do
         
     | 
| 
      
 62 
     | 
    
         
            +
                    @ffprobe.video_streams.first.height.should eq(600)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  it "should determine the correct number of video streams" do
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @ffprobe.video_streams.count.should eq(1)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
       45 
68 
     | 
    
         
             
                end
         
     | 
| 
       46 
69 
     | 
    
         
             
              end
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
70 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ffprober
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -13,7 +13,7 @@ date: 2012-05-01 00:00:00.000000000 Z 
     | 
|
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rspec
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &70204608840140 !ruby/object:Gem::Requirement
         
     | 
| 
       17 
17 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
19 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -21,10 +21,10 @@ dependencies: 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    version: '2.9'
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *70204608840140
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: rake
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &70204608838580 !ruby/object:Gem::Requirement
         
     | 
| 
       28 
28 
     | 
    
         
             
                none: false
         
     | 
| 
       29 
29 
     | 
    
         
             
                requirements:
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -32,10 +32,10 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: '0.9'
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :development
         
     | 
| 
       34 
34 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       35 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *70204608838580
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
37 
     | 
    
         
             
              name: multi_json
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &70204608836960 !ruby/object:Gem::Requirement
         
     | 
| 
       39 
39 
     | 
    
         
             
                none: false
         
     | 
| 
       40 
40 
     | 
    
         
             
                requirements:
         
     | 
| 
       41 
41 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -43,7 +43,7 @@ dependencies: 
     | 
|
| 
       43 
43 
     | 
    
         
             
                    version: '1.3'
         
     | 
| 
       44 
44 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       45 
45 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       46 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *70204608836960
         
     | 
| 
       47 
47 
     | 
    
         
             
            description: a Ruby wrapper for ffprobe
         
     | 
| 
       48 
48 
     | 
    
         
             
            email:
         
     | 
| 
       49 
49 
     | 
    
         
             
            - beanie@benle.de
         
     | 
| 
         @@ -53,6 +53,7 @@ extra_rdoc_files: [] 
     | 
|
| 
       53 
53 
     | 
    
         
             
            files:
         
     | 
| 
       54 
54 
     | 
    
         
             
            - .gitignore
         
     | 
| 
       55 
55 
     | 
    
         
             
            - .rspec
         
     | 
| 
      
 56 
     | 
    
         
            +
            - .travis.yml
         
     | 
| 
       56 
57 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       57 
58 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       58 
59 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -66,6 +67,7 @@ files: 
     | 
|
| 
       66 
67 
     | 
    
         
             
            - lib/ffprober/version.rb
         
     | 
| 
       67 
68 
     | 
    
         
             
            - lib/ffprober/video_stream.rb
         
     | 
| 
       68 
69 
     | 
    
         
             
            - spec/assets/301-extracting_a_ruby_gem.json
         
     | 
| 
      
 70 
     | 
    
         
            +
            - spec/assets/301-extracting_a_ruby_gem.m4v
         
     | 
| 
       69 
71 
     | 
    
         
             
            - spec/ffprober_spec.rb
         
     | 
| 
       70 
72 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       71 
73 
     | 
    
         
             
            homepage: https://github.com/beanieboi/ffprober
         
     | 
| 
         @@ -94,5 +96,6 @@ specification_version: 3 
     | 
|
| 
       94 
96 
     | 
    
         
             
            summary: a Ruby wrapper for ffprobe (part of ffmpeg)
         
     | 
| 
       95 
97 
     | 
    
         
             
            test_files:
         
     | 
| 
       96 
98 
     | 
    
         
             
            - spec/assets/301-extracting_a_ruby_gem.json
         
     | 
| 
      
 99 
     | 
    
         
            +
            - spec/assets/301-extracting_a_ruby_gem.m4v
         
     | 
| 
       97 
100 
     | 
    
         
             
            - spec/ffprober_spec.rb
         
     | 
| 
       98 
101 
     | 
    
         
             
            - spec/spec_helper.rb
         
     |