vidibus-fileinfo 0.2.0 → 0.3.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/README.md +6 -4
- data/lib/vidibus/fileinfo/processor/video.rb +56 -6
- data/lib/vidibus/fileinfo/version.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -51,7 +51,7 @@ For images, a hash with following data will be returned:
|
|
51
51
|
:height # height of image
|
52
52
|
:size # file size in bytes
|
53
53
|
:bit # depth in bit
|
54
|
-
:content_type # content type of image, e.g. "jpeg"
|
54
|
+
:content_type # content type of image, e.g. "image/jpeg"
|
55
55
|
:orientation # visual position e.g. 6 (right top). See "Exif orientation" for more
|
56
56
|
:quality # quality of image
|
57
57
|
```
|
@@ -67,10 +67,12 @@ jpg, jpeg, png, gif
|
|
67
67
|
For videos, a different hash will be returned:
|
68
68
|
|
69
69
|
``` ruby
|
70
|
-
:width # width of video
|
70
|
+
:width # width of video (without anamorphosis)
|
71
71
|
:height # height of video
|
72
|
+
:aspect_ratio # aspect ratio of video on display (DAR)
|
72
73
|
:size # file size in bytes
|
73
74
|
:duration # duration of video in seconds
|
75
|
+
:content_type # content type of video, e.g. "video/mp4"
|
74
76
|
:fps # frames per second
|
75
77
|
:bitrate # overall bit rate (video + audio)
|
76
78
|
:video_codec # codec of video stream, e.g. "h264"
|
@@ -81,9 +83,9 @@ For videos, a different hash will be returned:
|
|
81
83
|
These video formats are currently supported:
|
82
84
|
|
83
85
|
```
|
84
|
-
avi, flv,
|
86
|
+
3g2, 3gp, asf, avi, dv, f4p, f4v, flv, ivf, m21, mj2, mjpg, mkv, mov, mp4, mpeg, mpg, mxf, ogg, ogv, rm, ts, webm, wmv
|
85
87
|
```
|
86
88
|
|
87
89
|
## Copyright
|
88
90
|
|
89
|
-
Copyright (c) 2011 Andre Pankratz. See LICENSE for details.
|
91
|
+
Copyright (c) 2011-2012 Andre Pankratz. See LICENSE for details.
|
@@ -2,8 +2,14 @@ module Vidibus
|
|
2
2
|
module Fileinfo
|
3
3
|
module Processor
|
4
4
|
module Video
|
5
|
-
FORMATS = %w[
|
6
|
-
|
5
|
+
FORMATS = %w[
|
6
|
+
3g2 3gp asf avi dv f4p f4v flv ivf m21 mj2 mjpg mkv mov mp4 mpeg mpg
|
7
|
+
mxf ogg ogv rm ts webm wmv
|
8
|
+
]
|
9
|
+
METADATA = %w[
|
10
|
+
aspect_ratio audio_codec audio_sample_rate content_type bit_rate bitrate
|
11
|
+
duration fps frame_rate height size video_codec width
|
12
|
+
]
|
7
13
|
|
8
14
|
# FFmpeg command
|
9
15
|
def cmd
|
@@ -30,16 +36,51 @@ module Vidibus
|
|
30
36
|
end
|
31
37
|
end
|
32
38
|
|
33
|
-
|
39
|
+
# Return the bit rate defined as "bitrate". Calculate it from
|
40
|
+
# file size and duration otherwise.
|
41
|
+
def bit_rate
|
34
42
|
if match = @raw_metadata[/bitrate:\s(\d+)\skb\/s/, 1]
|
35
43
|
match.to_i
|
44
|
+
elsif duration && duration > 0
|
45
|
+
(size.to_f/125/duration).round # /125 = /1000 (kB) *8 (bit)
|
36
46
|
end
|
37
47
|
end
|
48
|
+
alias :bitrate :bit_rate
|
38
49
|
|
39
50
|
def content_type
|
40
51
|
super('video')
|
41
52
|
end
|
42
53
|
|
54
|
+
# Return display aspect ratio defined as DAR.
|
55
|
+
# If no value is defined, calculate it from dimensions.
|
56
|
+
# If no dimensions are given, nothing is returned.
|
57
|
+
def aspect_ratio
|
58
|
+
if matches = @raw_metadata.match(/DAR\s+([0-9]+):([0-9]+)/)
|
59
|
+
w = $1.to_f
|
60
|
+
h = $2.to_f
|
61
|
+
elsif dimension
|
62
|
+
w = dimension[0].to_f
|
63
|
+
h = dimension[1].to_f
|
64
|
+
end
|
65
|
+
if w && h && w > 0 && h > 0
|
66
|
+
w/h
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Return pixel aspect ratio defined as PAR.
|
71
|
+
# If no value is defined, 1.0 will be returned.
|
72
|
+
def pixel_aspect_ratio
|
73
|
+
ar = 1.0
|
74
|
+
if matches = @raw_metadata.match(/PAR\s+([0-9]+):([0-9]+)/)
|
75
|
+
w = $1.to_f
|
76
|
+
h = $2.to_f
|
77
|
+
if w > 0 && h > 0
|
78
|
+
ar = w/h
|
79
|
+
end
|
80
|
+
end
|
81
|
+
ar
|
82
|
+
end
|
83
|
+
|
43
84
|
def duration
|
44
85
|
if match = @raw_metadata[/Duration:\s+([0-9\:\.]+),/, 1]
|
45
86
|
units = match.split(":").map(&:to_f)
|
@@ -48,25 +89,34 @@ module Vidibus
|
|
48
89
|
end
|
49
90
|
end
|
50
91
|
|
51
|
-
def
|
92
|
+
def frame_rate
|
52
93
|
match = @raw_metadata[/([\d\.]+)\s+fps,/, 1]
|
53
94
|
match ||= @raw_metadata[/([\d\.]+)\s+tbr,/, 1]
|
54
95
|
if match
|
55
96
|
match.to_f
|
56
97
|
end
|
57
98
|
end
|
99
|
+
alias :fps :frame_rate
|
58
100
|
|
59
101
|
def height
|
60
102
|
dimension[1] if dimension
|
61
103
|
end
|
62
104
|
|
105
|
+
# Return height from dimensions and apply
|
106
|
+
# pixel aspect ratio.
|
63
107
|
def width
|
64
|
-
|
108
|
+
if dimension
|
109
|
+
w = dimension[0]
|
110
|
+
if pixel_aspect_ratio != 1
|
111
|
+
return (w * pixel_aspect_ratio).round
|
112
|
+
end
|
113
|
+
w
|
114
|
+
end
|
65
115
|
end
|
66
116
|
|
67
117
|
def dimension
|
68
118
|
if match = @raw_metadata[/^.*Video:.*?,.*?(\d+x\d+)/, 1]
|
69
|
-
match.strip.split(
|
119
|
+
match.strip.split('x').map(&:to_i)
|
70
120
|
end
|
71
121
|
end
|
72
122
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vidibus-fileinfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andre Pankratz
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-04-12 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|