vtt2ass 0.2.14 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59af90e625fca8d57a1427d6b520854830536816a2d8c9d4e3bad15a8f5c229f
4
- data.tar.gz: 32211cb9f63bb2de48114d071cf04e625e62892750a17143a505f8a2e62a8346
3
+ metadata.gz: 725876fe775e13997b8bfea4f1f8d1bd87fe18420c4adfabebc7aa6eced12464
4
+ data.tar.gz: 13ebdd5f0542f75a9a886e028afb3f93621e68c6b61304d8976320d804d447f8
5
5
  SHA512:
6
- metadata.gz: c3a3c9897a10163f7a9decfd84eef040a12700d031c2ecccfcebecabea794e5e80fb885e6e747e78b8bce69cf35f4c34248d3e90fc79d6b3d4d961b905d27447
7
- data.tar.gz: bb112d38d09029baf95cc48baace9a58bfff70f00c4a391bf5bd5dbf4cfae12f0a3b232f308ed70fa3bf15b4e965486616643ca620f205013cfa5a874d813abc
6
+ metadata.gz: 1656502fd7ff8f0b180a8826d593d763e855641e780b70f3e9f320a05c385c5ebfca97b5f037f87bacadabbbe86c35f9718fb6e9a5dd828bd3d9c7b2ede3ac37
7
+ data.tar.gz: a6099e227e52f45783a9462b3041b272bbe01ff76c87f10c44508df3711a61559865dd180f06ea38c02b2db245a6a9ed48732626e8ef4dd95b664d1f3177ac8f
data/.gitignore CHANGED
@@ -9,4 +9,8 @@ Gemfile.lock
9
9
 
10
10
  # Input and output folders
11
11
  input/
12
- output/
12
+ output/
13
+
14
+ # Subtitle files
15
+ /*.vtt
16
+ /*.ass
data/README.md CHANGED
@@ -42,6 +42,7 @@ Options:
42
42
  # Default: 52
43
43
  -f, [--font-family=FONT_FAMILY] # Specify a font family for the subtitles
44
44
  # Default: Open Sans Semibold
45
+ -c, [--css=CSS] # Specify a CSS file path for Hidive subs
45
46
  -q, [--quiet], [--no-quiet] # Don't output to the console
46
47
 
47
48
  Run the VTT to ASS conversion for the specified file(s)
@@ -1,6 +1,8 @@
1
1
  # Relative imports
2
2
  require_relative 'ASSLine'
3
3
  require_relative 'ASSStyle'
4
+ require_relative 'CSSFile'
5
+ require_relative 'CSSRule'
4
6
 
5
7
  ##
6
8
  # This class defines an ASS subtitle file.
@@ -10,9 +12,12 @@ class ASSFile
10
12
 
11
13
  ##
12
14
  # Creates a new ASSFile instance and assigns the default values of instance variables.
13
- def initialize(title, width, height)
15
+ def initialize(title, width, height, css_file_path = nil)
14
16
  @width = width
15
17
  @height = height
18
+ if not css_file_path.nil? then
19
+ @css_file = CSSFile.new(css_file_path)
20
+ end
16
21
  @header = [
17
22
  '[Script Info]',
18
23
  "Title: #{title}",
@@ -41,6 +46,8 @@ class ASSFile
41
46
  # each VTTLine. All those ASSLine are stored in an array. It also creates an array of ASSStyle that
42
47
  # will be used in the ASS style list.
43
48
  def convertVTTtoASS(vtt_file, font_family, font_size)
49
+ fs = font_size
50
+ font_color = '&H00FFFFFF'
44
51
  vtt_file.lines.each do |line|
45
52
  @ass_lines.push(ASSLine.new(line.style, line.time_start, line.time_end, line.text))
46
53
  style_exists = false
@@ -51,7 +58,27 @@ class ASSFile
51
58
  end
52
59
  end
53
60
  if not style_exists then
54
- @ass_styles.push(ASSStyle.new(line.style, line.params, font_family, font_size, @width, @height))
61
+ if defined?(@css_file) then
62
+ css_rule = @css_file.find_rule(line.style)
63
+ if not css_rule.nil? then
64
+ css_rule.properties.each do |property|
65
+ case property[:key]
66
+ when 'font-family'
67
+ font_family = property[:value].gsub('"', '').split(' ,').last
68
+ when 'font-size'
69
+ em_size = 1
70
+ #em_size = property[:value][0].eql? '.' ? "0#{property[:value]}" : property[:value]
71
+ if property[:value][0].eql? '.' then
72
+ em_size = "0#{property[:value]}".gsub('em', '').to_f
73
+ end
74
+ font_size = (fs * em_size).to_i
75
+ when 'color'
76
+ font_color = ASSStyle.convert_color(property[:value])
77
+ end
78
+ end
79
+ end
80
+ end
81
+ @ass_styles.push(ASSStyle.new(line.style, line.params, font_family, font_size, font_color, @width, @height))
55
82
  end
56
83
  end
57
84
  end
@@ -1,5 +1,7 @@
1
1
  # Relative imports
2
2
  require_relative 'ASSStyleParams'
3
+ require_relative 'Validator'
4
+ require 'redgreenblue'
3
5
 
4
6
  ##
5
7
  # This class defines an ASS style that can be applied on a subtitle line.
@@ -13,11 +15,12 @@ class ASSStyle
13
15
  # * Requires +params+, a string of VTT styling as input.
14
16
  # * Requires a video +width+ as input.
15
17
  # * Requires a video +height+ as input.
16
- def initialize(style_name, params, font_family, font_size, width, height)
18
+ def initialize(style_name, params, font_family, font_size, font_color, width, height)
17
19
  @width = width
18
20
  @height = height
19
21
  @font_family = font_family
20
22
  @font_size = font_size
23
+ @font_color = font_color
21
24
  @style_name = style_name
22
25
  @s_params = ASSStyleParams.new(params, width, height)
23
26
  if style_name.eql? 'MainTop' then
@@ -28,6 +31,12 @@ class ASSStyle
28
31
  ##
29
32
  # This method assigns the object values to an ASS style line and outputs it.
30
33
  def to_s
31
- return "Style: #{@style_name},#{@font_family},#{@font_size},&H00FFFFFF,&H000000FF,&H00020713,&H00000000,-1,0,0,0,100,100,0,0,1,2.0,2.0,#{@s_params.alignment},#{@s_params.horizontal_margin},0,#{@s_params.vertical_margin},1"
34
+ return "Style: #{@style_name},#{@font_family},#{@font_size},#{@font_color},&H000000FF,&H00020713,&H00000000,-1,0,0,0,100,100,0,0,1,2.0,2.0,#{@s_params.alignment},#{@s_params.horizontal_margin},0,#{@s_params.vertical_margin},1"
35
+ end
36
+
37
+ def self.convert_color(color_value)
38
+ color_value.gsub!('#', '')
39
+ color = Validator.hex?(color_value) ? RGB.hex(color_value) : RGB.css(color_value)
40
+ return ("&H00%02x%02x%02x" % [color.b, color.g, color.r]).upcase
32
41
  end
33
42
  end
@@ -20,7 +20,9 @@ class Application
20
20
  @title = options[:title]
21
21
  end
22
22
  @quiet = options[:quiet]
23
- @noout = options[:noout]
23
+ if options[:css] then
24
+ @css = options[:css].gsub('\\', '/')
25
+ end
24
26
  end
25
27
 
26
28
  ##
@@ -55,7 +57,8 @@ class Application
55
57
  ass_file = ASSFile.new(
56
58
  (defined?(@title) ? @title : File.basename(file_path).gsub('.vtt', '')),
57
59
  @width,
58
- @height
60
+ @height,
61
+ defined?(@css) ? @css : nil
59
62
  )
60
63
  ass_file.convertVTTtoASS(vtt_file, @font_family, @font_size)
61
64
  return ass_file
@@ -0,0 +1,36 @@
1
+ require 'css_parser'
2
+ require_relative 'CSSRule'
3
+
4
+ class CSSFile
5
+ attr_reader :rules
6
+ include CssParser
7
+
8
+ def initialize(file_path)
9
+ @file_path = file_path
10
+ parser = CssParser::Parser.new
11
+ parser.load_file!(file_path)
12
+ @rules = []
13
+ parser.each_selector do |selector, declarations, specificity|
14
+ css_obj = CSSRule.new(selector, declarations)
15
+ if not css_obj.name.empty? then
16
+ @rules.push(css_obj)
17
+ end
18
+ end
19
+ end
20
+
21
+ def find_rule(value)
22
+ return_rule = nil
23
+ @rules.each do |rule|
24
+ if rule.name == value then
25
+ return_rule = rule
26
+ break
27
+ end
28
+ end
29
+ return return_rule
30
+ end
31
+
32
+ def to_s
33
+ return @file_path
34
+ end
35
+
36
+ end
@@ -0,0 +1,22 @@
1
+ class CSSRule
2
+ attr_reader :name, :properties
3
+
4
+ def initialize(selector, declarations)
5
+ @name = reduce_selector(selector)
6
+ declarations.split(/;\s?/).each do |dec|
7
+ @properties = []
8
+ temp = dec.split(/:\s?/)
9
+ @properties.push(
10
+ { key: temp.first, value: temp.last}
11
+ )
12
+ end
13
+ end
14
+
15
+ def to_s
16
+ return "#{@name} #{@properties}"
17
+ end
18
+
19
+ def reduce_selector(selector)
20
+ return selector.to_s.gsub(/\.rmp-container>\.rmp-content>\.rmp-cc-area>\.rmp-cc-container>\.rmp-cc-display>\.rmp-cc-cue\s?\.?/, '')
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ class Validator
2
+ def self.hex?(value)
3
+ hex = true
4
+ value.gsub!('#', '')
5
+ value.chars.each do |digit|
6
+ hex = false unless digit.match(/\h/)
7
+ end
8
+ return hex
9
+ end
10
+ end
@@ -4,5 +4,5 @@ module Vtt2ass
4
4
  ##
5
5
  # This is the version of the application.
6
6
  # This needs to be changed for each gem release.
7
- VERSION = "0.2.14"
7
+ VERSION = "0.3.0"
8
8
  end
data/lib/vtt2ass.rb CHANGED
@@ -15,6 +15,7 @@ class MainCommand < Thor
15
15
  method_option :title, :aliases => '-t', :desc => 'Specify a title for you file. If the input is a directory, all files will share the same title.', :type => :string
16
16
  method_option :font_size, :aliases => '-s', :desc => 'Specify a font size for the subtitles', :default => 52, :type => :numeric
17
17
  method_option :font_family, :aliases => '-f', :desc => 'Specify a font family for the subtitles', :default => 'Open Sans Semibold', :type => :string
18
+ method_option :css, :aliases => '-c', :desc => 'Specify a CSS file path for Hidive subs', :type => :string
18
19
  method_option :quiet, :aliases => '-q', :desc => 'Don\'t output to the console', :type => :boolean
19
20
  def convert(input)
20
21
  app = Application.new(input, options)
data/vtt2ass.gemspec CHANGED
@@ -27,6 +27,8 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency 'htmlentities', '~> 4.3'
29
29
  spec.add_dependency 'thor', '~> 1.1'
30
+ spec.add_dependency 'css_parser', '~> 1.10'
31
+ spec.add_dependency 'redgreenblue', '~> 0.15'
30
32
 
31
33
  spec.add_development_dependency 'rake', '~> 12.0'
32
34
  spec.add_development_dependency 'minitest', '~> 5.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vtt2ass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.14
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis-Philippe Fortin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-23 00:00:00.000000000 Z
11
+ date: 2022-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlentities
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: css_parser
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.10'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: redgreenblue
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.15'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.15'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -130,8 +158,11 @@ files:
130
158
  - lib/vtt2ass/ASSStyle.rb
131
159
  - lib/vtt2ass/ASSStyleParams.rb
132
160
  - lib/vtt2ass/Application.rb
161
+ - lib/vtt2ass/CSSFile.rb
162
+ - lib/vtt2ass/CSSRule.rb
133
163
  - lib/vtt2ass/VTTFile.rb
134
164
  - lib/vtt2ass/VTTLine.rb
165
+ - lib/vtt2ass/Validator.rb
135
166
  - lib/vtt2ass/version.rb
136
167
  - vtt2ass.gemspec
137
168
  homepage: https://gitlab.com/dkb-weeblets/vtt2ass