ffprober 0.1.0 → 0.1.1
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/.travis.yml +1 -0
- data/README.md +3 -3
- data/lib/ffprober/parser.rb +48 -34
- data/lib/ffprober/version.rb +1 -1
- data/spec/ffprober/parser_spec.rb +25 -0
- metadata +25 -23
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -27,13 +27,13 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
## FFMPEG version
|
29
29
|
|
30
|
-
tested with ffprobe version 0.10.
|
30
|
+
tested with ffprobe version 0.9, 0.10, 0.11 and 1.0
|
31
31
|
|
32
|
-
according to [ffmpeg changelog](http://git.videolan.org/?p=ffmpeg.git;a=blob_plain;f=Changelog) json
|
32
|
+
according to [ffmpeg changelog](http://git.videolan.org/?p=ffmpeg.git;a=blob_plain;f=Changelog) json output was added in version 0.9
|
33
33
|
|
34
34
|
## Supported Rubies
|
35
35
|
|
36
|
-
|
36
|
+
Ffprober is tested under 1.9.2, 1.9.3, 2.0, JRuby (1.9mode) and Rubinius (1.9mode).
|
37
37
|
|
38
38
|
[](http://travis-ci.org/beanieboi/ffprober)
|
39
39
|
|
data/lib/ffprober/parser.rb
CHANGED
@@ -1,18 +1,57 @@
|
|
1
1
|
module Ffprober
|
2
2
|
class Parser
|
3
3
|
@@options = '-v quiet -print_format json -show_format -show_streams'
|
4
|
+
@@version_regex = /^ffprobe version (?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/
|
4
5
|
|
5
|
-
|
6
|
-
|
6
|
+
class << self
|
7
|
+
def from_file(file_to_parse)
|
8
|
+
unless ffprobe_version_valid?
|
9
|
+
raise ArgumentError.new("no or unsupported ffprobe version found.\
|
10
|
+
(version: #{ffprobe_version})")
|
11
|
+
end
|
7
12
|
|
8
|
-
|
9
|
-
|
10
|
-
|
13
|
+
json_output = `#{ffprobe_path} #{@@options} #{file_to_parse}`
|
14
|
+
from_json(json_output)
|
15
|
+
end
|
16
|
+
|
17
|
+
def from_json(json_to_parse)
|
18
|
+
parser = self.new
|
19
|
+
parser.parse(json_to_parse)
|
20
|
+
parser
|
21
|
+
end
|
22
|
+
|
23
|
+
def ffprobe_version_valid?
|
24
|
+
valid_versions.include?(ffprobe_version)
|
25
|
+
end
|
26
|
+
|
27
|
+
def ffprobe_version
|
28
|
+
version = `#{ffprobe_path} -version`.match(@@version_regex)
|
29
|
+
raise Errno::ENOENT if version.nil?
|
30
|
+
major, minor, patch = version[1].to_i, version[2].to_i, version[3].to_i
|
31
|
+
{major: major, minor: minor, patch: patch}
|
32
|
+
rescue Errno::ENOENT => e
|
33
|
+
{major: 0, minor: 0, patch: 0}
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid_versions
|
37
|
+
[{major: 0, minor: 9, patch: 0},
|
38
|
+
{major: 0, minor: 10, patch: 0},
|
39
|
+
{major: 0, minor: 11, patch: 0},
|
40
|
+
{major: 1, minor: 0, patch: 0}]
|
41
|
+
end
|
11
42
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
43
|
+
def ffprobe_path
|
44
|
+
name = 'ffprobe'
|
45
|
+
|
46
|
+
if File.executable? name
|
47
|
+
cmd
|
48
|
+
else
|
49
|
+
path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |path|
|
50
|
+
File.executable? File.join(path, name)
|
51
|
+
}
|
52
|
+
path && File.expand_path(name, path)
|
53
|
+
end
|
54
|
+
end
|
16
55
|
end
|
17
56
|
|
18
57
|
def parse(json_to_parse)
|
@@ -36,30 +75,5 @@ module Ffprober
|
|
36
75
|
end
|
37
76
|
end
|
38
77
|
|
39
|
-
def self.ffprobe_version_valid?
|
40
|
-
ffprobe_version[:minor] > 9
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.ffprobe_version
|
44
|
-
version = `#{ffprobe_path} -version`.match(/^ffprobe version (?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/)
|
45
|
-
raise Errno::ENOENT if version.nil?
|
46
|
-
major, minor, patch = version[1].to_i, version[2].to_i, version[3].to_i
|
47
|
-
{major: major, minor: minor, patch: patch}
|
48
|
-
rescue Errno::ENOENT => e
|
49
|
-
{major: 0, minor: 0, patch: 0}
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.ffprobe_path
|
53
|
-
name = 'ffprobe'
|
54
|
-
|
55
|
-
if File.executable? name
|
56
|
-
cmd
|
57
|
-
else
|
58
|
-
path = ENV['PATH'].split(File::PATH_SEPARATOR).find { |path|
|
59
|
-
File.executable? File.join(path, name)
|
60
|
-
}
|
61
|
-
path && File.expand_path(name, path)
|
62
|
-
end
|
63
|
-
end
|
64
78
|
end
|
65
79
|
end
|
data/lib/ffprober/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Ffprober::Parser do
|
5
|
+
let(:before_one_zero) { {major: 0, minor: 9, patch: 0} }
|
6
|
+
let(:one_zero) { {major: 1, minor: 0, patch: 0} }
|
7
|
+
let(:after_one_zero) { {major: 1, minor: 9, patch: 0} }
|
8
|
+
|
9
|
+
context 'validates the ffprobe version' do
|
10
|
+
it 'detects versions < 0.9' do
|
11
|
+
Ffprober::Parser.stub(:ffprobe_version) { before_one_zero }
|
12
|
+
Ffprober::Parser.ffprobe_version_valid?.should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'detects versions 1.0' do
|
16
|
+
Ffprober::Parser.stub(:ffprobe_version) { one_zero }
|
17
|
+
Ffprober::Parser.ffprobe_version_valid?.should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'detects versions 1.9' do
|
21
|
+
Ffprober::Parser.stub(:ffprobe_version) { after_one_zero }
|
22
|
+
Ffprober::Parser.ffprobe_version_valid?.should be_false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
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.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,56 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '2.9'
|
20
|
-
none: false
|
21
|
-
prerelease: false
|
22
22
|
type: :development
|
23
|
-
|
24
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
25
26
|
requirements:
|
26
27
|
- - ~>
|
27
28
|
- !ruby/object:Gem::Version
|
28
29
|
version: '2.9'
|
29
|
-
none: false
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
32
34
|
requirements:
|
33
35
|
- - ~>
|
34
36
|
- !ruby/object:Gem::Version
|
35
37
|
version: '0.9'
|
36
|
-
none: false
|
37
|
-
prerelease: false
|
38
38
|
type: :development
|
39
|
-
|
40
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
41
42
|
requirements:
|
42
43
|
- - ~>
|
43
44
|
- !ruby/object:Gem::Version
|
44
45
|
version: '0.9'
|
45
|
-
none: false
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
|
47
|
+
name: multi_json
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
48
50
|
requirements:
|
49
51
|
- - ~>
|
50
52
|
- !ruby/object:Gem::Version
|
51
53
|
version: '1.3'
|
52
|
-
none: false
|
53
|
-
prerelease: false
|
54
54
|
type: :runtime
|
55
|
-
|
56
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
57
58
|
requirements:
|
58
59
|
- - ~>
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '1.3'
|
61
|
-
none: false
|
62
62
|
description: a Ruby wrapper for ffprobe
|
63
63
|
email:
|
64
64
|
- beanie@benle.de
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- lib/ffprober/video_stream.rb
|
84
84
|
- spec/assets/301-extracting_a_ruby_gem.json
|
85
85
|
- spec/assets/301-extracting_a_ruby_gem.m4v
|
86
|
+
- spec/ffprober/parser_spec.rb
|
86
87
|
- spec/ffprober_spec.rb
|
87
88
|
- spec/spec_helper.rb
|
88
89
|
homepage: https://github.com/beanieboi/ffprober
|
@@ -92,25 +93,26 @@ rdoc_options: []
|
|
92
93
|
require_paths:
|
93
94
|
- lib
|
94
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
95
97
|
requirements:
|
96
98
|
- - ! '>='
|
97
99
|
- !ruby/object:Gem::Version
|
98
100
|
version: 1.9.2
|
99
|
-
none: false
|
100
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
101
103
|
requirements:
|
102
104
|
- - ! '>='
|
103
105
|
- !ruby/object:Gem::Version
|
104
106
|
version: '0'
|
105
|
-
none: false
|
106
107
|
requirements: []
|
107
108
|
rubyforge_project: ffprober
|
108
|
-
rubygems_version: 1.8.
|
109
|
+
rubygems_version: 1.8.23
|
109
110
|
signing_key:
|
110
111
|
specification_version: 3
|
111
112
|
summary: a Ruby wrapper for ffprobe (part of ffmpeg)
|
112
113
|
test_files:
|
113
114
|
- spec/assets/301-extracting_a_ruby_gem.json
|
114
115
|
- spec/assets/301-extracting_a_ruby_gem.m4v
|
116
|
+
- spec/ffprober/parser_spec.rb
|
115
117
|
- spec/ffprober_spec.rb
|
116
118
|
- spec/spec_helper.rb
|