media_info 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6a27fd9d51e03db397ca6587a2cff5cbf985aa80
4
+ data.tar.gz: 20b835fcba806eeaeee8f82230809961edaa9849
5
+ SHA512:
6
+ metadata.gz: 5234d12da535a1b0fbd850bde23db0bacc7e85ea44788bc0f8a4e7e846a265b23c8a71c08a4f6e133ea9ad44019aaecbd73ca2b1c864bffd3f59a0fce9ee8171
7
+ data.tar.gz: 12d3d23d5f6314bb247cf7af6554388f91f08a47bb6ef38ef7db7d550dc422361aa90660b96d0a703fae3877f16af355046754acce053af396ba4971bf0efb77
data/lib/media_info.rb ADDED
@@ -0,0 +1,89 @@
1
+ require 'media_info/parser'
2
+
3
+ module MediaInfo
4
+ class Base
5
+ attr_reader :streams
6
+
7
+ def initialize(filename)
8
+ check_file(filename)
9
+
10
+ @streams = Parser.call(filename)
11
+ end
12
+
13
+ def streams_types
14
+ streams.map do |stream|
15
+ stream.class::TYPE
16
+ end.uniq
17
+ end
18
+
19
+ def general?
20
+ stream?(:general)
21
+ end
22
+
23
+ def video?
24
+ stream?(:video)
25
+ end
26
+
27
+ def audio?
28
+ stream?(:audio)
29
+ end
30
+
31
+ def text?
32
+ stream?(:text)
33
+ end
34
+
35
+ def image?
36
+ stream?(:image)
37
+ end
38
+
39
+ def menu?
40
+ stream?(:menu)
41
+ end
42
+
43
+ def other?
44
+ stream?(:other)
45
+ end
46
+
47
+ def general
48
+ search_stream(:general)
49
+ end
50
+
51
+ def video
52
+ search_stream(:video)
53
+ end
54
+
55
+ def audio
56
+ search_stream(:audio)
57
+ end
58
+
59
+ def text
60
+ search_stream(:text)
61
+ end
62
+
63
+ def image
64
+ search_stream(:image)
65
+ end
66
+
67
+ def menu
68
+ search_stream(:menu)
69
+ end
70
+
71
+ def other
72
+ search_stream(:other)
73
+ end
74
+
75
+ private
76
+
77
+ def stream?(type)
78
+ streams.any? { |stream| stream.class::TYPE == type }
79
+ end
80
+
81
+ def search_stream(type)
82
+ streams.select { |stream| stream.class::TYPE == type }
83
+ end
84
+
85
+ def check_file(file_path)
86
+ raise ArgumentError, "#{file_path} does not exist or is not local file" unless File.exist?(file_path)
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,79 @@
1
+ require 'English'
2
+ require 'rexml/document'
3
+ require 'media_info/stream_factory'
4
+
5
+ module MediaInfo
6
+ class Parser
7
+ def self.call(file_path)
8
+ new(file_path).parse
9
+ end
10
+
11
+ attr_reader :file_path
12
+
13
+ def initialize(file_path)
14
+ @file_path = file_path
15
+
16
+ # check for MediaInfo CLI
17
+ raise StandardError, 'mediainfo command-line interface not installed' unless cli_available?
18
+ end
19
+
20
+ def parse
21
+ raw_xml_response = execute_command
22
+
23
+ raise "Execution of `#{command}` failed: #{raw_xml_response.inspect}" unless $CHILD_STATUS.success?
24
+
25
+ create_streams(raw_xml_response)
26
+ end
27
+
28
+ private
29
+
30
+ def command
31
+ "#{cli_path} '#{file_path}' --Full --Language=raw --BOM --Output=XML"
32
+ end
33
+
34
+ def execute_command
35
+ %x(echo `#{command} 2>&1`)
36
+ end
37
+
38
+ def cli_path
39
+ %x(echo `which mediainfo`).strip
40
+ end
41
+
42
+ def cli_available?
43
+ !cli_path.empty? && File.exist?(File.expand_path(cli_path))
44
+ end
45
+
46
+ def create_streams(raw_xml_response)
47
+ parse_xml_tracks(raw_xml_response).map do |track|
48
+ elements = make_elements_hash(
49
+ track.children.select { |child| child.is_a? REXML::Element }
50
+ )
51
+
52
+ StreamFactory.create(track.attributes['type'], elements)
53
+ end
54
+ end
55
+
56
+ def parse_xml_tracks(raw_xml)
57
+ REXML::Document.new(raw_xml).elements.to_a('/Mediainfo/File/track')
58
+ end
59
+
60
+ def make_elements_hash(children)
61
+ children.each_with_object({}) do |element, memo|
62
+ tag_name = convert_element_name(element.name).to_sym
63
+ memo[tag_name] = element.text.strip
64
+ end
65
+ end
66
+
67
+ # Convert MediaInfo attribute name to Ruby style
68
+ # eg: Image_Format_WithHint_List to image_format_with_hint_list
69
+ def convert_element_name(tag_name)
70
+ # add underscore between capital case
71
+ tag_name = tag_name.gsub(/(.)([A-Z])/, '\1_\2')
72
+ # replace several '_' following by a single one
73
+ tag_name = tag_name.gsub(/_+/, '_')
74
+ tag_name = tag_name.downcase
75
+
76
+ tag_name
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,109 @@
1
+ # Separate to Streams and Attributes defined in
2
+ # https://github.com/MediaArea/MediaInfoLib/blob/master/Source/MediaInfo/File__Analyse_Automatic.h
3
+
4
+ require 'time'
5
+
6
+ module MediaInfo
7
+ class Stream
8
+ attr_reader :count,
9
+ :status,
10
+ :stream_count,
11
+ :stream_kind,
12
+ :stream_kind_string,
13
+ :stream_kind_id,
14
+ :stream_kind_pos,
15
+ :stream_order,
16
+ :first_packet_order,
17
+ :inform,
18
+ :id,
19
+ :id_string,
20
+ :unique_id,
21
+ :unique_id_string,
22
+ :format,
23
+ :format_info,
24
+ :format_url,
25
+ :format_extensions,
26
+ :format_commercial,
27
+ :format_commercial_if_any,
28
+ :format_version,
29
+ :format_profile,
30
+ :format_compression,
31
+ :format_settings,
32
+ :internet_media_type,
33
+ :codec,
34
+ :codec_string,
35
+ :codec_extensions,
36
+ :codec_id,
37
+ :codec_id_string,
38
+ :codec_id_info,
39
+ :codec_id_hint,
40
+ :codec_id_url,
41
+ :codec_id_description,
42
+ :stream_size,
43
+ :stream_size_string,
44
+ :stream_size_string1,
45
+ :stream_size_string2,
46
+ :stream_size_string3,
47
+ :stream_size_string4,
48
+ :stream_size_string5,
49
+ :stream_size_proportion,
50
+ :_others
51
+
52
+ alias stream_id id
53
+
54
+ def initialize(params = {})
55
+ @_others = {}
56
+
57
+ params.each do |key, value|
58
+ unless respond_to?(key)
59
+ @_others.merge!(Hash[key, value])
60
+ next
61
+ end
62
+
63
+ if respond_to?("#{key}=", true)
64
+ send("#{key}=", value)
65
+ else
66
+ instance_variable_set("@#{key}", value)
67
+ end
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def count=(value)
74
+ @count = value.to_i
75
+ end
76
+
77
+ def stream_count=(value)
78
+ @stream_count = value.to_i
79
+ end
80
+
81
+ def stream_kind_id=(value)
82
+ @stream_kind_id = value.to_i
83
+ end
84
+
85
+ def first_packet_order=(value)
86
+ @first_packet_order = value.to_i
87
+ end
88
+
89
+ def format_extensions=(value)
90
+ @format_extensions = value.split(split_delimiter)
91
+ end
92
+
93
+ def codec_extensions=(value)
94
+ @codec_extensions = value.split(split_delimiter)
95
+ end
96
+
97
+ def stream_size=(value)
98
+ @stream_size = value.to_i
99
+ end
100
+
101
+ def stream_size_proportion=(value)
102
+ @stream_size_proportion = value.to_f
103
+ end
104
+
105
+ def split_delimiter
106
+ /[\s,']/
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,21 @@
1
+ require 'media_info/streams/audio'
2
+ require 'media_info/streams/video'
3
+ require 'media_info/streams/text'
4
+ require 'media_info/streams/image'
5
+ require 'media_info/streams/general'
6
+ require 'media_info/streams/menu'
7
+ require 'media_info/streams/other'
8
+
9
+ module MediaInfo
10
+ module StreamFactory
11
+ def self.create(stream_type, params)
12
+ raise ArgumentError, "Need a stream_type, received #{stream_type.inspect}" if stream_type.nil?
13
+
14
+ # we check that there is a subclass of stream for this stream
15
+ stream_class_name = "MediaInfo::#{stream_type}Stream"
16
+ raise "Bad stream type: #{stream_type.inspect}" unless Object.const_defined?(stream_class_name)
17
+
18
+ Object.const_get(stream_class_name).new(params)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,93 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class AudioStream < Stream
5
+ TYPE = :audio
6
+
7
+ attr_reader :duration,
8
+ :duration_string,
9
+ :duration_string1,
10
+ :duration_string2,
11
+ :duration_string3,
12
+ :duration_string4,
13
+ :duration_string5,
14
+ :bit_rate,
15
+ :bit_rate_string,
16
+ :bit_rate_mode,
17
+ :bit_rate_mode_string,
18
+ :bit_rate_minimum,
19
+ :bit_rate_minimum_string,
20
+ :bit_rate_nominal,
21
+ :bit_rate_nominal_string,
22
+ :bit_rate_maximum,
23
+ :bit_rate_maximum_string,
24
+ :channel_s,
25
+ :channel_s_string,
26
+ :channel_positions,
27
+ :channel_positions_string2,
28
+ :channel_layout,
29
+ :channel_layout_id,
30
+ :resolution,
31
+ :resolution_string,
32
+ :sampling_rate,
33
+ :sampling_rate_string,
34
+ :frame_count,
35
+ :compression_mode,
36
+ :compression_mode_string,
37
+ :encoded_date,
38
+ :tagged_date
39
+
40
+ alias channels channel_s
41
+ alias channels_string channel_s_string
42
+
43
+ def duration_seconds
44
+ duration / 1000.0
45
+ end
46
+
47
+ private
48
+
49
+ def duration=(value)
50
+ @duration = value.to_i
51
+ end
52
+
53
+ def bit_rate=(value)
54
+ @bit_rate = value.to_i
55
+ end
56
+
57
+ def bit_rate_minimum=(value)
58
+ @bit_rate_minimum = value.to_i
59
+ end
60
+
61
+ def bit_rate_nominal=(value)
62
+ @bit_rate_nominal = value.to_i
63
+ end
64
+
65
+ def bit_rate_maximum=(value)
66
+ @bit_rate_maximum = value.to_i
67
+ end
68
+
69
+ def channel_s=(value)
70
+ @channel_s = value.to_i
71
+ end
72
+
73
+ def resolution=(value)
74
+ @resolution = value.to_i
75
+ end
76
+
77
+ def sampling_rate=(value)
78
+ @sampling_rate = value.to_i
79
+ end
80
+
81
+ def frame_count=(value)
82
+ @frame_count = value.to_i
83
+ end
84
+
85
+ def encoded_date=(value)
86
+ @encoded_date = Time.parse(value)
87
+ end
88
+
89
+ def tagged_date=(value)
90
+ @encoded_date = Time.parse(value)
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,56 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class GeneralStream < Stream
5
+ TYPE = :general
6
+
7
+ attr_reader :file_size,
8
+ :file_size_string,
9
+ :file_size_string1,
10
+ :file_size_string2,
11
+ :file_size_string3,
12
+ :file_size_string4,
13
+ :file_created_date,
14
+ :file_created_date_local,
15
+ :file_modified_date,
16
+ :file_modified_date_local,
17
+ :file_name,
18
+ :file_extension,
19
+ :complete_name,
20
+ :complete_name_last,
21
+ :file_name_last,
22
+ :file_extension_last,
23
+ :folder_name,
24
+ :folder_name_last,
25
+ :header_size,
26
+ :data_size,
27
+ :footer_size,
28
+ :is_streamable
29
+
30
+ private
31
+
32
+ def file_size=(value)
33
+ @file_size = value.to_i
34
+ end
35
+
36
+ def file_created_date=(value)
37
+ @file_modified = Time.parse(value)
38
+ end
39
+
40
+ def file_modified_date=(value)
41
+ @file_modified = Time.parse(value)
42
+ end
43
+
44
+ def header_size=(value)
45
+ @header_size = value.to_i
46
+ end
47
+
48
+ def data_size=(value)
49
+ @data_size = value.to_i
50
+ end
51
+
52
+ def footer_size=(value)
53
+ @footer_size = value.to_i
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,38 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class ImageStream < Stream
5
+ TYPE = :image
6
+
7
+ attr_reader :width,
8
+ :width_string,
9
+ :height,
10
+ :height_string,
11
+ :color_space,
12
+ :chroma_subsampling,
13
+ :bit_depth,
14
+ :bit_depth_string,
15
+ :resolution,
16
+ :resolution_string,
17
+ :compression_mode,
18
+ :compression_mode_string
19
+
20
+ private
21
+
22
+ def width=(value)
23
+ @width = value.to_i
24
+ end
25
+
26
+ def height=(value)
27
+ @height = value.to_i
28
+ end
29
+
30
+ def bit_depth=(value)
31
+ @bit_depth = value.to_i
32
+ end
33
+
34
+ def resolution=(value)
35
+ @resolution = value.to_i
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,57 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class MenuStream < Stream
5
+ TYPE = :menu
6
+
7
+ attr_reader :menu_id,
8
+ :menu_id_string,
9
+ :duration,
10
+ :duration_string,
11
+ :duration_string1,
12
+ :duration_string2,
13
+ :duration_string3,
14
+ :duration_string4,
15
+ :duration_string5,
16
+ :duration_start,
17
+ :duration_end,
18
+ :delay,
19
+ :delay_string,
20
+ :delay_string1,
21
+ :delay_string2,
22
+ :delay_string3,
23
+ :delay_string4,
24
+ :delay_string5,
25
+ :delay_settings,
26
+ :delay_drop_frame,
27
+ :language,
28
+ :language_string,
29
+ :language_string1,
30
+ :language_string2,
31
+ :language_string3,
32
+ :language_string4,
33
+ :language_more
34
+
35
+ def duration_seconds
36
+ duration / 1000.0
37
+ end
38
+
39
+ def delay_seconds
40
+ delay / 1000.0
41
+ end
42
+
43
+ private
44
+
45
+ def menu_id=(value)
46
+ @menu_id = value.to_i
47
+ end
48
+
49
+ def duration=(value)
50
+ @duration = value.to_i
51
+ end
52
+
53
+ def delay=(value)
54
+ @delay = value.to_i
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,9 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class OtherStream < Stream
5
+ TYPE = :other
6
+
7
+ attr_reader :type
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class TextStream < Stream
5
+ TYPE = :text
6
+ end
7
+ end
@@ -0,0 +1,158 @@
1
+ require 'media_info/stream'
2
+
3
+ module MediaInfo
4
+ class VideoStream < Stream
5
+ TYPE = :video
6
+
7
+ attr_reader :duration,
8
+ :duration_string,
9
+ :duration_string1,
10
+ :duration_string2,
11
+ :duration_string3,
12
+ :duration_string4,
13
+ :duration_string5,
14
+ :bit_rate,
15
+ :bit_rate_string,
16
+ :bit_rate_mode,
17
+ :bit_rate_mode_string,
18
+ :bit_rate_minimum,
19
+ :bit_rate_minimum_string,
20
+ :bit_rate_nominal,
21
+ :bit_rate_nominal_string,
22
+ :bit_rate_maximum,
23
+ :bit_rate_maximum_string,
24
+ :bit_rate_encoded,
25
+ :bit_rate_encoded_string,
26
+ :width,
27
+ :width_string,
28
+ :height,
29
+ :height_string,
30
+ :pixel_aspect_ratio,
31
+ :pixel_aspect_ratio_string,
32
+ :resolution,
33
+ :resolution_string,
34
+ :display_aspect_ratio,
35
+ :display_aspect_ratio_string,
36
+ :rotation,
37
+ :rotation_string,
38
+ :frame_rate_mode,
39
+ :frame_rate_mode_string,
40
+ :frame_rate,
41
+ :frame_rate_string,
42
+ :frame_rate_minimum,
43
+ :frame_rate_minimum_string,
44
+ :frame_rate_nominal,
45
+ :frame_rate_nominal_string,
46
+ :frame_rate_maximum,
47
+ :frame_rate_maximum_string,
48
+ :frame_count,
49
+ :standard,
50
+ :color_space,
51
+ :colorimetry,
52
+ :chroma_subsampling,
53
+ :bit_depth,
54
+ :bit_depth_string,
55
+ :scan_type,
56
+ :scan_type_string,
57
+ :scan_order,
58
+ :scan_order_string,
59
+ :compression_mode,
60
+ :compression_mode_string,
61
+ :compression_ratio,
62
+ :bits_pixel_frame, # "Bits-(Pixel*Frame)"
63
+ :format_settings_bvop,
64
+ :format_settings_bvop_string,
65
+ :format_settings_qpel,
66
+ :format_settings_qpel_string,
67
+ :format_settings_gmc,
68
+ :format_settings_gmc_string,
69
+ :format_settings_matrix,
70
+ :format_settings_matrix_string,
71
+ :format_settings_cabac,
72
+ :format_settings_cabac_string,
73
+ :format_settings_ref_frames,
74
+ :format_settings_ref_frames_string,
75
+ :format_settings_pulldown,
76
+ :format_settings_pulldown_string,
77
+ :format_settings_frame_mode,
78
+ :format_settings_frame_mode_string,
79
+ :format_settings_gop,
80
+ :format_settings_gop_string,
81
+ :format_settings_wrapping,
82
+ :language,
83
+ :language_string,
84
+ :language_string1,
85
+ :language_string2,
86
+ :language_string3,
87
+ :language_string4,
88
+ :language_more,
89
+ :encoded_date,
90
+ :tagged_date
91
+
92
+ def duration_seconds
93
+ duration / 1000.0
94
+ end
95
+
96
+ private
97
+
98
+ def duration=(value)
99
+ @duration = value.to_i
100
+ end
101
+
102
+ def bit_rate=(value)
103
+ @bit_rate = value.to_i
104
+ end
105
+
106
+ def bit_rate_minimum=(value)
107
+ @bit_rate_minimum = value.to_i
108
+ end
109
+
110
+ def bit_rate_nominal=(value)
111
+ @bit_rate_nominal = value.to_i
112
+ end
113
+
114
+ def bit_rate_maximum=(value)
115
+ @bit_rate_maximum = value.to_i
116
+ end
117
+
118
+ def width=(value)
119
+ @width = value.to_i
120
+ end
121
+
122
+ def height=(value)
123
+ @height = value.to_i
124
+ end
125
+
126
+ def frame_rate=(value)
127
+ @frame_rate = value.to_i
128
+ end
129
+
130
+ def frame_rate_minimum=(value)
131
+ @frame_rate_minimum = value.to_i
132
+ end
133
+
134
+ def frame_rate_nominal=(value)
135
+ @frame_rate_nominal = value.to_i
136
+ end
137
+
138
+ def frame_rate_maximum=(value)
139
+ @frame_rate_maximum = value.to_i
140
+ end
141
+
142
+ def bit_depth=(value)
143
+ @bit_depth = value.to_i
144
+ end
145
+
146
+ def resolution=(value)
147
+ @resolution = value.to_i
148
+ end
149
+
150
+ def encoded_date=(value)
151
+ @encoded_date = Time.parse(value)
152
+ end
153
+
154
+ def tagged_date=(value)
155
+ @encoded_date = Time.parse(value)
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,10 @@
1
+ module MediaInfo
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 2
5
+ TINY = 0
6
+ PRE = nil
7
+
8
+ NUMBER = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: media_info
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Radovan Smitala
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: reek
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description:
98
+ email:
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - lib/media_info.rb
104
+ - lib/media_info/parser.rb
105
+ - lib/media_info/stream.rb
106
+ - lib/media_info/stream_factory.rb
107
+ - lib/media_info/streams/audio.rb
108
+ - lib/media_info/streams/general.rb
109
+ - lib/media_info/streams/image.rb
110
+ - lib/media_info/streams/menu.rb
111
+ - lib/media_info/streams/other.rb
112
+ - lib/media_info/streams/text.rb
113
+ - lib/media_info/streams/video.rb
114
+ - lib/media_info/version.rb
115
+ homepage: http://github.com/radeno/ruby-mediainfo-simple
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '2.0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements:
134
+ - mediainfo
135
+ rubyforge_project:
136
+ rubygems_version: 2.6.11
137
+ signing_key:
138
+ specification_version: 4
139
+ summary: A simple meta information about files with MediaInfo.
140
+ test_files: []