libis-format 1.2.8 → 1.3.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/data/types.yml +1 -1
  4. data/lib/libis/format/command_line.rb +2 -3
  5. data/lib/libis/format/config.rb +18 -19
  6. data/lib/libis/format/converter/base.rb +9 -16
  7. data/lib/libis/format/converter/chain.rb +36 -28
  8. data/lib/libis/format/converter/email_converter.rb +5 -8
  9. data/lib/libis/format/converter/fop_pdf_converter.rb +4 -6
  10. data/lib/libis/format/converter/image_converter.rb +51 -58
  11. data/lib/libis/format/converter/jp2_converter.rb +33 -35
  12. data/lib/libis/format/converter/office_converter.rb +19 -23
  13. data/lib/libis/format/converter/pdf_converter.rb +22 -28
  14. data/lib/libis/format/converter/repository.rb +7 -13
  15. data/lib/libis/format/converter/spreadsheet_converter.rb +7 -11
  16. data/lib/libis/format/converter/video_converter.rb +41 -55
  17. data/lib/libis/format/converter/xslt_converter.rb +14 -13
  18. data/lib/libis/format/converter.rb +1 -1
  19. data/lib/libis/format/identifier.rb +41 -43
  20. data/lib/libis/format/tool/droid.rb +29 -30
  21. data/lib/libis/format/tool/ff_mpeg.rb +11 -13
  22. data/lib/libis/format/tool/fido.rb +1 -1
  23. data/lib/libis/format/tool/pdf_copy.rb +17 -18
  24. data/lib/libis/format/tool/pdf_merge.rb +17 -17
  25. data/lib/libis/format/tool/pdf_optimizer.rb +18 -20
  26. data/lib/libis/format/tool/spreadsheet_to_ods.rb +23 -20
  27. data/lib/libis/format/tool.rb +2 -2
  28. data/lib/libis/format/type_database.rb +51 -28
  29. data/lib/libis/format/type_database_impl.rb +57 -24
  30. data/lib/libis/format/version.rb +1 -1
  31. data/lib/libis/format.rb +3 -2
  32. data/lib/libis-format.rb +2 -0
  33. data/libis-format.gemspec +1 -1
  34. metadata +17 -17
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require 'libis-tools'
3
4
  require 'fileutils'
4
5
  require 'libis/format/config'
@@ -7,32 +8,31 @@ require_relative 'base'
7
8
  module Libis
8
9
  module Format
9
10
  module Converter
10
-
11
11
  class Jp2Converter < Libis::Format::Converter::Base
12
-
13
12
  def self.input_types
14
- [:TIFF, :JPG, :PNG, :BMP, :GIF, :PDF]
13
+ %i[TIFF JPG PNG BMP GIF PDF]
15
14
  end
16
15
 
17
16
  def self.output_types(format = nil)
18
17
  return [] unless input_types.include?(format)
18
+
19
19
  [:JP2]
20
20
  end
21
21
 
22
22
  def initialize
23
23
  super
24
24
  @options = {
25
- color_xform: false,
26
- error_resilience: :ALL,
27
- lossless: true,
28
- progression_order: 'RLCP',
29
- tile_size: [1024, 1024],
30
- codeblock_size: [6, 6],
25
+ color_xform: false,
26
+ error_resilience: :ALL,
27
+ lossless: true,
28
+ progression_order: 'RLCP',
29
+ tile_size: [1024, 1024],
30
+ codeblock_size: [6, 6]
31
31
  }
32
32
  end
33
33
 
34
34
  def j2kdriver(_)
35
- #force usage of this converter
35
+ # force usage of this converter
36
36
  end
37
37
 
38
38
  def color_xform(flag = true)
@@ -68,38 +68,36 @@ module Libis
68
68
 
69
69
  @options.each do |key, value|
70
70
  case key
71
- when :color_xform
72
- options << '--set-output-j2k-color-xform' << (value ? 'YES' : 'NO')
73
- when :error_resilience
74
- options << '--set-output-j2k-error-resilience' << value.to_s
75
- when :lossless
76
- if value
77
- options << '--set-output-j2k-xform' << 'R53' << '5' << '--set-output-j2k-ratio' << '0'
78
- else
79
- options << '--set-output-j2k-xform' << 'I97' << '--set-output-j2k-psnr' << '46'
80
- end
81
- when :progression_order
82
- options << '--set-output-j2k-progression-order' << value.to_s
83
- when :tile_size
84
- options << '--set-output-j2k-tile-size' << value[0].to_s << value[1].to_s
85
- when :codeblock_size
86
- options << '--set-output-j2k-codeblock-size' << value[0].to_s << value[1].to_s
71
+ when :color_xform
72
+ options << '--set-output-j2k-color-xform' << (value ? 'YES' : 'NO')
73
+ when :error_resilience
74
+ options << '--set-output-j2k-error-resilience' << value.to_s
75
+ when :lossless
76
+ if value
77
+ options << '--set-output-j2k-xform' << 'R53' << '5' << '--set-output-j2k-ratio' << '0'
87
78
  else
88
- #do nothing
79
+ options << '--set-output-j2k-xform' << 'I97' << '--set-output-j2k-psnr' << '46'
80
+ end
81
+ when :progression_order
82
+ options << '--set-output-j2k-progression-order' << value.to_s
83
+ when :tile_size
84
+ options << '--set-output-j2k-tile-size' << value[0].to_s << value[1].to_s
85
+ when :codeblock_size
86
+ options << '--set-output-j2k-codeblock-size' << value[0].to_s << value[1].to_s
87
+ else # rubocop:disable Style/EmptyElse
88
+ # do nothing
89
89
  end
90
90
  end
91
91
 
92
-
93
92
  result = Libis::Tools::Command.run(
94
- Libis::Format::Config[:j2k_cmd],
95
- '--input-file-name', source,
96
- '--set-output-type', 'JP2',
97
- *options,
98
- '--output-file-name', target,
93
+ Libis::Format::Config[:j2k_cmd],
94
+ '--input-file-name', source,
95
+ '--set-output-type', 'JP2',
96
+ *options,
97
+ '--output-file-name', target
99
98
  )
100
99
 
101
100
  result.merge(files: [target], converter: self.class.name)
102
-
103
101
  end
104
102
  end
105
103
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require_relative 'base'
4
4
 
@@ -8,47 +8,43 @@ require 'libis/format/type_database'
8
8
  module Libis
9
9
  module Format
10
10
  module Converter
11
-
12
11
  class OfficeConverter < Libis::Format::Converter::Base
13
-
14
12
  def self.input_types
15
- [
16
- :TXT,
17
- :RTF,
18
- :HTML,
19
- :MSDOC,
20
- :MSDOT,
21
- :MSXLS,
22
- :MSPPT,
23
- :MSDOCX,
24
- :MSDOTX,
25
- :MSXLSX,
26
- :MSPPTX,
27
- :WORDPERFECT,
28
- :OO_WRITER,
29
- :OO_IMPRESS,
30
- :OO_CALC
13
+ %i[
14
+ TXT
15
+ RTF
16
+ HTML
17
+ MSDOC
18
+ MSDOT
19
+ MSXLS
20
+ MSPPT
21
+ MSDOCX
22
+ MSDOTX
23
+ MSXLSX
24
+ MSPPTX
25
+ WORDPERFECT
26
+ OO_WRITER
27
+ OO_IMPRESS
28
+ OO_CALC
31
29
  ]
32
30
  end
33
31
 
34
32
  def self.output_types(format = nil)
35
33
  return [] unless input_types.include?(format)
34
+
36
35
  [:PDF]
37
36
  end
38
37
 
39
38
  def office_convert(_)
40
- #force usage of this converter
39
+ # force usage of this converter
41
40
  end
42
41
 
43
42
  def convert(source, target, format, opts = {})
44
43
  super
45
44
 
46
45
  Format::Tool::OfficeToPdf.run(source, target)
47
-
48
46
  end
49
-
50
47
  end
51
-
52
48
  end
53
49
  end
54
50
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require_relative 'base'
4
4
 
@@ -11,20 +11,19 @@ require 'libis/format/tool/pdf_optimizer'
11
11
  module Libis
12
12
  module Format
13
13
  module Converter
14
-
15
14
  class PdfConverter < Libis::Format::Converter::Base
16
-
17
15
  def self.input_types
18
16
  [:PDF]
19
17
  end
20
18
 
21
19
  def self.output_types(format = nil)
22
20
  return [] unless input_types.include?(format)
23
- [:PDF, :PDFA]
21
+
22
+ %i[PDF PDFA]
24
23
  end
25
24
 
26
25
  def pdf_convert(_)
27
- #force usage of this converter
26
+ # force usage of this converter
28
27
  end
29
28
 
30
29
  # Set metadata for Pdf file
@@ -40,7 +39,8 @@ module Libis
40
39
  def metadata(values = {})
41
40
  values.key_strings_to_symbols!
42
41
  values.each do |k, v|
43
- next unless [:title, :author, :creator, :keywords, :subject].include?(k)
42
+ next unless %i[title author creator keywords subject].include?(k)
43
+
44
44
  @options["md_#{k}"] = v
45
45
  end
46
46
  end
@@ -59,7 +59,8 @@ module Libis
59
59
  # - rotation: rotation of the watermark text (in degrees; integer number)
60
60
  # - size: font size of the watermark text
61
61
  # - opacity: opacity of the watermark (fraction 0.0 - 1.0)
62
- # - gap: size of the gap between watermark instances. Integer value is absolute size in points (1/72 inch). Fractions are percentage of widht/height.
62
+ # - gap: size of the gap between watermark instances. Integer value is absolute size in points (1/72 inch).
63
+ # Fractions are percentage of widht/height.
63
64
  # If both options are given, the file will be used as-is if it exists and is a valid image file. Otherwise the
64
65
  # file will be created or overwritten with a newly created watermark image.
65
66
  #
@@ -96,7 +97,7 @@ module Libis
96
97
  #
97
98
  # @param [Integer] setting quality setting. [0-4]
98
99
  def optimize(setting = 1)
99
- @options['optimize'] = %w(screen ebook default printer prepress)[setting] if (0..4) === setting
100
+ @options['optimize'] = %w[screen ebook default printer prepress][setting] if (0..4).include?(setting)
100
101
  end
101
102
 
102
103
  def convert(source, target, format, opts = {})
@@ -107,31 +108,29 @@ module Libis
107
108
  if (quality = @options.delete('optimize'))
108
109
  result = optimize_pdf(source, target, quality)
109
110
  return nil unless result
111
+
110
112
  source = result
111
113
  end
112
114
 
113
115
  unless @options.empty?
114
116
  result = convert_pdf(source, target)
115
117
  return nil unless result
118
+
116
119
  source = result
117
120
  end
118
121
 
119
- if format == :PDFA and source
120
- result = pdf_to_pdfa(source, target)
121
- end
122
+ result = pdf_to_pdfa(source, target) if (format == :PDFA) && source
122
123
 
123
- {
124
+ {
124
125
  files: [result],
125
126
  converter: self.class.name
126
127
  }
127
-
128
128
  end
129
129
 
130
130
  def optimize_pdf(source, target, quality)
131
-
132
131
  using_temp(target) do |tmpname|
133
132
  result = Libis::Format::Tool::PdfOptimizer.run(source, tmpname, quality)
134
- unless result[:status] == 0
133
+ unless (result[:status]).zero?
135
134
  error("Pdf optimization encountered errors:\n%s", (result[:err] + result[:out]).join("\n"))
136
135
  next nil
137
136
  end
@@ -140,16 +139,16 @@ module Libis
140
139
  end
141
140
 
142
141
  def convert_pdf(source, target)
143
-
144
142
  using_temp(target) do |tmpname|
145
143
  result = Libis::Format::Tool::PdfCopy.run(
146
- source, tmpname,
147
- @options.map {|k, v|
148
- if v.nil?
149
- nil
150
- else
151
- ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
152
- end}.flatten
144
+ source, tmpname,
145
+ @options.map do |k, v|
146
+ if v.nil?
147
+ nil
148
+ else
149
+ ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
150
+ end
151
+ end.flatten
153
152
  )
154
153
  unless result[:err].empty?
155
154
  error("Pdf conversion encountered errors:\n%s", result[:err].join(join("\n")))
@@ -157,11 +156,9 @@ module Libis
157
156
  end
158
157
  tmpname
159
158
  end
160
-
161
159
  end
162
160
 
163
161
  def pdf_to_pdfa(source, target)
164
-
165
162
  using_temp(target) do |tmpname|
166
163
  result = Libis::Format::Tool::PdfToPdfa.run source, tmpname
167
164
 
@@ -177,11 +174,8 @@ module Libis
177
174
  end
178
175
  tmpname
179
176
  end
180
-
181
177
  end
182
-
183
178
  end
184
-
185
179
  end
186
180
  end
187
181
  end
@@ -1,6 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- require 'set'
4
3
  require 'singleton'
5
4
 
6
5
  require 'libis/tools/logger'
@@ -11,7 +10,6 @@ require_relative 'chain'
11
10
  module Libis
12
11
  module Format
13
12
  module Converter
14
-
15
13
  class Repository
16
14
  include Singleton
17
15
  include ::Libis::Tools::Logger
@@ -24,15 +22,15 @@ module Libis
24
22
  @converters_glob = File.join(File.dirname(__FILE__), '*_converter.rb')
25
23
  end
26
24
 
27
- def Repository.register(converter_class)
25
+ def self.register(converter_class)
28
26
  instance.converters.add? converter_class
29
27
  end
30
28
 
31
- def Repository.get_converters
29
+ def self.get_converters # rubocop:disable Naming/AccessorMethodName
32
30
  instance.get_converters
33
31
  end
34
32
 
35
- def get_converters
33
+ def get_converters # rubocop:disable Naming/AccessorMethodName
36
34
  if converters.empty?
37
35
  Dir.glob(converters_glob).each do |filename|
38
36
  # noinspection RubyResolve
@@ -42,12 +40,12 @@ module Libis
42
40
  converters
43
41
  end
44
42
 
45
- def Repository.get_converter_chain(src_type, tgt_type, operations = {})
43
+ def self.get_converter_chain(src_type, tgt_type, operations = {})
46
44
  instance.get_converter_chain src_type, tgt_type, operations
47
45
  end
48
46
 
49
47
  def get_converter_chain(src_type, tgt_type, operations = {})
50
- msg = "conversion from #{src_type.to_s} to #{tgt_type.to_s}"
48
+ msg = "conversion from #{src_type} to #{tgt_type}"
51
49
  chain_list = find_chains src_type, tgt_type, operations
52
50
  # if chain_list.length > 1
53
51
  # warn "Found more than one conversion chain for #{msg}. Picking the first one."
@@ -70,7 +68,6 @@ module Libis
70
68
  end
71
69
 
72
70
  def build_chains(chain)
73
-
74
71
  found = []
75
72
  chains = [chain]
76
73
 
@@ -81,18 +78,15 @@ module Libis
81
78
  new_chains += chains.map { |c| c.append(converter) }.flatten
82
79
  end
83
80
 
84
- found = new_chains.select { |c| c.valid?}
81
+ found = new_chains.select(&:valid?)
85
82
  return found unless found.empty?
86
83
 
87
84
  chains = new_chains
88
85
  end
89
86
 
90
87
  found
91
-
92
88
  end
93
-
94
89
  end
95
-
96
90
  end
97
91
  end
98
92
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require_relative 'base'
4
4
 
@@ -8,35 +8,31 @@ require 'libis/format/type_database'
8
8
  module Libis
9
9
  module Format
10
10
  module Converter
11
-
12
11
  class SpreadsheetConverter < Libis::Format::Converter::Base
13
-
14
12
  def self.input_types
15
- [
16
- :MSXLS,
17
- :MSXLSX,
18
- :OO_CALC
13
+ %i[
14
+ MSXLS
15
+ MSXLSX
16
+ OO_CALC
19
17
  ]
20
18
  end
21
19
 
22
20
  def self.output_types(format = nil)
23
21
  return [] unless input_types.include?(format)
22
+
24
23
  [:OO_CALC]
25
24
  end
26
25
 
27
26
  def spreadsheet_convert(_)
28
- #force usage of this converter
27
+ # force usage of this converter
29
28
  end
30
29
 
31
30
  def convert(source, target, format, opts = {})
32
31
  super
33
32
 
34
33
  Format::Tool::SpreadsheetToOds.run(source, target)
35
-
36
34
  end
37
-
38
35
  end
39
-
40
36
  end
41
37
  end
42
38
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
  require 'libis/format/tool/ff_mpeg'
3
5
 
@@ -6,24 +8,19 @@ require 'fileutils'
6
8
  module Libis
7
9
  module Format
8
10
  module Converter
9
-
10
11
  class VideoConverter < Libis::Format::Converter::Base
11
-
12
12
  def self.input_types
13
- [:WEBM, :MP4, :MPG, :MKV, :MJP2, :QTFF, :AVI, :OGGV, :WMV, :DV, :FLV, :SWF]
13
+ %i[WEBM MP4 MPG MKV MJP2 QTFF AVI OGGV WMV DV FLV SWF]
14
14
  end
15
15
 
16
16
  def self.output_types(format = nil)
17
17
  return [] unless input_types.include?(format)
18
- [:GIF, :WEBM, :MP4, :MPG, :MKV, :MJP2, :QTFF, :AVI, :OGGV, :WMV, :DV, :FLV, :SWF]
19
- end
20
18
 
21
- def initialize
22
- super
19
+ %i[GIF WEBM MP4 MPG MKV MJP2 QTFF AVI OGGV WMV DV FLV SWF]
23
20
  end
24
21
 
25
- def quiet(v)
26
- @flags[:quiet] = !!v
22
+ def quiet(value)
23
+ @flags[:quiet] = !!value
27
24
  end
28
25
 
29
26
  def format(format)
@@ -126,10 +123,10 @@ module Libis
126
123
 
127
124
  # @param [Boolean] value If set to true automatically selects optimal format for web viewing. Default: false
128
125
  def web_stream(value)
129
- if value
130
- @options[:video_codec] = 'h264'
131
- @options[:audio_codec] = 'acc'
132
- end
126
+ return unless value
127
+
128
+ @options[:video_codec] = 'h264'
129
+ @options[:audio_codec] = 'acc'
133
130
  end
134
131
 
135
132
  # @param [String] name name of a preset. See FFMpeg documentation for more info
@@ -170,7 +167,7 @@ module Libis
170
167
 
171
168
  elsif File.directory?(source)
172
169
 
173
- sources = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
170
+ sources = Dir[File.join(source, '**', '*')].reject { |p| File.directory? p }
174
171
  assemble_and_convert(sources, target)
175
172
 
176
173
  else
@@ -183,14 +180,13 @@ module Libis
183
180
  files: [target],
184
181
  converter: self.class.name
185
182
  }
186
-
187
183
  end
188
184
 
189
185
  def assemble_and_convert(sources, target)
190
- Tempfile.create(%w(list .txt)) do |f|
191
- sources.each {|src| f.puts src}
186
+ Tempfile.create(%w[list .txt]) do |f|
187
+ sources.each { |src| f.puts src }
192
188
  opts[:global] ||= []
193
- opts[:global] += %w(-f concat)
189
+ opts[:global] += %w[-f concat]
194
190
  f.close
195
191
  target = convert_file(f.to_path, target)
196
192
  end
@@ -201,15 +197,15 @@ module Libis
201
197
 
202
198
  def convert_file(source, target)
203
199
  # FLV special: only supports aac and speex audio codecs
204
- format = (@options[:format] || File.extname(target)[1..-1]).to_s.downcase
205
- @options[:audio_codec] ||= 'aac' if %w'flv'.include?(format)
200
+ format = (@options[:format] || File.extname(target)[1..]).to_s.downcase
201
+ @options[:audio_codec] ||= 'aac' if %w[flv].include?(format)
206
202
 
207
203
  # SWF special: only supports mp3 audio codec
208
- format = (@options[:format] || File.extname(target)[1..-1]).to_s.downcase
209
- @options[:audio_codec] ||= 'mp3' if %w'swf'.include?(format)
204
+ format = (@options[:format] || File.extname(target)[1..]).to_s.downcase
205
+ @options[:audio_codec] ||= 'mp3' if %w[swf].include?(format)
210
206
 
211
207
  # Set up FFMpeg command line parameters
212
- opts = {global: [], input: [], filter: [], output: []}
208
+ opts = { global: [], input: [], filter: [], output: [] }
213
209
  opts[:global] << '-hide_banner'
214
210
  opts[:global] << '-loglevel' << (@options[:quiet] ? 'fatal' : 'warning')
215
211
 
@@ -217,29 +213,21 @@ module Libis
217
213
  @options[:watermark_opacity] ||= 0.5
218
214
  if @options[:watermark_image]
219
215
  opts[:filter] << '-i' << @options[:watermark_image] << '-filter_complex'
220
- opts[:filter] << "[1:v]format=argb,colorchannelmixer=aa=%f[wm];[0:v][wm]overlay=%s" %
221
- [@options[:watermark_opacity], watermark_position_text]
216
+ opts[:filter] << Kernel.format('[1:v]format=argb,colorchannelmixer=aa=%f[wm];[0:v][wm]overlay=%s',
217
+ @options[:watermark_opacity], watermark_position_text)
222
218
  elsif @options[:watermark_text]
223
219
  @options[:watermark_text_size] ||= 10
224
220
  @options[:watermark_text_color] ||= 'white'
225
221
  @options[:watermark_text_shadow_color] ||= 'black'
226
222
  @options[:watermark_text_shadow_offset] ||= 1
227
- filter_text = "drawtext=text='%s':%s:fontfile=%s:fontsize=%d:fontcolor=%s@%f" %
228
- [
229
- @options[:watermark_text],
230
- watermark_position_text(true),
231
- Config[:watermark_font],
232
- @options[:watermark_text_size],
233
- @options[:watermark_text_color],
234
- @options[:watermark_opacity]
235
- ]
236
- filter_text += ':shadowcolor=%s@%f:shadowx=%d:shadowy=%d' %
237
- [
238
- @options[:watermark_text_shadow_color],
239
- @options[:watermark_opacity],
240
- @options[:watermark_text_shadow_offset],
241
- @options[:watermark_text_shadow_offset]
242
- ] if @options[:watermark_text_shadow_offset] > 0
223
+ filter_text = Kernel.format("drawtext=text='%s':%s:fontfile=%s:fontsize=%d:fontcolor=%s@%f",
224
+ @options[:watermark_text], watermark_position_text(true), Config[:watermark_font],
225
+ @options[:watermark_text_size], @options[:watermark_text_color], @options[:watermark_opacity])
226
+ if (@options[:watermark_text_shadow_offset]).positive?
227
+ filter_text += Kernel.format(':shadowcolor=%s@%f:shadowx=%d:shadowy=%d',
228
+ @options[:watermark_text_shadow_color], @options[:watermark_opacity],
229
+ @options[:watermark_text_shadow_offset], @options[:watermark_text_shadow_offset])
230
+ end
243
231
  opts[:filter] << '-vf' << filter_text
244
232
  end
245
233
  opts[:output] << '-ac' << @options[:audio_channels] if @options[:audio_channels]
@@ -251,7 +239,7 @@ module Libis
251
239
  opts[:output] << '-map_metadata:g' << '0:g' # Copy global metadata
252
240
  opts[:output] << '-map_metadata:s:a' << '0:s:a' # Copy audio metadata
253
241
  opts[:output] << '-map_metadata:s:v' << '0:s:v' # Copy video metadata
254
- opts[:input] << '-accurate_seek' << (@options[:start].to_i < 0 ? '-sseof' : '-ss') << @options[:start] if @options[:start]
242
+ opts[:input] << '-accurate_seek' << (@options[:start].to_i.negative? ? '-sseof' : '-ss') << @options[:start] if @options[:start]
255
243
  opts[:input] << '-t' << @options[:duration] if @options[:duration]
256
244
  opts[:output] << '-qscale' << @options[:video_quality] if @options[:video_quality]
257
245
  opts[:output] << '-q:a' << @options[:audio_quality] if @options[:audio_quality]
@@ -277,21 +265,19 @@ module Libis
277
265
  w = for_text ? 'tw' : 'w'
278
266
  h = for_text ? 'th' : 'h'
279
267
  case @options[:watermark_position]
280
- when 'bottom_left'
281
- "x=#{margin}:y=H-#{h}-#{margin}"
282
- when 'top_left'
283
- "x=#{margin}:y=#{margin}"
284
- when 'bottom_right'
285
- "x=W-#{w}-#{margin}:y=H-#{h}-#{margin}"
286
- when 'top_right'
287
- "x=W-#{w}-#{margin}:y=#{margin}"
288
- else
289
- "x=#{margin}:y=H-#{h}-#{margin}"
268
+ when 'bottom_left'
269
+ "x=#{margin}:y=H-#{h}-#{margin}"
270
+ when 'top_left'
271
+ "x=#{margin}:y=#{margin}"
272
+ when 'bottom_right'
273
+ "x=W-#{w}-#{margin}:y=H-#{h}-#{margin}"
274
+ when 'top_right'
275
+ "x=W-#{w}-#{margin}:y=#{margin}"
276
+ else
277
+ "x=#{margin}:y=H-#{h}-#{margin}"
290
278
  end
291
279
  end
292
-
293
280
  end
294
-
295
281
  end
296
282
  end
297
- end
283
+ end