streamio-ffmpeg 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +4 -0
- data/README.rdoc +18 -12
- data/VERSION +1 -1
- data/lib/ffmpeg/movie.rb +21 -1
- data/spec/ffmpeg/movie_spec.rb +25 -5
- data/streamio-ffmpeg.gemspec +2 -2
- metadata +2 -2
data/CHANGELOG
CHANGED
data/README.rdoc
CHANGED
@@ -11,18 +11,24 @@ Simplest possible wrapper around FFMPEG to get metadata from movie files and do
|
|
11
11
|
== Usage
|
12
12
|
|
13
13
|
movie = FFMPEG::Movie.new("path/to/movie.mov")
|
14
|
-
|
15
|
-
movie.
|
16
|
-
movie.
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
|
15
|
+
movie.duration # 7.5 (duration of the movie in seconds)
|
16
|
+
movie.bitrate # 481 (bitrate in kb/s)
|
17
|
+
|
18
|
+
movie.video_stream # "h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 371 kb/s, 16.75 fps, 15 tbr, 600 tbn, 1200 tbc" (raw video stream info)
|
19
|
+
movie.video_codec # "h264"
|
20
|
+
movie.colorspace # "yuv420p"
|
21
|
+
movie.resolution # "640x480"
|
22
|
+
movie.width # 640 (width of the movie in pixels)
|
23
|
+
movie.height # 480 (height of the movie in pixels)
|
24
|
+
movie.frame_rate # 16.72 (frames per second)
|
25
|
+
|
26
|
+
movie.audio_stream # "aac, 44100 Hz, stereo, s16, 75 kb/s" (raw audio stream info)
|
27
|
+
movie.audio_codec # "aac"
|
28
|
+
movie.audio_sample_rate # 44100
|
29
|
+
movie.audio_channels # 2
|
30
|
+
|
31
|
+
movie.valid? # true (would be false if ffmpeg fails to read the movie)
|
26
32
|
|
27
33
|
== Copyright
|
28
34
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/ffmpeg/movie.rb
CHANGED
@@ -2,7 +2,9 @@ require 'open3'
|
|
2
2
|
|
3
3
|
module FFMPEG
|
4
4
|
class Movie
|
5
|
-
attr_reader :duration, :
|
5
|
+
attr_reader :duration, :bitrate
|
6
|
+
attr_reader :video_stream, :video_codec, :colorspace, :resolution
|
7
|
+
attr_reader :audio_stream, :audio_codec, :audio_sample_rate
|
6
8
|
|
7
9
|
def initialize(path)
|
8
10
|
raise Errno::ENOENT, "the file '#{path}' does not exist" unless File.exists?(path)
|
@@ -15,6 +17,9 @@ module FFMPEG
|
|
15
17
|
output[/Duration: (\d{2}):(\d{2}):(\d{2}\.\d{1})/]
|
16
18
|
@duration = ($1.to_i*60*60) + ($2.to_i*60) + $3.to_f
|
17
19
|
|
20
|
+
output[/bitrate: (\d*)/]
|
21
|
+
@bitrate = $1 ? $1.to_i : nil
|
22
|
+
|
18
23
|
output[/Video: (.*)/]
|
19
24
|
@video_stream = $1
|
20
25
|
|
@@ -25,6 +30,11 @@ module FFMPEG
|
|
25
30
|
@video_codec, @colorspace, resolution = video_stream.split(/\s?,\s?/)
|
26
31
|
@resolution = resolution.split(" ").first # get rid of [PAR 1:1 DAR 16:9]
|
27
32
|
end
|
33
|
+
|
34
|
+
if audio_stream
|
35
|
+
@audio_codec, audio_sample_rate, @audio_channels = audio_stream.split(/\s?,\s?/)
|
36
|
+
@audio_sample_rate = audio_sample_rate[/\d*/].to_i
|
37
|
+
end
|
28
38
|
end
|
29
39
|
|
30
40
|
def valid?
|
@@ -38,5 +48,15 @@ module FFMPEG
|
|
38
48
|
def height
|
39
49
|
resolution.split("x")[1].to_i rescue nil
|
40
50
|
end
|
51
|
+
|
52
|
+
def audio_channels
|
53
|
+
return @audio_channels[/\d*/].to_i if @audio_channels["channels"]
|
54
|
+
return 1 if @audio_channels["mono"]
|
55
|
+
return 2 if @audio_channels["stereo"]
|
56
|
+
end
|
57
|
+
|
58
|
+
def frame_rate
|
59
|
+
video_stream[/(\d*\.\d*)\s?fps/] ? $1.to_f : nil
|
60
|
+
end
|
41
61
|
end
|
42
62
|
end
|
data/spec/ffmpeg/movie_spec.rb
CHANGED
@@ -23,19 +23,19 @@ module FFMPEG
|
|
23
23
|
before(:all) do
|
24
24
|
@movie = Movie.new("#{fixture_path}/movies/awesome.mov")
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
it "should parse duration to number of seconds" do
|
28
28
|
@movie.duration.should == 7.5
|
29
29
|
end
|
30
|
+
|
31
|
+
it "should parse the bitrate" do
|
32
|
+
@movie.bitrate.should == 481
|
33
|
+
end
|
30
34
|
|
31
35
|
it "should parse video stream information" do
|
32
36
|
@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"
|
33
37
|
end
|
34
38
|
|
35
|
-
it "should parse audio stream information" do
|
36
|
-
@movie.audio_stream.should == "aac, 44100 Hz, stereo, s16, 75 kb/s"
|
37
|
-
end
|
38
|
-
|
39
39
|
it "should know the video codec" do
|
40
40
|
@movie.video_codec.should == "h264"
|
41
41
|
end
|
@@ -53,6 +53,26 @@ module FFMPEG
|
|
53
53
|
@movie.height.should == 480
|
54
54
|
end
|
55
55
|
|
56
|
+
it "should know the framerate" do
|
57
|
+
@movie.frame_rate.should == 16.75
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should parse audio stream information" do
|
61
|
+
@movie.audio_stream.should == "aac, 44100 Hz, stereo, s16, 75 kb/s"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should know the audio codec" do
|
65
|
+
@movie.audio_codec.should == "aac"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should know the sample rate" do
|
69
|
+
@movie.audio_sample_rate.should == 44100
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should know the number of audio channels" do
|
73
|
+
@movie.audio_channels.should == 2
|
74
|
+
end
|
75
|
+
|
56
76
|
it "should should be valid" do
|
57
77
|
@movie.should be_valid
|
58
78
|
end
|
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.2.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-02-
|
12
|
+
s.date = %q{2010-02-06}
|
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 = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: streamio-ffmpeg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Backeus
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-06 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|