lib/hydra/derivatives/ffmpeg.rb in hydra-derivatives-0.0.2 vs lib/hydra/derivatives/ffmpeg.rb in hydra-derivatives-0.0.3
- old
+ new
@@ -7,44 +7,17 @@
module Derivatives
module Ffmpeg
extend ActiveSupport::Concern
included do
- extend Open3
+ include ShellBasedProcessor
end
- def process
- directives.each do |name, args|
- format = args[:format]
- raise ArgumentError, "You must provide the :format you want to transcode into. You provided #{args}" unless format
- # TODO if the source is in the correct format, we could just copy it and skip transcoding.
- output_datastream_name = args[:datastream] || output_datastream_id(name)
- encode_datastream(output_datastream_name, format, new_mime_type(format), options_for(format))
- end
- end
- def encode_datastream(dest_dsid, file_suffix, mime_type, options = '')
- out_file = nil
- output_file = Dir::Tmpname.create(['sufia', ".#{file_suffix}"], Hydra::Derivatives.temp_file_base){}
- source_datastream.to_tempfile do |f|
- self.class.encode(f.path, options, output_file)
- end
- out_file = File.open(output_file, "rb")
- object.add_file_datastream(out_file.read, :dsid=>dest_dsid, :mimeType=>mime_type)
- File.unlink(output_file)
- end
-
module ClassMethods
def encode(path, options, output_file)
- command = "#{Hydra::Derivatives.ffmpeg_path} -y -i \"#{path}\" #{options} #{output_file}"
- stdin, stdout, stderr, wait_thr = popen3(command)
- stdin.close
- out = stdout.read
- stdout.close
- err = stderr.read
- stderr.close
- raise "Unable to execute command \"#{command}\"\n#{err}" unless wait_thr.value.success?
+ execute "#{Hydra::Derivatives.ffmpeg_path} -y -i \"#{path}\" #{options} #{output_file}"
end
end
end
end