7

我正在使用carrierwave上传视频,然后有一个名为thumb的版本,带有一个自定义处理器,可以获取视频并使用streamio-ffmpeg创建屏幕截图。视频和文件均已正确上传,但是在调用 uploader.url(:thumb) 时,我得到:

ArgumentError:版本拇指不存在!

视频上传器.rb

require 'carrierwave/processing/mime_types'
require 'streamio-ffmpeg'

class VideoUploader < CarrierWave::Uploader::Base
    include CarrierWave::VideoConverter
    include CarrierWave::MimeTypes

    process :set_content_type

    storage :file

    version :thumb do
            process :create_thumb

            #def full_filename(for_file)
            #        "thumb_#{File.basename(for_file, File.extname(for_file))}.png"
            #end
    end

    def create_thumb
            cached_stored_file! if !cached?

            movie = FFMPEG::Movie.new(current_path)

            dirname = File.dirname(current_path)

            thumb_path = "#{File.join(dirname, File.basename(path, File.extname(path)))}.png"

            movie.screenshot(thumb_path, :seek_time => 5)
            File.rename thumb_path, current_path
    end

    def file_identifier
            model[:video]
    end

    # 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
            return "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.user_id}/#{model.id}"
    end
end

然后 model.video_url(:thumb) 返回参数错误。我不知道该怎么做或为什么版本没有注册任何帮助会很好,谢谢。

4

2 回答 2

1

使固定

导致错误的原因是重新启动服务器但没有重新启动 Rails 控制台。一旦我这样做了,参数错误就消失了,但我走错了路。所以我没有评论

        def full_filename(for_file)
                "thumb_#{File.basename(for_file, File.extname(for_file))}.png"
        end

并使用

[model].video.recreate_versions!

纠正路径或命名方案中可能发生的任何错误

于 2012-11-05T00:38:22.033 回答
0

您的 create_thumb 方法中的某个步骤很可能失败,因此拇指永远不会创建并且没有 URL。您的日志中是否有任何异常?

也许您需要指定 FFMPEG 二进制位置:

FFMPEG.ffmpeg_binary = '/usr/local/bin/ffmpeg'
于 2012-11-03T00:29:08.660 回答