Class: Paperclip::Transcoder

Inherits:
Processor
  • Object
show all
Defined in:
lib/paperclip/paperclip_processors/transcoder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file, options = {}, attachment = nil) ⇒ Transcoder

Creates a Video object set to work on the file given. It will attempt to transcode the video into one defined by target_geometry which is a “WxH”-style string. format should be specified. Video transcoding will raise no errors unless whiny is true (which it is, by default. If convert_options is set, the options will be appended to the convert command upon video transcoding.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 10

def initialize file, options = {}, attachment = nil
  @file             = file
  @current_format   = File.extname(@file.path)
  @basename         = File.basename(@file.path, @current_format)
  @meta             = ::Av.cli.identify(@file.path)
  @whiny            = options[:whiny].nil? ? true : options[:whiny]
  
  @convert_options  = options[:convert_options]
  @format           = options[:format]
  
  @geometry         = options[:geometry]
  unless @geometry.nil?
    modifier = @geometry[0]
    @geometry[0] = '' if ['#', '<', '>'].include? modifier
    @width, @height   = @geometry.split('x')
    @keep_aspect      = @width[0] == '!' || @height[0] == '!'
    @pad_only         = @keep_aspect    && modifier == '#'
    @enlarge_only     = @keep_aspect    && modifier == '<'
    @shrink_only      = @keep_aspect    && modifier == '>'
  end
  
  @time             = options[:time].nil? ? 3 : options[:time]
  @auto_rotate      = options[:auto_rotate].nil? ? false : options[:auto_rotate]
  @pad_color        = options[:pad_color].nil? ? "black" : options[:pad_color]
  
  attachment.instance_write(:meta, @meta) if attachment
end

Instance Attribute Details

#convert_optionsObject

Returns the value of attribute convert_options.



3
4
5
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 3

def convert_options
  @convert_options
end

#formatObject

Returns the value of attribute format.



3
4
5
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 3

def format
  @format
end

#geometryObject

Returns the value of attribute geometry.



3
4
5
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 3

def geometry
  @geometry
end

#whinyObject

Returns the value of attribute whiny.



3
4
5
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 3

def whiny
  @whiny
end

Instance Method Details

#log(message) ⇒ Object



76
77
78
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 76

def log message
  Paperclip.log "[transcoder] #{message}"
end

#makeObject

Performs the transcoding of the file into a thumbnail/video. Returns the Tempfile that contains the new image/video.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/paperclip/paperclip_processors/transcoder.rb', line 40

def make
  ::Av.cli.add_source @file
  dst = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
  dst.binmode
  
  if @meta
    log "Transocding supported file #{@file.path}"
    cli = ::Av.cli(quite: true)
    cli.add_source(@file.path)
    cli.add_destination(dst.path)
    cli.reset_input_filters
    if @convert_options.present?
      if @convert_options[:input]
        @convert_options[:input].each do |h|
          cli.add_input_param h
        end
      end
      if @convert_options[:output]
        @convert_options[:output].each do |h|
          cli.add_output_param h
        end
      end
    end

    begin
      cli.run
      log "Successfully transcoded #{@base} to #{dst}"
      return dst
    rescue Cocaine::ExitStatusError => e
      raise Paperclip::Error, "error while transcoding #{@basename}: #{e}" if @whiny
    end
  end
  # If the file is not supported, just return it
  @file
end