encoder-tools 0.0.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -23
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -10
- data/Gemfile.lock +37 -83
- data/LICENSE +1 -1
- data/README.md +14 -0
- data/Rakefile +3 -43
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/encoder-tools.gemspec +28 -0
- data/lib/encoder-tools.rb +1 -0
- data/lib/encoder-tools/cli.rb +23 -12
- data/lib/encoder-tools/cli/subtitles.rb +1 -0
- data/lib/encoder-tools/cli/subtitles/base.rb +26 -3
- data/lib/encoder-tools/cli/subtitles/fix_lengths.rb +35 -21
- data/lib/encoder-tools/cli/subtitles/offset.rb +33 -12
- data/lib/encoder-tools/cli/subtitles/renumber.rb +3 -1
- data/lib/encoder-tools/cli/subtitles/spell_check.rb +73 -0
- data/lib/encoder-tools/subtitles/list.rb +5 -0
- data/lib/encoder-tools/subtitles/parser.rb +1 -1
- data/lib/encoder-tools/subtitles/subtitle.rb +9 -2
- data/lib/encoder-tools/util.rb +5 -0
- data/lib/encoder-tools/util/text_reader.rb +26 -0
- data/lib/encoder-tools/version.rb +3 -0
- metadata +95 -96
- data/README.rdoc +0 -17
- data/VERSION +0 -1
- data/spec/cli/subtitles/fix_lengths_spec.rb +0 -51
- data/spec/cli/subtitles/offset_spec.rb +0 -40
- data/spec/cli/subtitles/renumber_spec.rb +0 -23
- data/spec/fixtures/subtitles/adjusted-long-subtitles.srt +0 -16
- data/spec/fixtures/subtitles/bad-numbering-corrected.srt +0 -16
- data/spec/fixtures/subtitles/bad-numbering.srt +0 -16
- data/spec/fixtures/subtitles/kill-bill-vol-2.srt +0 -345
- data/spec/fixtures/subtitles/no-long-subtitles.srt +0 -16
- data/spec/fixtures/subtitles/short-example-offset-2.srt +0 -16
- data/spec/fixtures/subtitles/short-example-offset-minus-2.srt +0 -16
- data/spec/fixtures/subtitles/short-example-offset-plus-2.srt +0 -16
- data/spec/fixtures/subtitles/short-example.srt +0 -16
- data/spec/fixtures/subtitles/some-long-subtitles.srt +0 -16
- data/spec/options/title_spec.rb +0 -41
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -31
- data/spec/strategies/movie_spec.rb +0 -23
- data/spec/subtitles/list_spec.rb +0 -57
- data/spec/subtitles/subtitle_spec.rb +0 -31
@@ -1,16 +0,0 @@
|
|
1
|
-
1
|
2
|
-
00:45:16,000 --> 00:45:17,145
|
3
|
-
Master...
|
4
|
-
|
5
|
-
2
|
6
|
-
00:45:18,815 --> 00:45:20,440
|
7
|
-
Your Mandarin is lousy.
|
8
|
-
|
9
|
-
3
|
10
|
-
00:45:21,373 --> 00:45:22,681
|
11
|
-
It causes my ears discomfort.
|
12
|
-
|
13
|
-
4
|
14
|
-
00:45:22,748 --> 00:45:24,274
|
15
|
-
You bray like an ass!
|
16
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
1
|
2
|
-
00:00:02,000 --> 00:00:03,145
|
3
|
-
Master...
|
4
|
-
|
5
|
-
2
|
6
|
-
00:00:04,815 --> 00:00:06,440
|
7
|
-
Your Mandarin is lousy.
|
8
|
-
|
9
|
-
3
|
10
|
-
00:00:07,373 --> 00:00:08,681
|
11
|
-
It causes my ears discomfort.
|
12
|
-
|
13
|
-
4
|
14
|
-
00:00:08,748 --> 00:00:10,274
|
15
|
-
You bray like an ass!
|
16
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
1
|
2
|
-
00:45:14,000 --> 00:45:15,145
|
3
|
-
Master...
|
4
|
-
|
5
|
-
2
|
6
|
-
00:45:16,815 --> 00:45:18,440
|
7
|
-
Your Mandarin is lousy.
|
8
|
-
|
9
|
-
3
|
10
|
-
00:45:19,373 --> 00:45:20,681
|
11
|
-
It causes my ears discomfort.
|
12
|
-
|
13
|
-
4
|
14
|
-
00:45:20,748 --> 00:45:22,274
|
15
|
-
You bray like an ass!
|
16
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
1
|
2
|
-
00:45:18,000 --> 00:45:19,145
|
3
|
-
Master...
|
4
|
-
|
5
|
-
2
|
6
|
-
00:45:20,815 --> 00:45:22,440
|
7
|
-
Your Mandarin is lousy.
|
8
|
-
|
9
|
-
3
|
10
|
-
00:45:23,373 --> 00:45:24,681
|
11
|
-
It causes my ears discomfort.
|
12
|
-
|
13
|
-
4
|
14
|
-
00:45:24,748 --> 00:45:26,274
|
15
|
-
You bray like an ass!
|
16
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
1
|
2
|
-
00:45:16,000 --> 00:45:17,145
|
3
|
-
Master...
|
4
|
-
|
5
|
-
2
|
6
|
-
00:45:18,815 --> 00:45:20,440
|
7
|
-
Your Mandarin is lousy.
|
8
|
-
|
9
|
-
3
|
10
|
-
00:45:21,373 --> 00:45:22,681
|
11
|
-
It causes my ears discomfort.
|
12
|
-
|
13
|
-
4
|
14
|
-
00:45:22,748 --> 00:45:24,274
|
15
|
-
You bray like an ass!
|
16
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
1
|
2
|
-
00:45:16,000 --> 00:45:17,145
|
3
|
-
Master...
|
4
|
-
|
5
|
-
2
|
6
|
-
00:45:18,815 --> 00:45:20,440
|
7
|
-
Your Mandarin is lousy.
|
8
|
-
|
9
|
-
3
|
10
|
-
00:45:21,373 --> 01:45:22,681
|
11
|
-
It causes my ears discomfort.
|
12
|
-
|
13
|
-
4
|
14
|
-
01:45:22,748 --> 02:45:24,274
|
15
|
-
You bray like an ass!
|
16
|
-
|
data/spec/options/title_spec.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe EncoderTools::Options::Title do
|
4
|
-
subject { described_class.new(1) }
|
5
|
-
|
6
|
-
it "initializes with an integer as the title number" do
|
7
|
-
subject.number.should == 1
|
8
|
-
end
|
9
|
-
|
10
|
-
it "converts to Handbrake arguments" do
|
11
|
-
subject.to_args.should == %w[--title 1]
|
12
|
-
end
|
13
|
-
|
14
|
-
it "equals another Title with the same number" do
|
15
|
-
subject.should == described_class.new(1)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "does not equal another Title with a different number" do
|
19
|
-
subject.should_not == described_class.new(2)
|
20
|
-
end
|
21
|
-
|
22
|
-
describe EncoderTools::Options::Title::LONGEST do
|
23
|
-
subject { EncoderTools::Options::Title::LONGEST }
|
24
|
-
|
25
|
-
it "is a Title" do
|
26
|
-
subject.should be_a(EncoderTools::Options::Title)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "has no title number" do
|
30
|
-
subject.number.should == nil
|
31
|
-
end
|
32
|
-
|
33
|
-
it "converts to Handbrake arguments" do
|
34
|
-
subject.to_args.should == %w[--longest]
|
35
|
-
end
|
36
|
-
|
37
|
-
it "does not equal a Title with a specific number" do
|
38
|
-
subject.should_not == described_class.new(1)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'encoder-tools'
|
4
|
-
require 'spec'
|
5
|
-
require 'spec/autorun'
|
6
|
-
|
7
|
-
Spec::Runner.configure do |config|
|
8
|
-
def subtitle(range, text)
|
9
|
-
EncoderTools::Subtitles::Subtitle.new(range, text)
|
10
|
-
end
|
11
|
-
|
12
|
-
def subfile(name)
|
13
|
-
File.read(File.dirname(__FILE__) + "/fixtures/subtitles/#{name}.srt")
|
14
|
-
end
|
15
|
-
|
16
|
-
shared_examples_for 'a CLI command' do
|
17
|
-
attr_reader :input, :output, :options, :shell
|
18
|
-
|
19
|
-
before do
|
20
|
-
@input = StringIO.new
|
21
|
-
@output = StringIO.new
|
22
|
-
@options = {:input => @input, :output => @output}
|
23
|
-
end
|
24
|
-
|
25
|
-
def stub_shell!
|
26
|
-
@shell = stub('shell')
|
27
|
-
end
|
28
|
-
|
29
|
-
subject { described_class.new(@shell, @options) }
|
30
|
-
end
|
31
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe EncoderTools::Strategies::Movie do
|
4
|
-
subject { described_class.new("fixtures/Batman.dvdmedia") }
|
5
|
-
|
6
|
-
it "has an input_path attribute reader" do
|
7
|
-
subject.input_path.should == "fixtures/Batman.dvdmedia"
|
8
|
-
end
|
9
|
-
|
10
|
-
it "has a title attribute accessor defaulting to longest title" do
|
11
|
-
subject.title.should == EncoderTools::Options::Title::LONGEST
|
12
|
-
end
|
13
|
-
|
14
|
-
it "accepts a number as a title and converts it to a Title option" do
|
15
|
-
subject.title = 1
|
16
|
-
subject.title.should == EncoderTools::Options::Title.new(1)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "raises when setting an invalid title" do
|
20
|
-
lambda { subject.title = 'foo' }.
|
21
|
-
should raise_error(ArgumentError, %{expected an EncoderTools::Options::Title or Fixnum, got "foo"})
|
22
|
-
end
|
23
|
-
end
|
data/spec/subtitles/list_spec.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe EncoderTools::Subtitles::List do
|
4
|
-
before :all do
|
5
|
-
@kill_bill = subfile('kill-bill-vol-2')
|
6
|
-
@first_sub = subtitle(2716..2717.145, "Master...")
|
7
|
-
@last_sub = subtitle(4518..4520.300, "I - give - you - my - word...")
|
8
|
-
end
|
9
|
-
|
10
|
-
it "can load subtitles from a string" do
|
11
|
-
list = described_class.load(@kill_bill).entries
|
12
|
-
list.first.should == @first_sub
|
13
|
-
list.last.should == @last_sub
|
14
|
-
end
|
15
|
-
|
16
|
-
it "loads all the subtitles" do
|
17
|
-
described_class.load(@kill_bill).should have(81).entries
|
18
|
-
end
|
19
|
-
|
20
|
-
it "has offset equal to the offset of the first subtitle" do
|
21
|
-
described_class.load(@kill_bill).offset.should == 2716
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with no subtitles" do
|
25
|
-
subject { described_class.load("") }
|
26
|
-
|
27
|
-
it "has offset 0" do
|
28
|
-
subject.offset.should == 0
|
29
|
-
end
|
30
|
-
|
31
|
-
it "ignores setting the offset" do
|
32
|
-
lambda { subject.offset += 2 }.
|
33
|
-
should_not change { subject.offset }.from(0)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
it "allows adjusting the offsets of all subtitles by setting an offset" do
|
38
|
-
list = described_class.load(@kill_bill)
|
39
|
-
list.offset += 1
|
40
|
-
list.entries.first.should == subtitle(2717..2718.145, "Master...")
|
41
|
-
list.entries.last.should == subtitle(4519..4521.300, "I - give - you - my - word...")
|
42
|
-
end
|
43
|
-
|
44
|
-
it "represents itself as a string suitable for use in a subtitle file" do
|
45
|
-
subject.entries = [subtitle(0..1, "Hello World"), subtitle(1..2, "It's good to see you")]
|
46
|
-
subject.to_s.should == <<-EOS
|
47
|
-
1
|
48
|
-
00:00:00,000 --> 00:00:01,000
|
49
|
-
Hello World
|
50
|
-
|
51
|
-
2
|
52
|
-
00:00:01,000 --> 00:00:02,000
|
53
|
-
It's good to see you
|
54
|
-
|
55
|
-
EOS
|
56
|
-
end
|
57
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe EncoderTools::Subtitles::Subtitle do
|
4
|
-
subject { described_class.new(1.5..2, "Hello World") }
|
5
|
-
|
6
|
-
it "has a range" do
|
7
|
-
subject.range.should == (1.5..2)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "has text" do
|
11
|
-
subject.text.should == "Hello World"
|
12
|
-
end
|
13
|
-
|
14
|
-
it "has offset equal to the start of the range" do
|
15
|
-
subject.offset.should == 1.5
|
16
|
-
end
|
17
|
-
|
18
|
-
it "allows adjusting the range by setting the offset" do
|
19
|
-
subject.offset = 2
|
20
|
-
subject.range.should == (2..2.5)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "represents itself as a string with the timestamp range and text" do
|
24
|
-
subject.to_s.should == %{00:00:01,500 --> 00:00:02,000\nHello World}
|
25
|
-
end
|
26
|
-
|
27
|
-
it "allows adjusting the end of the range by setting the duration" do
|
28
|
-
subject.duration = 2
|
29
|
-
subject.range.should == (1.5..3.5)
|
30
|
-
end
|
31
|
-
end
|