Как исправить расширение файла для генерации миниатюр фильма с CarrierWave - PullRequest
4 голосов
/ 03 февраля 2012

Я хочу загрузить файлы и преобразовать миниатюры для него.

Мой код:

require 'streamio-ffmpeg'
module CarrierWave
  module FFMPEG
    module ClassMethods
      def resample(bitrate)
        process :resample => bitrate
      end

      def gen_video_thumb(width, height)
        process :gen_video_thumb => [width, height]
      end
    end

    #def is_video?
    #  ::FFMPEG::Movie.new(File.open(store_path)).frame_rate != nil
    #end

    def gen_video_thumb(width, height)
      directory = File.dirname(current_path)
      tmpfile = File.join(directory, "tmpfile")

      FileUtils.move(current_path, tmpfile)
      file = ::FFMPEG::Movie.new(tmpfile)
      file.transcode(current_path, "-ss 00:00:01 -an -r 1 -vframes 1 -s #{width}x#{height}")

      FileUtils.rm(tmpfile)
    end

    def resample(bitrate)
      directory = File.dirname(current_path)
      tmpfile = File.join(directory, "tmpfile")

      File.move(current_path, tmpfile)

      file = ::FFMPEG::Movie.new(tmpfile)
      file.transcode(current_path, :audio_bitrate => bitrate)

      File.delete(tmpfile)
    end
  end
end

Мой загрузчик имеет

  version :thumb do
    process :resize_to_fill => [100, 70], :if=> :image?
    process :gen_video_thumb => [100, 70], :if=> :video? do
      process :convert => 'png'
    end
  end

и функции.1009 *

  protected

  def image?(new_file)
    ::FFMPEG::Movie.new(new_file.file.path).frame_rate == nil
  end

  def video?(new_file)
    ::FFMPEG::Movie.new(new_file.file.path).frame_rate != nil
  end

Но проблема в том, что видео загружено, видео thubmail генерируется очень хорошо.Но у него нет расширения png.Если я загружаю файл mp4, его миниатюра также имеет расширение mp4.но это изображение можно посмотреть в браузере.

Как исправить проблему с расширением?Может ли кто-нибудь указать на проблему в коде?

1 Ответ

2 голосов
/ 12 декабря 2012

Я недавно решил эту проблему, переопределив метод full_filename для :thumb версии

version :thumb do
  # do your processing
  process :whatever

  # redefine the name for this version
  def full_filename(for_file=file)
    super.chomp('mp4') + 'png'
  end
end

Я позвонил super, чтобы получить имя по умолчанию :thumb, а затем изменил расширение с mp4 на png, но вы могли сделать что угодно.

Для получения дополнительной информации в carrierwave wiki есть хорошая статья на Как: настроить имена файлов вашей версии . На других вики-страницах вы найдете множество идей.

...