cloudinary_subtitles_embedder 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 09795f0362cc4661e278aa65961796b41ab29e12
4
+ data.tar.gz: 06424dfa5cfed6c0015bbc23c36500175b98d1e2
5
+ SHA512:
6
+ metadata.gz: c24b6b869074e5f385b003cbbdfa9f018249d82c76796bef626e0d598d8e6c420ae06ef1607df82dc4e634d83d2a2ee61c7136452ee927b49b307b941add0a6c
7
+ data.tar.gz: 992d84c2ce9a0ea70eb592f16450ad74976787e983d75ff71068dca0fb7c440dbd3e0052caf1fa8d4b5561d1cdc7dc81e3c322a0d5bd379e90ab711e7f55e22b
@@ -0,0 +1,15 @@
1
+ require 'cloudinary_subtitles_embedder/version'
2
+
3
+ module CloudinarySubtitlesEmbedder
4
+ def self.addSubtitlesToVideo(videoPublicId, subtitles, cloud_name = 'candidate-evaluation')
5
+ prefix = "https://res.cloudinary.com/#{cloud_name}/video/upload"
6
+ subtitle_url = subtitles
7
+ .map{|s| SubtitleLine.new(s)}
8
+ .map(&:to_s)
9
+ .reduce(&:+)
10
+ prefix + subtitle_url + '/' + videoPublicId
11
+ end
12
+
13
+ require 'cloudinary_subtitles_embedder/subtitle_time'
14
+ require 'cloudinary_subtitles_embedder/subtitle_line'
15
+ end
@@ -0,0 +1,32 @@
1
+ require 'erb'
2
+
3
+ class SubtitleLine
4
+ attr_accessor :start_time, :end_time, :text
5
+
6
+ def display_options
7
+ @display_options || %w(co_white g_south y_20)
8
+ end
9
+
10
+ def self.font
11
+ 'Roboto_34px_bold'
12
+ end
13
+
14
+ def initialize(subtitle_options, general_display_options = nil)
15
+ self.start_time = subtitle_options["start-timing"]
16
+ self.end_time = subtitle_options["end-timing"]
17
+ self.text = subtitle_options["text"]
18
+ @display_options = general_display_options
19
+ end
20
+
21
+ def to_s
22
+ display_options_string = display_options.join(',')
23
+ # see https://support.cloudinary.com/hc/en-us/community/posts/200788162-Using-special-characters-in-Text-overlaying-
24
+ escaped_text = ERB::Util.url_encode(text)
25
+ .gsub('%2C', '%252C')
26
+ start_time_sec = SubtitleTime.to_seconds(start_time)
27
+ end_time_sec = SubtitleTime.to_seconds(end_time)
28
+ "/l_text:#{self.class.font}:#{escaped_text},so_#{start_time_sec},eo_#{end_time_sec}" +
29
+ (display_options_string.empty? ? '' : ',') +
30
+ display_options_string
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ class SubtitleTime
2
+ class << self
3
+ def multipliers
4
+ [1, 60, 3600]
5
+ end
6
+
7
+ def to_seconds(duration_string)
8
+ validate_duration_format(duration_string)
9
+ time_parts = duration_string.split('.')[0].split(':')
10
+ seconds = time_parts
11
+ .reverse.map(&:to_i)
12
+ .zip(multipliers[0..time_parts.length])
13
+ .map {|(time_part, seconds_multiplier)| time_part * seconds_multiplier}
14
+ .reduce(&:+)
15
+ return seconds unless duration_string.include? '.'
16
+ milliseconds = duration_string.split('.')[-1]
17
+ "#{seconds}.#{milliseconds}".to_f
18
+ end
19
+
20
+ def validate_duration_format(duration_string)
21
+ valid = duration_string =~ /^([0-9]+:)?([0-5]?[0-9]:)?([0-5]?[0-9])(\.[0-9]?[0-9])?$/
22
+ exception = ArgumentError.new('time format supports only format hours:minutes:seconds.milliseconds')
23
+ raise exception unless valid
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module CloudinarySubtitlesEmbedder
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudinary_subtitles_embedder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tuval Rotem
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-01-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description:
56
+ email:
57
+ - tuva.roteml@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/cloudinary_subtitles_embedder.rb
63
+ - lib/cloudinary_subtitles_embedder/subtitle_line.rb
64
+ - lib/cloudinary_subtitles_embedder/subtitle_time.rb
65
+ - lib/cloudinary_subtitles_embedder/version.rb
66
+ homepage: https://github.com/tuval10/cloudinary-subtitle-embedder
67
+ licenses: []
68
+ metadata:
69
+ allowed_push_host: https://rubygems.org
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.5.1
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: add subtitles to cloudinary hosted video
90
+ test_files: []