storyboard 0.5.0.pre3 → 0.5.0.pre4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -5,4 +5,5 @@
5
5
  *.log
6
6
  *.png
7
7
  *.xml*
8
+ *.gif
8
9
  .DS_Store
data/INSTALL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Installing Storybard
2
2
 
3
- Storyboard relies on a number of external libraries to handle extracting information from the video files and generating the output. Primarily, it requires Ruby 1.9.3 or greater, FFMpeg 1.1 or greater, Imagemagick (which in turn requires ghostscript), and a compiler.
3
+ Storyboard relies on a number of external tools to handle the video files and generate any output. Primarily, it requires Ruby 1.9.3 or greater, FFMpeg 1.1 or greater, Imagemagick (which in turn requires ghostscript), and a compiler.
4
4
 
5
5
  ## OS X: Simply
6
6
 
@@ -10,7 +10,7 @@ Opening a terminal and running the following command will install **everything**
10
10
 
11
11
  ## OS X: More In Depth
12
12
 
13
- To begin, you'll need to download GCC, a set of tools that will let you compile low level code. You can find a nice installer for it at [osx-gcc-installer](https://github.com/kennethreitz/osx-gcc-installer). Once GCC is installed, download and install [homebrew](http://mxcl.github.com/homebrew/), which is a tool that will automate of the installation process for Imagemagick and FFmpeg. If you haven't installed homebrew before, open a Terminal window and do the following:
13
+ To begin, you'll need to download GCC, a set of tools that will let you compile the outside programs that Storyboard needs. You can find a nice installer for it at [osx-gcc-installer](https://github.com/kennethreitz/osx-gcc-installer). Once GCC is available, download and install [homebrew](http://mxcl.github.com/homebrew/), which is a tool that will automate of the installation process for Imagemagick and FFmpeg. If you haven't installed homebrew before, open a Terminal window and do the following:
14
14
 
15
15
  ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
16
16
  brew install ffmpeg imagemagick ghostscript
@@ -27,7 +27,23 @@ Finally, if you don't have Ruby 1.9.3 installed on your system, you can use <a h
27
27
  rvm install 1.9.3-p374
28
28
  rvm default 1.9.3-p374
29
29
 
30
- When all of those are installed, you can install Storyboard with the `gem` command, and create a link to it so that it runs with 1.9.3.
30
+ When all of those are installed, you can install Storyboard with the `gem` command, and create a link to it so that it runs only with Ruby 1.9.3.
31
31
 
32
32
  gem install storyboard
33
33
  rvm wrapper 1.9.3-p374 --no-prefix storyboard
34
+
35
+ ## Linux
36
+
37
+ For Ubuntu/Debian, Storyboard needs the following packages, which will install Ruby 1.9.3 and Imagemagick.
38
+
39
+ sudo apt-get install make
40
+ sudo apt-get install ruby1.9.1-dev
41
+ sudo apt-get install yasm imagemagick
42
+ sudo gem install bundler
43
+
44
+ The version of FFmpeg that Storyboard requires isn't in any package repos yet, and so you need to download and compile your own version
45
+
46
+ wget http://ffmpeg.org/releases/ffmpeg-1.1.1.tar.gz
47
+ tar xvf ffmpeg-1.1.1.tar.gz
48
+ cd ffmpeg-1.1.1
49
+ ./configure && make && make install
@@ -14,7 +14,7 @@ class Storyboard
14
14
  def add_subtitle(image, subtitle, dimensions)
15
15
  offset = 0
16
16
  subtitle.lines.reverse.each_with_index {|caption,i|
17
- escaped = caption.gsub('\'') {|s| "\\#{s}" }
17
+ escaped = caption.gsub("'", "\\\\'")
18
18
  font_size = 30
19
19
  text_width = dimensions[0] + 1
20
20
  while(text_width > (dimensions[0] * 0.9))
@@ -1,4 +1,5 @@
1
1
  require 'pp'
2
+ require 'iconv'
2
3
 
3
4
  class Storyboard
4
5
  def get_subtitles
@@ -34,7 +35,7 @@ class Storyboard
34
35
  chosen = nil
35
36
 
36
37
  if @cache.subtitles.nil?
37
- LOG.info("No subtitles cache found")
38
+ LOG.debug("No subtitles cache found")
38
39
  @cache.subtitles = downloader.possible_urls
39
40
  @cache.save
40
41
  end
@@ -96,7 +97,7 @@ class Storyboard
96
97
  @needs_KFhimaji = false
97
98
  check_bom(@text.lines.first)
98
99
  Storyboard.current_encoding = @encoding
99
- @text = @text.force_encoding(Storyboard.current_encoding)
100
+ @text = text.force_encoding(Storyboard.current_encoding)
100
101
  parse
101
102
  clean_promos
102
103
  LOG.info("Parsed subtitle file. #{count} entries found.")
@@ -117,13 +118,21 @@ class Storyboard
117
118
  end
118
119
 
119
120
 
121
+ def fix_encoding(l)
122
+ # The only ISO8859-1 I hit so far. I expec this to grow.
123
+ if !(l.bytes.to_a | [233,146]).empty? && @encoding == 'UTF-8'
124
+ l = l.unpack("C*").pack("U*")
125
+ end
126
+ l
127
+ end
128
+
120
129
  #There are some horrid files, so I want to be able to have more than just a single regex
121
130
  #to parse the srt file. Eventually, handling these errors will be a thing to do.
122
131
  def parse
123
132
  phase = :line_no
124
133
  page = nil
125
-
126
134
  @text.each_line {|l|
135
+ l = fix_encoding(l)
127
136
  l = l.strip
128
137
  #p l.bytes.to_a
129
138
  case phase
@@ -151,7 +160,7 @@ class Storyboard
151
160
  @pages << page
152
161
  else
153
162
  Storyboard.needs_KFhimaji(true) if l.contains_cjk?
154
- page[:lines] << l.gsub(Storyboard.encode_regexp("<\/?[^>]*>"), "")
163
+ page[:lines] << l.gsub(Storyboard.encode_regexp("<\/?[^>]*>"), "").encode!("UTF-8")
155
164
  end
156
165
  end
157
166
  }
@@ -160,10 +169,10 @@ class Storyboard
160
169
  # Strip out obnoxious "CREATED BY L33T DUD3" or "DOWNLOADED FROM ____" text
161
170
  def clean_promos
162
171
  @pages.delete_if {|page|
163
- !page[:lines].grep(Storyboard.encode_regexp('Subtitles downloaded')).empty? ||
164
- !page[:lines].grep(Storyboard.encode_regexp('addic7ed')).empty? ||
165
- !page[:lines].grep(Storyboard.encode_regexp('OpenSubtitles')).empty? ||
166
- !page[:lines].grep(Storyboard.encode_regexp('sync, corrected by')).empty? ||
172
+ !page[:lines].grep(/Subtitles downloaded/).empty? ||
173
+ !page[:lines].grep(/addic7ed/).empty? ||
174
+ !page[:lines].grep(/OpenSubtitles/).empty? ||
175
+ !page[:lines].grep(/sync, corrected by/).empty? ||
167
176
  false
168
177
  }
169
178
  end
@@ -3,8 +3,9 @@ class STRTime
3
3
  attr_reader :value
4
4
 
5
5
  class <<self
6
- def parse(str)
7
- hh,mm,ss,ms = str.scan(Storyboard.encode_regexp(REGEX)).flatten.map{|i|
6
+ def parse(str, skip_encode=false)
7
+ matcher = skip_encode ? Regexp.new(REGEX) : Storyboard.encode_regexp(REGEX)
8
+ hh,mm,ss,ms = str.scan(matcher).flatten.map{|i|
8
9
  Float(i.force_encoding("ASCII-8bit").delete("\000"))
9
10
  }
10
11
  value = ((((hh*60)+mm)*60)+ss) + ms/1000
@@ -1,3 +1,3 @@
1
1
  class Storyboard
2
- VERSION = "0.5.0.pre3"
2
+ VERSION = "0.5.0.pre4"
3
3
  end
data/lib/storyboard.rb CHANGED
@@ -98,7 +98,7 @@ class Storyboard
98
98
  begin
99
99
  # trolololol
100
100
  o = stdout.gets.split('|').inject({}){|hold,value| s = value.split('='); hold[s[0]]=s[1]; hold }
101
- t = STRTime.parse(o['pkt_pts_time'])
101
+ t = STRTime.parse(o['pkt_pts_time'], true)
102
102
  pbar.progress = t.value
103
103
  @capture_points << t
104
104
  end while !stdout.eof?
@@ -158,12 +158,8 @@ class Storyboard
158
158
  @capture_points.each_with_index {|f,i|
159
159
  next if i >= @stop_frame
160
160
  image_name = File.join(@options[:save_directory], "%04d.jpg" % [i])
161
- capture_point_subtitles = @subtitles.pages.select { |page| f.value >= page.start_time.value and f.value <= page.end_time.value }.first
162
- begin
163
- @renderers.each{|r| r.render_frame(image_name, capture_point_subtitles) }
164
- rescue
165
- p $!
166
- end
161
+ capture_point_subtitles = @subtitles.pages.select { |page| f.value >= page.start_time.value and f.value <= page.end_time.value }.last
162
+ @renderers.each{|r| r.render_frame(image_name, capture_point_subtitles) }
167
163
  pbar.increment
168
164
  }
169
165
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storyboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.pre3
4
+ version: 0.5.0.pre4
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-03 00:00:00.000000000 Z
12
+ date: 2013-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -168,7 +168,6 @@ files:
168
168
  - .rvmrc
169
169
  - CHANGELOG
170
170
  - Gemfile
171
- - Gemfile.lock
172
171
  - INSTALL.md
173
172
  - LICENSE
174
173
  - README.md
@@ -235,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
234
  version: 1.3.1
236
235
  requirements: []
237
236
  rubyforge_project:
238
- rubygems_version: 1.8.23
237
+ rubygems_version: 1.8.25
239
238
  signing_key:
240
239
  specification_version: 3
241
240
  summary: Video to PDF/ePub generator
data/Gemfile.lock DELETED
@@ -1,59 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- storyboard (0.5.0.pre2)
5
- bundler
6
- levenshtein-ffi
7
- mime-types (>= 1.19)
8
- mini_magick
9
- path (>= 1.3.0)
10
- prawn
11
- ruby-progressbar
12
- rubyzip
13
- term-ansicolor
14
-
15
- PATH
16
- remote: vendor/suby
17
- specs:
18
- suby (0.4.0)
19
- mime-types (>= 1.19)
20
- path (>= 1.3.0)
21
- rubyzip
22
- term-ansicolor
23
-
24
- GEM
25
- remote: http://rubygems.org/
26
- specs:
27
- Ascii85 (1.0.2)
28
- afm (0.2.0)
29
- ffi (1.1.5)
30
- hashery (2.1.0)
31
- levenshtein-ffi (1.0.3)
32
- ffi
33
- ffi (~> 1.1.5)
34
- mime-types (1.19)
35
- mini_magick (3.4)
36
- subexec (~> 0.2.1)
37
- path (1.3.1)
38
- pdf-reader (1.3.0)
39
- Ascii85 (~> 1.0.0)
40
- afm (~> 0.2.0)
41
- hashery (~> 2.0)
42
- ruby-rc4
43
- ttfunk
44
- prawn (0.12.0)
45
- pdf-reader (>= 0.9.0)
46
- ttfunk (~> 1.0.2)
47
- ruby-progressbar (1.0.2)
48
- ruby-rc4 (0.1.5)
49
- rubyzip (0.9.9)
50
- subexec (0.2.2)
51
- term-ansicolor (1.0.7)
52
- ttfunk (1.0.3)
53
-
54
- PLATFORMS
55
- ruby
56
-
57
- DEPENDENCIES
58
- storyboard!
59
- suby!