v2av 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/v2av.rb +30 -52
  5. metadata +6 -6
  6. metadata.gz.sig +1 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7da8afea58a1871295561eee8f90e398bec6eb98ff1a8d2ba2a30bc997d35b5
4
- data.tar.gz: 921dafddb47f35ac522ecb56f3143c8a8945a1b363d4f3a883e4ff8777e51726
3
+ metadata.gz: 3b2be660527bd3b117a12cdaef65b842a23e467b795facacade9d792f3016a73
4
+ data.tar.gz: a552c7c44d277998db08af36a12e0499b0dae0b672d44860f94afc6ba92b2b33
5
5
  SHA512:
6
- metadata.gz: 3918d1b9de5d199346e3453936ddb4a19647963aebadddb0c033407cecfe9894035e0a42da43ae4d47f848f44d62f4f7858fbc6d809ffac3e5ff42ba98c58895
7
- data.tar.gz: 9a70a295daf690f261f81a801154d5604458e61c72bbc7c76103277966b2d9f9615f33c6b5b35216cdc1209663abe0070b9b7460dde616559f4f19652147f0ab
6
+ metadata.gz: 2102a4681362a5e5715b1f513b1eb463366e7e62ff1702e16038d74c8ed5c87f32c80406e11e27b508039ff1491a53e8bc0999f051dbfd8eb05d9c44cc538d02
7
+ data.tar.gz: 47ab02903e7e8b83bbbf95ca244a644d88a87a5a7406bc429f4fbba2398fff01eb1a63c3e2ced7a799f11f9c77dbbca27029ab09bd1187cba023eb4faaa0e2a3
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -73,22 +73,38 @@ class V2av
73
73
  using ColouredText
74
74
  using TimeHelper
75
75
  include WavTool
76
+
77
+ attr_accessor :steps, :duration
76
78
 
77
79
  def initialize(src, srt, working_dir: '/tmp/v2av', debug: false,
78
80
  pollyspeech: {access_key: nil, secret_key: nil, voice_id: 'Amy',
79
81
  cache_filepath: '/tmp/v2av/pollyspeech/cache'})
80
82
 
81
- @working_dir, @debug = working_dir, debug
83
+ @source, @working_dir, @debug = src, working_dir, debug
82
84
 
83
85
  @steps = srt.lines.map do |x|
84
- raw_time, desc = rx.split(/ +/,)
86
+ raw_time, desc = x.chomp.split(/ +/,2)
85
87
  OpenStruct.new({time: raw_time.to_i, desc: desc})
86
88
  end
89
+
90
+ s = `exiftool #{src}`
91
+ puts 's: ' + s.inspect if @debug
92
+ #a = s[/Duration.*(\d{1,2}:\d{2}:\d{2})/,1].split(':').map(&:to_i)
93
+ #@duration = Subunit.new(units={minutes:60, hours:60, seconds: 0}, a).to_i
94
+ @duration = s[/Duration.*: (\d+)/,1].to_i
95
+ puts ('@duration: ' + @duration.inspect).debug if @debug
96
+
97
+ @steps[0..-2].each.with_index do |x, i|
98
+ x.duration = @steps[i+1].time - x.time
99
+ end
100
+
101
+ @steps.last.duration = @duration - @steps.last.time
87
102
 
88
103
  @pollyspeech = PollySpeech.new(pollyspeech) if pollyspeech[:access_key]
104
+
89
105
  end
90
106
 
91
- def build()
107
+ def build(destination)
92
108
 
93
109
  if block_given? then
94
110
 
@@ -96,19 +112,16 @@ class V2av
96
112
 
97
113
  else
98
114
 
99
- dir = File.dirname(source)
100
- file = File.basename(source)
101
-
102
- tidy!
103
-
104
- vid2 = File.join(dir, file.sub(/\.mp4$/,'b\0'))
105
- trim_video source, vid2
115
+ dir = File.dirname(@source)
116
+ file = File.basename(@source)
106
117
 
107
- vid3 = File.join(dir, file.sub(/\.mp4$/,'c.avi'))
118
+ vid2 = File.join(@working_dir, file.sub(/\.mp4$/,'b\0'))
119
+ trim_video @source, vid2
120
+
121
+ vid3 = File.join(@working_dir, file.sub(/\.mp4$/,'c.avi'))
108
122
 
109
123
  generate_audio
110
124
  add_audio_track File.join(@working_dir, 'audio.wav'), vid2, vid3
111
-
112
125
 
113
126
  vid4 = File.join(dir, file.sub(/\.avi$/,'d\0'))
114
127
  resize_video vid3, vid4
@@ -132,6 +145,7 @@ class V2av
132
145
  yield(audio_file, video_file, target_video)
133
146
  else
134
147
  `ffmpeg -i #{video_file} -i #{audio_file} -codec copy -shortest #{target_video} -y`
148
+ #"ffmpeg -i #{video_file} -i #{audio_file} -codec copy -shortest #{target_video} -y"
135
149
  end
136
150
 
137
151
  end
@@ -212,47 +226,12 @@ class V2av
212
226
  `ffmpeg -i #{source} -vf scale="720:-1" #{destination} -y`
213
227
  end
214
228
 
215
- def tidy!()
216
-
217
- verbose_level = 0
218
-
219
- @steps.each do |x|
220
-
221
- x.desc.gsub!(/\s*\([^\)]+\)\s*/,'')
222
- x.desc.sub!(/ in "\w+"$/,'')
223
- x.desc.sub!(/"User account for [^"]+"/,'the User account icon.')
224
-
225
- if x.desc =~ /User left click/ and verbose_level == 0 then
226
-
227
- x.desc.sub!(/User left click/, 'Using the mouse, left click')
228
- verbose_level = 1
229
-
230
- elsif x.desc =~ /User left click/ and verbose_level == 1
231
-
232
- x.desc.sub!(/User left click/, 'Left click')
233
- verbose_level = 2
234
-
235
- elsif x.desc =~ /User left click/ and verbose_level == 2
236
-
237
- x.desc.sub!(/User left click/, 'Click')
238
- verbose_level = 3
239
-
240
- elsif x.desc =~ /User left click/ and verbose_level == 3
241
-
242
- x.desc.sub!(/User left click on/, 'Select')
243
-
244
- else
245
- verbose_level = 0
246
- end
247
-
248
- end
249
-
250
- end
251
-
229
+
252
230
  def to_srt(offset=-(@steps.first.time - 1))
253
231
 
254
232
  lines = to_subtitles(offset).strip.lines.map.with_index do |x, i|
255
233
 
234
+ puts ('x: ' + x.inspect).debug if @debug
256
235
  raw_times, subtitle = x.split(/ /,2)
257
236
  puts ('raw_times: ' + raw_times.inspect).debug if @debug
258
237
  start_time, end_time = raw_times.split('-',2)
@@ -300,7 +279,8 @@ class V2av
300
279
 
301
280
  def trim_video(video, newvideo)
302
281
 
303
- start = @steps.first.time - 4
282
+ start = @steps.first.time > 4 ? @steps.first.time - 4 : @steps.first.time
283
+
304
284
  t1, t2 = [start, @steps.last.time - 2 ].map do |step|
305
285
  "%02d:%02d:%02d" % (step.to_hms.reverse + [0,0]).take(3).reverse
306
286
  end
@@ -311,5 +291,3 @@ class V2av
311
291
 
312
292
  end
313
293
 
314
- v2 = V2av.new('video.mp4', 's.srt', working_dir: '/tmp/v2av')
315
- v2.build('video2.mp4')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: v2av
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  iJVbOvYHXer/n2nZUT7Y3p/QDtueJZnnK3YK+ATp5fv8qdUhyMKlbzNLK4n6cZAm
36
36
  DdWGleqfN3lBh5+Kul0GL3kB
37
37
  -----END CERTIFICATE-----
38
- date: 2019-05-02 00:00:00.000000000 Z
38
+ date: 2019-05-03 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: subunit
@@ -43,20 +43,20 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.3.0
46
+ version: 0.4.0
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0.3'
49
+ version: '0.4'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 0.3.0
56
+ version: 0.4.0
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '0.3'
59
+ version: '0.4'
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: ruby-ogginfo
62
62
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
@@ -1,2 +1 @@
1
- z����D�M��#�=���B4��JH��2��y�������wE;��u�xٷ 6����Z��k�]��fq��:2T��x�,w2ooI ��'Z���)K wx~7���i��׺�m���(��܊~��G�����T�`�t�۽R��~,w[��Q��~��H��sԥ�WAee*��euϊ�@�\��l��굲�av�� ��s|���dp�|��l�25��f ��m����rVx���V\�-�����g\9\}f���C�Q}�q����ã�X����^�.$�C2B��K������
2
- =V��(3zX��I;W�����$KB��(*\Mf&&�:R�x�KA(���Ղ=��kt�@�j�����u
1
+ ��Lؑ8��b/y�����v0��fn�����>���/�ۺ �U��3ՈQ*P%g��x�F]��G):1y;�Ɨ�pሦ��lL��#�������Z!}&`G3|� ��z�� Rnp�'����/�P�T���;k)?F֪�@ir\OE6f��}���ę]�&o�q��[j@��F!�[�6H.���H���$����KM%�|Տb�v��aoJ�AJa�{Gud�ΠU&Do�SV��2G�=�R���<�+��� �jY�+Q�a�+�:��5�TD��Q.d��'��1:v��v�N� �L�l��p��$/GVME�I�����7�JMM��,Ķ�I��9��