webvtt-ruby 0.2.4 → 0.2.5
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 +4 -4
- data/README.md +8 -8
- data/bin/webvtt-segmenter +1 -1
- data/lib/parser.rb +2 -2
- data/lib/segmenter.rb +1 -1
- data/tests/parser.rb +19 -19
- data/tests/segmenter.rb +6 -6
- data/tests/subtitles/{big_srt.webvtt → big_srt.vtt} +0 -0
- data/tests/subtitles/{no_text.webvtt → no_text.vtt} +0 -0
- data/tests/subtitles/{notvalid.webvtt → notvalid.vtt} +0 -0
- data/tests/subtitles/{test.webvtt → test.vtt} +0 -0
- data/tests/subtitles/{test_from_srt.webvtt → test_from_srt.vtt} +0 -0
- data/tests/subtitles/{withnote.webvtt → withnote.vtt} +0 -0
- data/webvtt-ruby.gemspecs +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a60d420e7d42cd04d58877cc991c712883b43bd0
|
4
|
+
data.tar.gz: 229298792a3155b95e55bf367ceecff6777d5a9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e1664360e303747834f789fe24b7cc23b52ce833ee68f258be9e552ea256196400de0cd6a8631dabae4de812878af1724d52a2dbe3be1798c5f7e3260b4fef6
|
7
|
+
data.tar.gz: 00eacc64841a13c34832de3d869980883c3598084260f3917211aa70a955b5cd9803c5cf637e210356f5f206f9b61247c89de06079a4799530ab10235bce2d03
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ To parse a webvtt file:
|
|
23
23
|
```ruby
|
24
24
|
require "webvtt"
|
25
25
|
|
26
|
-
webvtt = WebVTT.read("path/sub.
|
26
|
+
webvtt = WebVTT.read("path/sub.vtt")
|
27
27
|
webvtt.cues.each do |cue|
|
28
28
|
puts "identifier: #{cue.identifier}"
|
29
29
|
puts "Start: #{cue.start}"
|
@@ -39,7 +39,7 @@ end
|
|
39
39
|
You can also convert an SRT file to a standard WebVTT file:
|
40
40
|
|
41
41
|
```ruby
|
42
|
-
webvtt = WebVTT.convert_from_srt("path/sub.srt", "path/sub.
|
42
|
+
webvtt = WebVTT.convert_from_srt("path/sub.srt", "path/sub.vtt")
|
43
43
|
puts webvtt.to_webvtt
|
44
44
|
```
|
45
45
|
|
@@ -48,7 +48,7 @@ puts webvtt.to_webvtt
|
|
48
48
|
Segmenting is required to work with HLS videos.
|
49
49
|
|
50
50
|
```ruby
|
51
|
-
WebVTT.segment("subtitles/en.
|
51
|
+
WebVTT.segment("subtitles/en.vtt", :length => 10, :output => "subtitles/en-%05d.vtt", :playlist => "subtitles/en.m3u8")
|
52
52
|
```
|
53
53
|
|
54
54
|
It will also generate the playlist in `m3u8`:
|
@@ -60,11 +60,11 @@ It will also generate the playlist in `m3u8`:
|
|
60
60
|
#EXT-X-MEDIA-SEQUENCE:0
|
61
61
|
#EXT-X-PLAYLIST-TYPE:VOD
|
62
62
|
#EXTINF:13,
|
63
|
-
en-00000.
|
63
|
+
en-00000.vtt
|
64
64
|
#EXTINF:17,
|
65
|
-
en-00001.
|
65
|
+
en-00001.vtt
|
66
66
|
#EXTINF:12,
|
67
|
-
en-00002.
|
67
|
+
en-00002.vtt
|
68
68
|
#EXT-X-ENDLIST
|
69
69
|
```
|
70
70
|
|
@@ -87,7 +87,7 @@ demo-600000.m3u8
|
|
87
87
|
You can also segment webvtt files using the command line `webvtt-segmenter`:
|
88
88
|
|
89
89
|
```
|
90
|
-
$ webvtt-segmenter -i subtitles/en.
|
90
|
+
$ webvtt-segmenter -i subtitles/en.vtt -t 10 -m subtitles/en.m3u8 -o "subtitles/en-%05d.vtt"
|
91
91
|
```
|
92
92
|
|
93
93
|
```
|
@@ -96,7 +96,7 @@ Usage: bin/webvtt-segmenter [--arg]
|
|
96
96
|
-i, --input [PATH] WebVTT or SRT file
|
97
97
|
-b, --base-url [URL] Base URL
|
98
98
|
-t, --target-duration [DUR] Duration of each segments. Default: 10
|
99
|
-
-o, --output [PATH] Path where WebVTT segments will be saved. Default: fileSequence-%05d.
|
99
|
+
-o, --output [PATH] Path where WebVTT segments will be saved. Default: fileSequence-%05d.vtt
|
100
100
|
-m, --playlist [PATH] Path where the playlist in m3u8 will be saved. Default: prog_index.m3u8
|
101
101
|
```
|
102
102
|
|
data/bin/webvtt-segmenter
CHANGED
@@ -20,7 +20,7 @@ opts = OptionParser.new do |opts|
|
|
20
20
|
@options[:length] = dur.to_i
|
21
21
|
end
|
22
22
|
|
23
|
-
opts.on("-o", "--output [PATH]", "Path where WebVTT segments will be saved. Default: fileSequence-%05d.
|
23
|
+
opts.on("-o", "--output [PATH]", "Path where WebVTT segments will be saved. Default: fileSequence-%05d.vtt") do |path|
|
24
24
|
@options[:output] = path
|
25
25
|
end
|
26
26
|
|
data/lib/parser.rb
CHANGED
@@ -10,7 +10,7 @@ module WebVTT
|
|
10
10
|
end
|
11
11
|
|
12
12
|
srt = ::File.read(srt_file)
|
13
|
-
output ||= srt_file.gsub(".srt", ".
|
13
|
+
output ||= srt_file.gsub(".srt", ".vtt")
|
14
14
|
|
15
15
|
# convert timestamps and save the file
|
16
16
|
srt.gsub!(/([0-9]{2}:[0-9]{2}:[0-9]{2})([,])([0-9]{3})/, '\1.\3')
|
@@ -51,7 +51,7 @@ module WebVTT
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def save(output=nil)
|
54
|
-
output ||= @path.gsub(".srt", ".
|
54
|
+
output ||= @path.gsub(".srt", ".vtt")
|
55
55
|
|
56
56
|
File.open(output, "w") {|f| f.write(to_webvtt)}
|
57
57
|
return output
|
data/lib/segmenter.rb
CHANGED
data/tests/parser.rb
CHANGED
@@ -5,31 +5,31 @@ require "webvtt"
|
|
5
5
|
class ParserTest < Test::Unit::TestCase
|
6
6
|
def test_can_read_webvtt
|
7
7
|
assert_nothing_raised(WebVTT::InputError) {
|
8
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
9
|
-
assert_equal "test.
|
8
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
9
|
+
assert_equal "test.vtt", webvtt.filename
|
10
10
|
}
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_cant_read_webvtt
|
14
14
|
assert_raise(WebVTT::InputError) {
|
15
|
-
webvtt = WebVTT.read("tests/subtitles/test_.
|
15
|
+
webvtt = WebVTT.read("tests/subtitles/test_.vtt")
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_is_valid_webvtt
|
20
20
|
assert_nothing_raised(WebVTT::MalformedFile) {
|
21
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
21
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
22
22
|
}
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_is_not_valid_webvtt
|
26
26
|
assert_raise(WebVTT::MalformedFile) {
|
27
|
-
webvtt = WebVTT.read("tests/subtitles/notvalid.
|
27
|
+
webvtt = WebVTT.read("tests/subtitles/notvalid.vtt")
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_list_cues
|
32
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
32
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
33
33
|
assert_instance_of Array, webvtt.cues
|
34
34
|
assert !webvtt.cues.empty?, "Cues should not be empty"
|
35
35
|
assert_instance_of WebVTT::Cue, webvtt.cues[0]
|
@@ -37,12 +37,12 @@ class ParserTest < Test::Unit::TestCase
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_header
|
40
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
40
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
41
41
|
assert_equal "WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000", webvtt.header
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_cue
|
45
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
45
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
46
46
|
cue = webvtt.cues[0]
|
47
47
|
assert_equal "00:00:29.000", cue.start
|
48
48
|
assert_equal "00:00:31.000", cue.end
|
@@ -52,7 +52,7 @@ class ParserTest < Test::Unit::TestCase
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def test_cue_identifier
|
55
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
55
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
56
56
|
cue = webvtt.cues[1]
|
57
57
|
assert_equal "2", cue.identifier
|
58
58
|
assert_equal "00:00:31.000", cue.start
|
@@ -63,7 +63,7 @@ class ParserTest < Test::Unit::TestCase
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_ignore_if_note
|
66
|
-
webvtt = WebVTT.read("tests/subtitles/withnote.
|
66
|
+
webvtt = WebVTT.read("tests/subtitles/withnote.vtt")
|
67
67
|
assert_equal 3, webvtt.cues.size
|
68
68
|
# ignoring the first cue which is a NOTE
|
69
69
|
assert_equal "1", webvtt.cues[0].identifier
|
@@ -76,22 +76,22 @@ class ParserTest < Test::Unit::TestCase
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def test_total_length
|
79
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
79
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
80
80
|
assert_equal 359, webvtt.total_length
|
81
81
|
end
|
82
82
|
|
83
83
|
def test_cue_length
|
84
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
84
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
85
85
|
assert_equal 2.0, webvtt.cues[2].length
|
86
86
|
end
|
87
87
|
|
88
88
|
def test_file_to_webvtt
|
89
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
90
|
-
assert_equal webvtt.to_webvtt, File.read("tests/subtitles/test.
|
89
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
90
|
+
assert_equal webvtt.to_webvtt, File.read("tests/subtitles/test.vtt")
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_cue_to_webvtt
|
94
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
94
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
95
95
|
assert_equal webvtt.cues[0].to_webvtt, %(00:00:29.000 --> 00:00:31.000 line:75%
|
96
96
|
English subtitle 15 -Forced- (00:00:27.000)
|
97
97
|
line:75%)
|
@@ -102,7 +102,7 @@ align:start line:0%)
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def test_updating_webvtt
|
105
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
105
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
106
106
|
cue = webvtt.cues[0]
|
107
107
|
cue.identifier = "1"
|
108
108
|
cue.text = "The text should change"
|
@@ -120,7 +120,7 @@ The text should change)
|
|
120
120
|
|
121
121
|
def test_reading_all_cues
|
122
122
|
return
|
123
|
-
webvtt = WebVTT.read("tests/subtitles/withnote.
|
123
|
+
webvtt = WebVTT.read("tests/subtitles/withnote.vtt")
|
124
124
|
webvtt.cues.each_with_index do |cue,i|
|
125
125
|
puts "#{i}"
|
126
126
|
puts "identifier: #{cue.identifier}"
|
@@ -139,7 +139,7 @@ The text should change)
|
|
139
139
|
|
140
140
|
def test_parse_big_file
|
141
141
|
return
|
142
|
-
webvtt = WebVTT.read("tests/subtitles/big_srt.
|
142
|
+
webvtt = WebVTT.read("tests/subtitles/big_srt.vtt")
|
143
143
|
webvtt.cues.each_with_index do |cue,i|
|
144
144
|
puts "*#{i}"
|
145
145
|
puts "identifier: #{cue.identifier}"
|
@@ -151,7 +151,7 @@ The text should change)
|
|
151
151
|
end
|
152
152
|
|
153
153
|
def test_parse_cue_with_no_text
|
154
|
-
webvtt = WebVTT.read("tests/subtitles/no_text.
|
154
|
+
webvtt = WebVTT.read("tests/subtitles/no_text.vtt")
|
155
155
|
assert_equal 2, webvtt.cues.size
|
156
156
|
assert_equal "265", webvtt.cues[0].identifier
|
157
157
|
assert_equal "00:08:57.409", webvtt.cues[0].start
|
data/tests/segmenter.rb
CHANGED
@@ -6,7 +6,7 @@ require "fileutils"
|
|
6
6
|
class ParserTest < Test::Unit::TestCase
|
7
7
|
|
8
8
|
def test_segment_of_a_given_cue
|
9
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
9
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
10
10
|
segmenter = WebVTT::Segmenter.new(webvtt, :length => 5)
|
11
11
|
assert_equal [5, 6], segmenter.find_segments(webvtt.cues[0])
|
12
12
|
assert_equal [6], segmenter.find_segments(webvtt.cues[1])
|
@@ -17,7 +17,7 @@ class ParserTest < Test::Unit::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_segment_file_of_a_given_cue
|
20
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
20
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
21
21
|
segmenter = WebVTT::Segmenter.new(webvtt, :length => 5)
|
22
22
|
assert_equal [0, 1], segmenter.find_segment_files(webvtt.cues[0])
|
23
23
|
assert_equal [1], segmenter.find_segment_files(webvtt.cues[1])
|
@@ -28,7 +28,7 @@ class ParserTest < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_split_to_files
|
31
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
31
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
32
32
|
sub_webvtt_files = WebVTT::Segmenter.new(webvtt, :length => 5).split_to_files
|
33
33
|
assert_equal 68, sub_webvtt_files.size
|
34
34
|
assert_equal 31, sub_webvtt_files[0].total_length
|
@@ -38,7 +38,7 @@ class ParserTest < Test::Unit::TestCase
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_generate_playlist
|
41
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
41
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
42
42
|
segmenter = WebVTT::Segmenter.new(webvtt, :length => 5, :playlist => "test.m3u8")
|
43
43
|
subs = segmenter.split_to_files
|
44
44
|
segmenter.generate_playlist(subs)
|
@@ -50,7 +50,7 @@ class ParserTest < Test::Unit::TestCase
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_shortcut_method
|
53
|
-
res = WebVTT.segment("tests/subtitles/test.
|
53
|
+
res = WebVTT.segment("tests/subtitles/test.vtt")
|
54
54
|
assert_instance_of Array, res
|
55
55
|
assert_equal 2, res.size
|
56
56
|
assert_equal 35, res[1].size
|
@@ -61,7 +61,7 @@ class ParserTest < Test::Unit::TestCase
|
|
61
61
|
|
62
62
|
def test_segment_to_webvtt_files
|
63
63
|
return
|
64
|
-
webvtt = WebVTT.read("tests/subtitles/test.
|
64
|
+
webvtt = WebVTT.read("tests/subtitles/test.vtt")
|
65
65
|
sub_webvtt_files = WebVTT::Segmenter.new(webvtt, :length => 5).split
|
66
66
|
assert_equal 67, sub_webvtt_files.size
|
67
67
|
puts
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/webvtt-ruby.gemspecs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'webvtt-ruby'
|
3
|
-
s.version = '0.2.
|
3
|
+
s.version = '0.2.5'
|
4
4
|
s.summary = "WebVTT parser and segmenter in ruby"
|
5
5
|
s.description = "WebVTT parser and segmenter in ruby for HTML5 and HTTP Live Streaming (HLS)."
|
6
6
|
s.authors = ["Bruno Celeste"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webvtt-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno Celeste
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: WebVTT parser and segmenter in ruby for HTML5 and HTTP Live Streaming
|
14
14
|
(HLS).
|
@@ -29,13 +29,13 @@ files:
|
|
29
29
|
- tests/parser.rb
|
30
30
|
- tests/segmenter.rb
|
31
31
|
- tests/subtitles/big_srt.srt
|
32
|
-
- tests/subtitles/big_srt.
|
33
|
-
- tests/subtitles/no_text.
|
34
|
-
- tests/subtitles/notvalid.
|
35
|
-
- tests/subtitles/test.
|
32
|
+
- tests/subtitles/big_srt.vtt
|
33
|
+
- tests/subtitles/no_text.vtt
|
34
|
+
- tests/subtitles/notvalid.vtt
|
35
|
+
- tests/subtitles/test.vtt
|
36
36
|
- tests/subtitles/test_from_srt.srt
|
37
|
-
- tests/subtitles/test_from_srt.
|
38
|
-
- tests/subtitles/withnote.
|
37
|
+
- tests/subtitles/test_from_srt.vtt
|
38
|
+
- tests/subtitles/withnote.vtt
|
39
39
|
- webvtt-ruby.gemspecs
|
40
40
|
homepage: https://github.com/HeyWatch/webvtt-ruby
|
41
41
|
licenses:
|
@@ -57,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
57
|
version: '0'
|
58
58
|
requirements: []
|
59
59
|
rubyforge_project:
|
60
|
-
rubygems_version: 2.
|
60
|
+
rubygems_version: 2.4.3
|
61
61
|
signing_key:
|
62
62
|
specification_version: 4
|
63
63
|
summary: WebVTT parser and segmenter in ruby
|