vidibus-fileinfo 1.1.1 → 2.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 47c20c18ec3cc05d64b29c1f752b289a12bc3bbae5c4b499e0f82981b18fdbd5
4
+ data.tar.gz: d7166d9a842050f6a0f11b77ee1026b81e0ca725b9b5b4698a5dc6dbd72cc0c2
5
+ SHA512:
6
+ metadata.gz: 5bd2c2784dc472d1e9d5d284f06441ac020d4210501f8856c55a1132c895236f0e1b39d6e4b7e7ac9d6fc1bebb77c436ce4668a5e926c1c5c7e2befeec080c39
7
+ data.tar.gz: b8cebddfc8e4355d59cb8f2ec68d3f1aa9699f2b5b7e1691df9bd8387cc9ebe6a1e44fec85dedbbe980a7aca1e38f0630940108ad47e33476b683638476fca50
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Vidibus::Fileinfo [![](http://stillmaintained.com/vidibus/vidibus-fileinfo.png)](http://stillmaintained.com/vidibus/vidibus-fileinfo)
1
+ # Vidibus::Fileinfo
2
2
 
3
3
  Returns information like the width, height and bits about an image or video file.
4
4
 
@@ -87,6 +87,25 @@ These video formats are currently supported:
87
87
  mpeg, mpg, mts, mxf, ogg, ogv, rm, ts, webm, wmv
88
88
  ```
89
89
 
90
+ ### Audio files
91
+
92
+ For audio files the dataset looks as follows:
93
+
94
+ ``` ruby
95
+ :size # file size in bytes, eg. 20883991
96
+ :duration # duration of video in seconds, e.g. 44.82
97
+ :content_type # content type of video, e.g. "audio/mpeg"
98
+ :bit_rate # bit rate in bit, e.g. 600000
99
+ :codec # codec of audio stream, e.g. "aac"
100
+ :sample_rate # sample rate of audio stream, e.g. 48000
101
+ ```
102
+
103
+ These audio formats are currently supported:
104
+
105
+ ```
106
+ mp3
107
+ ```
108
+
90
109
  ## Copyright
91
110
 
92
- Copyright (c) 2011-2012 Andre Pankratz. See LICENSE for details.
111
+ Copyright (c) 2011-2013 Andre Pankratz. See LICENSE for details.
@@ -1,3 +1,5 @@
1
+ require 'open3'
2
+
1
3
  module Vidibus
2
4
  module Fileinfo
3
5
  class Base
@@ -50,7 +52,7 @@ module Vidibus
50
52
  end
51
53
 
52
54
  def parse_metadata
53
- @raw_metadata = process_cmd
55
+ @raw_metadata = process_cmd.force_encoding('ISO8859-1')
54
56
  metadata = {}
55
57
  @processor::METADATA.each do |attribute|
56
58
  if data = send(attribute)
@@ -62,10 +64,8 @@ module Vidibus
62
64
  end
63
65
 
64
66
  def process_cmd
65
- pid, stdin, stdout, stderr = POSIX::Spawn::popen4(cmd)
66
- raw_metadata = eval(output).read
67
- Process::waitpid(pid)
68
- raw_metadata
67
+ stdout, stderr, status = Open3.capture3(cmd)
68
+ eval(output)
69
69
  end
70
70
 
71
71
  # Important attributes must be present and valid
@@ -0,0 +1,62 @@
1
+ module Vidibus
2
+ module Fileinfo
3
+ module Processor
4
+ module Audio
5
+ FORMATS = %w[
6
+ mp3
7
+ ]
8
+ METADATA = %w[
9
+ codec sample_rate content_type bit_rate duration
10
+ ]
11
+
12
+ # FFmpeg command
13
+ def cmd
14
+ %Q(ffmpeg -i "#{@path}")
15
+ end
16
+
17
+ def output
18
+ 'stderr'
19
+ end
20
+
21
+ def validate
22
+ %w[duration]
23
+ end
24
+
25
+ protected
26
+
27
+ def codec
28
+ @raw_metadata[/Audio:\s+([a-z0-9_]+).*,.*\d+\sHz/, 1]
29
+ end
30
+
31
+ def sample_rate
32
+ if match = @raw_metadata[/(\d+)\sHz/, 1]
33
+ match.to_i
34
+ end
35
+ end
36
+
37
+ # Return the bit rate defined as "bitrate". Calculate it from
38
+ # file size and duration otherwise.
39
+ # 1 kilobit == 1000 bit
40
+ def bit_rate
41
+ if match = @raw_metadata[/bitrate:\s(\d+)\skb\/s/, 1]
42
+ match.to_i * 1000
43
+ elsif duration && duration > 0
44
+ (size.to_f/1.024/duration*8).round
45
+ end
46
+ end
47
+
48
+ def content_type
49
+ super('audio')
50
+ end
51
+
52
+ def duration
53
+ if match = @raw_metadata[/Duration:\s+([0-9\:\.]+),/, 1]
54
+ units = match.split(":").map(&:to_f)
55
+ f = units[0]*3600 + units[1]*60 + units[2]
56
+ (f * 100).round.to_f / 100
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -3,8 +3,8 @@ module Vidibus
3
3
  module Processor
4
4
  module Video
5
5
  FORMATS = %w[
6
- 3g2 3gp asf avi dv f4p f4v flv ivf m21 mj2 mjpg mkv mov mp4 mpeg mpg
7
- mts mxf ogg ogv rm ts webm wmv
6
+ 3g2 3gp asf avi f4p f4v flv ivf mj2 mjpg mkv mov mp4 mpeg mpg
7
+ mxf ogg ogv rm ts webm wmv
8
8
  ]
9
9
  METADATA = %w[
10
10
  aspect_ratio audio_codec audio_sample_rate content_type bit_rate
@@ -1,5 +1,5 @@
1
1
  module Vidibus
2
2
  module Fileinfo
3
- VERSION = '1.1.1'
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end
@@ -1,6 +1,7 @@
1
1
  require "vidibus/fileinfo/base"
2
2
  require "vidibus/fileinfo/processor/image"
3
3
  require "vidibus/fileinfo/processor/video"
4
+ require "vidibus/fileinfo/processor/audio"
4
5
 
5
6
  module Vidibus
6
7
  module Fileinfo
@@ -19,7 +20,7 @@ module Vidibus
19
20
 
20
21
  # Returns a list of available processors.
21
22
  def processors
22
- @processors ||= [Processor::Image, Processor::Video]
23
+ @processors ||= [Processor::Image, Processor::Video, Processor::Audio]
23
24
  end
24
25
 
25
26
  # Returns a list of processable formats.
@@ -1,5 +1,5 @@
1
- require "mime/types"
2
- require "posix/spawn"
3
- require "vidibus-core_extensions"
4
-
5
- require "vidibus/fileinfo"
1
+ require 'yaml'
2
+ require 'mime/types'
3
+ require 'open3'
4
+ require 'vidibus-core_extensions'
5
+ require 'vidibus/fileinfo'
metadata CHANGED
@@ -1,201 +1,161 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidibus-fileinfo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Andre Pankratz
9
- autorequire:
10
8
  bindir: bin
11
9
  cert_chain: []
12
- date: 2012-09-18 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
13
11
  dependencies:
14
12
  - !ruby/object:Gem::Dependency
15
13
  name: mime-types
16
14
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
15
  requirements:
19
- - - ! '>='
16
+ - - ">="
20
17
  - !ruby/object:Gem::Version
21
- version: '0'
18
+ version: '3'
22
19
  type: :runtime
23
20
  prerelease: false
24
21
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
22
  requirements:
27
- - - ! '>='
23
+ - - ">="
28
24
  - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: posix-spawn
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
25
+ version: '3'
46
26
  - !ruby/object:Gem::Dependency
47
27
  name: vidibus-core_extensions
48
28
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
29
  requirements:
51
- - - ! '>='
30
+ - - ">="
52
31
  - !ruby/object:Gem::Version
53
32
  version: '0'
54
33
  type: :runtime
55
34
  prerelease: false
56
35
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
36
  requirements:
59
- - - ! '>='
37
+ - - ">="
60
38
  - !ruby/object:Gem::Version
61
39
  version: '0'
62
40
  - !ruby/object:Gem::Dependency
63
41
  name: bundler
64
42
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
43
  requirements:
67
- - - ! '>='
44
+ - - ">="
68
45
  - !ruby/object:Gem::Version
69
46
  version: 1.0.0
70
47
  type: :development
71
48
  prerelease: false
72
49
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
50
  requirements:
75
- - - ! '>='
51
+ - - ">="
76
52
  - !ruby/object:Gem::Version
77
53
  version: 1.0.0
78
54
  - !ruby/object:Gem::Dependency
79
55
  name: rspec
80
56
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
57
  requirements:
83
- - - ~>
58
+ - - ">="
84
59
  - !ruby/object:Gem::Version
85
- version: '2'
60
+ version: '0'
86
61
  type: :development
87
62
  prerelease: false
88
63
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
64
  requirements:
91
- - - ~>
65
+ - - ">="
92
66
  - !ruby/object:Gem::Version
93
- version: '2'
67
+ version: '0'
94
68
  - !ruby/object:Gem::Dependency
95
69
  name: rr
96
70
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
71
  requirements:
99
- - - ! '>='
72
+ - - ">="
100
73
  - !ruby/object:Gem::Version
101
74
  version: '0'
102
75
  type: :development
103
76
  prerelease: false
104
77
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
78
  requirements:
107
- - - ! '>='
79
+ - - ">="
108
80
  - !ruby/object:Gem::Version
109
81
  version: '0'
110
82
  - !ruby/object:Gem::Dependency
111
83
  name: rake
112
84
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
85
  requirements:
115
- - - ! '>='
86
+ - - ">="
116
87
  - !ruby/object:Gem::Version
117
88
  version: '0'
118
89
  type: :development
119
90
  prerelease: false
120
91
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
92
  requirements:
123
- - - ! '>='
93
+ - - ">="
124
94
  - !ruby/object:Gem::Version
125
95
  version: '0'
126
96
  - !ruby/object:Gem::Dependency
127
97
  name: rdoc
128
98
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
99
  requirements:
131
- - - ! '>='
100
+ - - ">="
132
101
  - !ruby/object:Gem::Version
133
102
  version: '0'
134
103
  type: :development
135
104
  prerelease: false
136
105
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
106
  requirements:
139
- - - ! '>='
107
+ - - ">="
140
108
  - !ruby/object:Gem::Version
141
109
  version: '0'
142
110
  - !ruby/object:Gem::Dependency
143
111
  name: simplecov
144
112
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
113
  requirements:
147
- - - ! '>='
114
+ - - ">="
148
115
  - !ruby/object:Gem::Version
149
116
  version: '0'
150
117
  type: :development
151
118
  prerelease: false
152
119
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
120
  requirements:
155
- - - ! '>='
121
+ - - ">="
156
122
  - !ruby/object:Gem::Version
157
123
  version: '0'
158
- description: Returns information like the width, height and bits about an image or
159
- video file.
124
+ description: Returns information like the width, height and bits about an image, video
125
+ or audio file.
160
126
  email: andre@vidibus.com
161
127
  executables: []
162
128
  extensions: []
163
129
  extra_rdoc_files: []
164
130
  files:
131
+ - LICENSE
132
+ - README.md
133
+ - Rakefile
134
+ - lib/vidibus-fileinfo.rb
135
+ - lib/vidibus/fileinfo.rb
165
136
  - lib/vidibus/fileinfo/base.rb
137
+ - lib/vidibus/fileinfo/processor/audio.rb
166
138
  - lib/vidibus/fileinfo/processor/image.rb
167
139
  - lib/vidibus/fileinfo/processor/video.rb
168
140
  - lib/vidibus/fileinfo/version.rb
169
- - lib/vidibus/fileinfo.rb
170
- - lib/vidibus-fileinfo.rb
171
- - LICENSE
172
- - README.md
173
- - Rakefile
174
141
  homepage: https://github.com/vidibus/vidibus-fileinfo
175
142
  licenses: []
176
- post_install_message:
143
+ metadata: {}
177
144
  rdoc_options: []
178
145
  require_paths:
179
146
  - lib
180
147
  required_ruby_version: !ruby/object:Gem::Requirement
181
- none: false
182
148
  requirements:
183
- - - ! '>='
149
+ - - ">="
184
150
  - !ruby/object:Gem::Version
185
151
  version: '0'
186
- segments:
187
- - 0
188
- hash: -2292526863933311751
189
152
  required_rubygems_version: !ruby/object:Gem::Requirement
190
- none: false
191
153
  requirements:
192
- - - ! '>='
154
+ - - ">="
193
155
  - !ruby/object:Gem::Version
194
156
  version: 1.3.6
195
157
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 1.8.24
198
- signing_key:
199
- specification_version: 3
200
- summary: Returns information about an image or video file.
158
+ rubygems_version: 3.6.9
159
+ specification_version: 4
160
+ summary: Returns information about an image, video or audio file.
201
161
  test_files: []