* Fix media processing getting stuck on too much stdin/stderr See thoughtbot/terrapin#5 * Remove dependency on paperclip-av-transcoder gem * Remove dependency on streamio-ffmpeg gem * Disable stdin on ffmpeg process
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'mime/types/columnar'
 | |
| 
 | |
| module Paperclip
 | |
|   class ImageExtractor < Paperclip::Processor
 | |
|     def make
 | |
|       return @file unless options[:style] == :original
 | |
| 
 | |
|       image = extract_image_from_file!
 | |
| 
 | |
|       unless image.nil?
 | |
|         begin
 | |
|           attachment.instance.thumbnail = image if image.size.positive?
 | |
|         ensure
 | |
|           # Paperclip does not automatically delete the source file of
 | |
|           # a new attachment while working on copies of it, so we need
 | |
|           # to make sure it's cleaned up
 | |
| 
 | |
|           begin
 | |
|             image.close(true)
 | |
|           rescue Errno::ENOENT
 | |
|             nil
 | |
|           end
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       @file
 | |
|     end
 | |
| 
 | |
|     private
 | |
| 
 | |
|     def extract_image_from_file!
 | |
|       dst = Tempfile.new([File.basename(@file.path, '.*'), '.png'])
 | |
|       dst.binmode
 | |
| 
 | |
|       begin
 | |
|         command = Terrapin::CommandLine.new('ffmpeg', '-i :source -loglevel :loglevel -y :destination', logger: Paperclip.logger)
 | |
|         command.run(source: @file.path, destination: dst.path, loglevel: 'fatal')
 | |
|       rescue Terrapin::ExitStatusError
 | |
|         dst.close(true)
 | |
|         return nil
 | |
|       rescue Terrapin::CommandNotFoundError
 | |
|         raise Paperclip::Errors::CommandNotFoundError, 'Could not run the `ffmpeg` command. Please install ffmpeg.'
 | |
|       end
 | |
| 
 | |
|       dst
 | |
|     end
 | |
|   end
 | |
| end
 |