smart_ass 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 03ac31d6a1df96a33bb982c9606d5bc571c2c378
4
+ data.tar.gz: 6b629af238f02738dd2bcc5da651fe89faf48b84
5
+ SHA512:
6
+ metadata.gz: c62f50057fc6f6b3bfdf030a6f7511c7e4e4d0e2d745d515a8fef3152d997025b42440bb7e8631dc397e5922cf02d11fd7b26acfcee6cf1a7159a0905dd53f35
7
+ data.tar.gz: 139f5889b4507601c6acf28d8200afa20ae6bc5ca7666452e7c45ccf4598d25a83362a7b1c0132677e98c072d0ea266ba3bb83d7330b2ba86174a31154ce7f96
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0-p195
data/README.md CHANGED
@@ -34,9 +34,13 @@ Install the Ruby Gem:
34
34
 
35
35
  ## Usage
36
36
 
37
- This is really minimal. No options for now.
37
+ This is really minimal. To process mkvs:
38
38
 
39
- smart_ass path/to/movie.mkv
39
+ smart_ass --type mkv path/to/movie.mkv
40
+
41
+ To process .ass scripts:
42
+
43
+ smart_ass --type ass --suffix bt709 path/to/movie.mkv
40
44
 
41
45
  ## Contributing
42
46
 
data/bin/smart_ass CHANGED
@@ -3,11 +3,24 @@
3
3
  $:.unshift File.join(File.dirname(File.dirname(__FILE__)), 'lib')
4
4
 
5
5
  require 'smart_ass'
6
+ require 'optparse'
7
+ require 'ostruct'
6
8
 
7
- if arg = ARGV[0] then
8
- app = SmartAss::App.new(arg)
9
- app.run
10
- else
11
- puts "Please provide an input file"
12
- exit()
9
+ options = OpenStruct.new
10
+
11
+ parser = OptionParser.new do |opts|
12
+ opts.banner = "Usage: smart_ass [options] <file>"
13
+ opts.on('--type [TYPE]', SmartAss::InputFile.types,
14
+ 'Type of the file you are trying to process') do |type|
15
+ options.type = type
16
+ end
17
+
18
+ opts.on('--suffix [STRING]', 'String to append to output file name') do |s|
19
+ options.suffix = s
20
+ end
13
21
  end
22
+
23
+ parser.parse!
24
+
25
+ app = SmartAss::App.new(options, ARGV[0])
26
+ app.run
data/lib/smart_ass.rb CHANGED
@@ -2,7 +2,8 @@ require "smart_ass/version"
2
2
 
3
3
  module SmartAss
4
4
  autoload :App, 'smart_ass/app'
5
- autoload :Ass, 'smart_ass/ass'
5
+ autoload :MKV, 'smart_ass/mkv'
6
+ autoload :InputFile, 'smart_ass/input_file'
6
7
  autoload :BT601ColorMatrix, 'smart_ass/bt601_colormatrix'
7
8
  autoload :BT709ColorMatrix, 'smart_ass/bt709_colormatrix'
8
9
  autoload :RGBAColor, 'smart_ass/rgba_color'
data/lib/smart_ass/app.rb CHANGED
@@ -1,22 +1,35 @@
1
1
  class SmartAss::App
2
- def initialize(file)
3
- @ass = SmartAss::Ass.new(file)
4
- @file = Pathname.new(file)
2
+ def initialize(options, file)
3
+ if options.type == :ass and not options.suffix
4
+ raise "Please provide a suffix for the output file!"
5
+ end
6
+
7
+ @ass = SmartAss::InputFile.from_type(options.type, file)
8
+ @output_suffix = options.suffix
9
+ @file = Pathname.new(file)
5
10
  end
6
11
 
7
12
  def run
8
13
  # function composition baby!
9
- write_ass_script replace_colors extract track
14
+ write_ass_script replace_colors @ass.stream
10
15
  end
11
16
 
12
17
  private
13
18
  def write_ass_script(ass_script)
14
- script_file_basename = "#{@file.basename(@file.extname)}.ass"
15
- File.open(@file.expand_path.dirname + script_file_basename, "w") {|f|
19
+ File.open(@file.expand_path.dirname + output_file_basename, "w") {|f|
16
20
  f.puts(ass_script)
17
21
  }
18
22
  end
19
23
 
24
+ def output_file_basename
25
+ name = [
26
+ @file.basename(@file.extname),
27
+ @output_suffix
28
+ ].select{|a| a}.join('-')
29
+
30
+ "#{name}.ass"
31
+ end
32
+
20
33
  def replace_colors(ass_script)
21
34
  ass_script.gsub(/&H[\da-zA-Z]{6,8}/) {|c| convert_color(c)}
22
35
  end
@@ -41,27 +54,4 @@ class SmartAss::App
41
54
 
42
55
  @_colors_cache[c]
43
56
  end
44
-
45
- def track
46
- if @ass.tracks.size > 1
47
- track = ask_for_track
48
- elsif @ass.tracks.size == 1
49
- track = @ass.tracks[0]
50
- else
51
- puts "No ASS tracks found. Aborting."
52
- exit
53
- end
54
- end
55
-
56
- def ask_for_track
57
- puts "Please enter a track name - #{@ass.tracks.inspect}:"
58
- readline.to_i
59
- rescue
60
- puts "Invalid track provided. Try again."
61
- retry
62
- end
63
-
64
- def extract(track_id)
65
- @ass.extract(track_id)
66
- end
67
57
  end
@@ -0,0 +1,32 @@
1
+ require 'pathname'
2
+
3
+ class SmartAss::InputFile
4
+ attr_reader :file
5
+
6
+ def initialize(file)
7
+ @file = Pathname.new(file)
8
+ end
9
+
10
+ def stream
11
+ IO.read(@file)
12
+ end
13
+
14
+ def self.types
15
+ [:mkv, :ass]
16
+ end
17
+
18
+ def self.from_type(type, file)
19
+ klass(type).new(file)
20
+ end
21
+
22
+ def self.klass(kind)
23
+ case kind
24
+ when :mkv
25
+ SmartAss::MKV
26
+ when :ass
27
+ SmartAss::InputFile
28
+ else
29
+ raise "Unrecognized kind=#{kind}"
30
+ end
31
+ end
32
+ end
@@ -1,27 +1,41 @@
1
- require 'pathname'
2
-
3
- class SmartAss::Ass
4
- attr_reader :file
1
+ class SmartAss::MKV < SmartAss::InputFile
2
+ def stream
3
+ extract track
4
+ end
5
5
 
6
- def initialize(file)
7
- @file = Pathname.new(file)
6
+ def track
7
+ if tracks.size > 1
8
+ track = ask_for_track
9
+ elsif tracks.size == 1
10
+ track = tracks[0]
11
+ else
12
+ puts "No ASS tracks found. Aborting."
13
+ exit
14
+ end
8
15
  end
9
16
 
10
17
  def tracks
11
18
  identify.each_line \
12
19
  .map {|l| (l =~ identify_ass_regexp) ? $1 : nil } \
13
20
  .compact \
14
- .map &:to_i
21
+ .map(&:to_i)
22
+ end
23
+
24
+ private
25
+ def ask_for_track
26
+ puts "Please enter a track name - #{tracks.inspect}:"
27
+ readline.to_i
28
+ rescue
29
+ puts "Invalid track provided. Try again."
30
+ retry
15
31
  end
16
32
 
17
- # TODO: test this!
18
33
  def extract(track_id)
19
34
  puts `mkvextract tracks "#{expanded_file}" #{track_id}:#{export_temp_file}`
20
35
  IO.read(export_temp_file, :encoding => 'UTF-8') \
21
36
  .tap {|_| File.delete(export_temp_file) }
22
37
  end
23
38
 
24
- private
25
39
  def identify
26
40
  `mkvmerge -i "#{expanded_file}"`
27
41
  end
@@ -1,3 +1,3 @@
1
1
  module SmartAss
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,9 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- describe SmartAss::Ass do
3
+ describe SmartAss::MKV do
4
4
  subject {
5
5
  @file = "path/to/file/movie.mkv"
6
- SmartAss::Ass.new(@file)
6
+ SmartAss::MKV.new(@file)
7
7
  }
8
8
 
9
9
  it "holds onto a file" do
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_ass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Stefano Pigozzi
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-06 00:00:00.000000000 Z
11
+ date: 2013-06-27 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Utility for YCbCr ColorMatrix conversion of ASS Subtitles.
15
14
  email:
@@ -21,6 +20,7 @@ extra_rdoc_files: []
21
20
  files:
22
21
  - .gitignore
23
22
  - .rspec
23
+ - .ruby-version
24
24
  - Gemfile
25
25
  - LICENSE
26
26
  - README.md
@@ -28,50 +28,50 @@ files:
28
28
  - bin/smart_ass
29
29
  - lib/smart_ass.rb
30
30
  - lib/smart_ass/app.rb
31
- - lib/smart_ass/ass.rb
32
31
  - lib/smart_ass/bt601_colormatrix.rb
33
32
  - lib/smart_ass/bt709_colormatrix.rb
33
+ - lib/smart_ass/input_file.rb
34
+ - lib/smart_ass/mkv.rb
34
35
  - lib/smart_ass/rgba_color.rb
35
36
  - lib/smart_ass/version.rb
36
37
  - lib/smart_ass/ycbcr_colormatrix.rb
37
38
  - lib/smart_ass/ycbcr_converter.rb
38
39
  - smart_ass.gemspec
39
- - spec/ass_spec.rb
40
40
  - spec/fixtures/info_0
41
41
  - spec/fixtures/info_1_t_3
42
42
  - spec/fixtures/info_3_t_3_5_6
43
+ - spec/mkv_spec.rb
43
44
  - spec/rgba_color_spec.rb
44
45
  - spec/spec_helper.rb
45
46
  - spec/ycbcr_converter_spec.rb
46
47
  homepage: http://github.com/pigoz/smart_ass
47
48
  licenses: []
49
+ metadata: {}
48
50
  post_install_message:
49
51
  rdoc_options: []
50
52
  require_paths:
51
53
  - lib
52
54
  required_ruby_version: !ruby/object:Gem::Requirement
53
- none: false
54
55
  requirements:
55
- - - ! '>='
56
+ - - '>='
56
57
  - !ruby/object:Gem::Version
57
58
  version: '0'
58
59
  required_rubygems_version: !ruby/object:Gem::Requirement
59
- none: false
60
60
  requirements:
61
- - - ! '>='
61
+ - - '>='
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  requirements: []
65
65
  rubyforge_project:
66
- rubygems_version: 1.8.23
66
+ rubygems_version: 2.0.2
67
67
  signing_key:
68
- specification_version: 3
68
+ specification_version: 4
69
69
  summary: Utility for YCbCr ColorMatrix conversion of ASS Subtitles.
70
70
  test_files:
71
- - spec/ass_spec.rb
72
71
  - spec/fixtures/info_0
73
72
  - spec/fixtures/info_1_t_3
74
73
  - spec/fixtures/info_3_t_3_5_6
74
+ - spec/mkv_spec.rb
75
75
  - spec/rgba_color_spec.rb
76
76
  - spec/spec_helper.rb
77
77
  - spec/ycbcr_converter_spec.rb