Rails 3: Как я могу заставить Paperclip-FFMPEG работать?

#ruby-on-rails-3 #ffmpeg #paperclip

#ruby-on-rails-3 #ffmpeg #скрепка

Вопрос:

У меня есть Rails 3.0.3 с этими драгоценными камнями:

  • отложенное задание 2.1.4
  • отложенный бумажный клип 0.7.1
  • скрепка 2.3.16
  • скрепка для бумаги-ffmpeg 0.7.0

(Эта комбинация очень специфична. Некоторые новые драгоценные камни не будут работать с другими.)

Вот моя видеомодель:

 class Video < Upload
  has_attached_file :file, :default_style => :view, :processors => [:ffmpeg],
    :url => '/system/:class/:attachment/:id/:style/:basename.:extension',
    :path => ':rails_root/public/system/:class/:attachment/:id/:style' 
        '/:basename.:extension',
    :default_url => '/images/en/processing.png',
    :styles => {
      :mp4video => { :geometry => '520x390', :format => 'mp4',
        :convert_options => { :output => { :vcodec => 'libx264',
          :vpre => 'ipod640', :b => '250k', :bt => '50k',
          :acodec => 'libfaac', :ab => '56k', :ac => 2 } } },
      :oggvideo => { :geometry => '520x390', :format => 'ogg',
        :convert_options => { :output => { :vcodec => 'libtheora',
          :b => '250k', :bt => '50k', :acodec => 'libvorbis',
          :ab => '56k', :ac => 2 } } },
      :view => { :geometry => '520x390', :format => 'jpg', :time => 1 },
      :preview => { :geometry => '160x120', :format => 'jpg', :time => 1 }
    }
  validates_attachment_content_type :file, :content_type => VIDEOTYPES,
    :if => Proc.new { |upload| upload.file.file? }
  process_in_background :file
end
  

При создании нового видеообъекта с вложением оригинал сохраняется, но преобразование выполняться не будет. Даже звонок Video.last.file.reprocess! ни к чему не приведет, кроме возвращения true . (Не уверен, что в данном случае означает «true», поскольку это не сработало.)

Я попробовал жестко закодировать путь к ffmpeg в Paperclip::options[:command_path] . Я даже попытался удалить файл paperclip-ffmpeg.rb и заменить его пустым файлом. Действительно думая, что я получу исключение, выполнив позже, вместо этого я просто снова получил «true».

Такое ощущение, что загружается paperclip-ffmpeg.rb, потому что это требуется config/application.rb , но при попытке сгенерировать миниатюру или конвертировать видео в нем ничего не вызывается.

Кто-нибудь может мне с этим помочь? Заранее спасибо!

Комментарии:

1. У вас есть какой-нибудь учебник о том, как использовать эти 4 драгоценных камня вместе (delayed_job, delayed_paperclip, paperclip, скрепка для бумаги-ffmpeg), все, что я хочу сделать, это загрузить видео и воспроизвести его! и я не могу найти прямой способ сделать это до сих пор!

2. Привет, извините, что только сейчас заметил ваш комментарий. К сожалению, у меня нет руководства, и у меня больше нет кода, который я создал, но позвольте мне добавить, что это потребовало немалой работы. Я помню, что мне приходилось конвертировать загруженные видео в три формата, чтобы они работали во всех браузерах. Я хотел бы быть более полезным. Удачи!

Ответ №1:

Похоже, я решил эту проблему сам, и это было вызвано тем, что я сделал.

Я написал свой собственный скрипт для импорта файлов и базы данных из старого приложения в Rails. Файлы были на месте, но кто-то обновил базу данных неправильными расширениями файлов (в данном случае «.jpg» вместо «.MOV»).

Paperclip сначала проверит, существует ли исходный файл, прежде чем вызывать какой-либо процессор, на основе имени файла, хранящегося в базе данных. Поскольку этого не произошло, Paperclip просто ничего не сделал. Как только я исправил данные, все заработало, как ожидалось. (У меня были проблемы с FFMPEG, но это другая проблема.)

Приношу свои извинения, если я потратил чье-либо время. Надеюсь, это может быть кому-то полезно.

Ответ №2:

Я использую аналогичную конфигурацию для одного из моих проектов (но Rails 3.1.1), и все работает нормально. Я добавил paperclip-ffmpeg в свой Gemfile не с помощью config / application.rb. Может быть, это поможет!?

Комментарии:

1. Оказывается, это было вызвано моей ошибкой. Извините за это. Более подробная информация в моем ответе.