2013-03-28 2 views
2

У меня есть модель с CarrierWave пользователя:CarrierWave не экономили версии с пользовательским процессором

# app/models/video.rb 

class Video < ActiveRecord::Base 

    mount_uploader :the_video, VideoUploader 

end 

Uploader выглядит следующим образом:

# app/uploaders/video_uploader.rb 

class VideoUploader < CarrierWave::Uploader::Base 
    include CarrierWave::FLV 

    storage :file 

    def move_to_cache 
    true 
    end 

    def move_to_store 
    true 
    end 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{model.id}" 
    end 

    def extension_white_list 
    %w(avi mp4 mpg flv) 
    end 

    version :flv do 
    process :put_to => 'flv' 
    end 

end 

И самая интересная часть - пользовательский процессор:

# lib/carrier_wave/flv.rb 

require 'streamio-ffmpeg' 

module CarrierWave 
    module FLV 
    extend ActiveSupport::Concern 

    module ClassMethods 
     def put_to(format) 
     process :put_to => format 
     end 
    end 

    def put_to(format = 'flv') 
     directory = File.dirname(current_path) 
     tmp_path = File.join(directory, "tmpfile") 

     File.rename current_path, tmp_path 

     file = ::FFMPEG::Movie.new(tmp_path) 
     file.transcode(current_path, {audio_codec: 'copy', video_codec: 'copy'}) 

     File.delete tmp_path 
    end 

    end 
end 

Следующий шаг:

irb(main):005:0> v = Video.new 
irb(main):005:0> v.the_video = File.open('/path/to/video.mp4') 
irb(main):005:0> v.save 
irb(main):005:0> v.the_video.size 
=> 0 
irb(main):005:0> v.the_video.flv.size 
=> 0 

Почему CarrierWave не сохранил оригинальную и flv-версию?

И еще одно, когда я комментирую блок версии в video_uploader.rb - все работает нормально.

ответ

1

Я не думаю, что блок version будет работать, поскольку преобразование видео не так просто, как преобразование изображения. Вам необходимо обратиться к различным типам кодеков, которые будут использоваться для преобразования.

Если вы действительно хотите изменить/манипулировать порно-смотреть на этой ссылке Он описывает драгоценный камень под названием: zencoder

http://www.nickdesteffen.com/blog/video-encoding-with-uploadify-carrierwave-and-zencoder

Надеется, что это помогает.

+0

У меня проблема не в конвертации части. Например, если мы удалим содержимое метода put_to, оно не будет работать должным образом. – peanut

+0

Да, и это будет только оригинальный формат? – uday

+0

Да, в этом случае исходный файл не сохраняется :(Блок версии в video.rb тихо сломал даже первоначальное сохранение файла. – peanut

Смежные вопросы