当我尝试使用carrierwave-video-thumbnailer gem运行ffmpegthumbnailer时,我收到错误“没有这样的文件或目录”。
我确认ffmpegthumbnailer在我的计算机上正常工作,因为我可以直接从命令行生成视频中的缩略图。
从我的日志中,看起来我的应用认为它已生成缩略图。但是,当我查看目录时,没有文件tmpfile.png,我的应用程序因错误而失败。
有没有人成功使用carrierewave-video-thumbnailer gem来创建缩略图,如果有的话,我做错了什么?或者,如果有某种方法我可以在我的模型中运行ffmpegthumbnailer我也可以这样做。
以下是我的日志:
Running....ffmpegthumbnailer -i /Users/.../Website/public/uploads/tmp/1380315873-21590-2814/thumb_Untitled.mov -o /Users/.../Website/public/uploads/tmp/1380315873-21590-2814/tmpfile.png -c png -q 10 -s 192 -f
Success!
Errno::ENOENT: No such file or directory - (/Users/.../Website/public/uploads/tmp/1380315873-21590-2814/tmpfile.png, /Users/.../Website/public/uploads/tmp/1380315873-21590-2814/thumb_Untitled.mov)
video_path_uploader.rb
class VideoPathUploader < CarrierWave::Uploader::Base
include CarrierWave::Video
include CarrierWave::Video::Thumbnailer
process encode_video: [:mp4]
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
# storage :file
storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :thumb do
process thumbnail: [{format: 'png', quality: 10, size: 192, strip: true, logger: Rails.logger}]
def full_filename for_file
png_name for_file, version_name
end
end
def png_name for_file, version_name
%Q{#{version_name}_#{for_file.chomp(File.extname(for_file))}.png}
end
end
Video.rb
class Video < ActiveRecord::Base
# maybe we should add a title attribute to the video?
attr_accessible :position, :project_id, :step_id, :image_id, :saved, :embed_url, :thumbnail_url, :video_path
mount_uploader :video_path, VideoPathUploader
...
end
答案 0 :(得分:1)
我收到了和你一样的错误。事实证明,当gem试图运行 ffmpegthumbnailer 命令时,它失败了,因为输入和输出文件路径包含空格。
我通过分配宝石并改变来解决这个问题:
cmd = %Q{#{CarrierWave::Video::Thumbnailer::FFMpegThumbnailer.binary} -i #{input_path} -o #{output_path} #{options.to_cli}}.rstrip
到
cmd = %Q{#{CarrierWave::Video::Thumbnailer::FFMpegThumbnailer.binary} -i "#{input_path}" -o "#{output_path}" #{options.to_cli}}.rstrip
文件中的:
lib/carrierwave/video/thumbnailer/ffmpegthumbnailer.rb
即。我用双引号包围了'input_path'和'output_path'参数。
这解决了我的问题,并且在与原始电影文件相同的目录中成功生成了png缩略图。作为参考,我正在为使用多部分表单上传的.mov quicktime文件生成缩略图。
我正在使用 carrierwave-video-thumbnailer-0.1.4