ruby-on-rails - ffmpegthumbnailer 错误与carrierwave-video-thumbnailer

标签 ruby-on-rails ffmpeg thumbnails carrierwave

当我尝试使用 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

视频.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

最佳答案

我收到了和你一样的错误。原来,当 gem 试图运行 ffmpegthumbnailer 命令失败,因为输入和输出文件路径包含空格。

我通过 fork gem 并更改来解决这个问题:

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 文件生成缩略图。

我正在使用 载波视频缩略图-0.1.4

关于ruby-on-rails - ffmpegthumbnailer 错误与carrierwave-video-thumbnailer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060113/

相关文章:

c++ - 如何将图像显示为缩略图

ruby-on-rails - 如何使ElasticSearch Client在整个应用程序中可用?

ruby-on-rails - 安装 unf_ext 时 bundle 安装失败。 "Cannot allocate memory error when installing unf_ext"

ffmpeg - 使用 FFmpeg 计算 VMAF,错误 : Filter libvmaf has an unconnected output

ffmpeg - 输入文本文件中的持续时间使用

python - 如何在 Google App Engine 上制作网页缩略图?

ruby-on-rails - 当前部署 Rails 应用程序的标准方法是什么?

ruby-on-rails - Carrierwave/Fog - 参数错误,无法识别提供者

ffmpeg - 从 rtp 数据包中解析 MPEG4 帧

Magento resize() 图像质量 : dirty white background