Carrierwave路径到上传器中的版本化文件

时间:2015-05-13 04:19:34

标签: ruby-on-rails carrierwave

我需要使用carrierwave转换上传的视频文件。者:

<div class='tooltip'>
  <span class='tooltip-content'>
    Hello, world. This is a tooltip! It's fancy and word-wraps
  </div>
</div>

</br>
</br>
</br>

<div class='tooltip'>
  <span class='tooltip-content'>
    Hello, world. This is a tooltip! It's fancy, no?
  </div>
</div>

但是如何获取输出文件路径并告诉carrierwave附加此文件? 如果我硬编码class MediaItemUploader < CarrierWave::Uploader::Base version :video_for_device, if: :video? do process :encode_video_for_device end storage :file private def video? file if file.path.ends_with?('avi') || ... true else false end end def encode_video_for_device input_file = file.path output_file = # How to get the output file path? system("ffmpeg -i #{input_file} -vcodec libx264 -acodec aac -strict -2 #{output_file}") end end ,那么ffmpeg工作正常,但是carrierwave会将名为'video_for_device _#{original_filename}'的文件与原始文件一起放入。但我需要处理这个新文件。

2 个答案:

答案 0 :(得分:0)

你必须在方法的最后返回处理过的文件,所以这应该这样做:

def encode_video_for_device
  input_file = file.path
  output_file = "/whatever/temp/filename"
  system("ffmpeg -i #{input_file} -vcodec libx264 -acodec aac -strict -2 #{output_file}")
  File.new(output_file)
end

答案 1 :(得分:0)

这是一个解决方案:

z_cross = sum(1 for i, _ in enumerate(a) if (i+1 < len(a)) if a[i]*a[i+1]<0)

def encode_video_for_device tmp_path = File.join File.dirname(current_path), "#{SecureRandom.hex}.mp4" system("ffmpeg -i #{current_path} -vcodec libx264 -acodec aac -strict -2 #{tmp_path}") File.rename tmp_path, current_path end 是当前文件的路径,必须在附加之前进行修改。