我需要使用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}'的文件与原始文件一起放入。但我需要处理这个新文件。
答案 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
是当前文件的路径,必须在附加之前进行修改。