Rails 6 ActiveStorage перекодирует видео

Пытался использовать ActiveStorage::Previewer:VideoPreviewer для перекодирования исходных видео в меньшее разрешение и длину, но кажется, что он может только создавать / извлекать изображение из видео.

Также попытался создать собственный VideoPreviewer с помощью команды ffmpeg для перекодирования видео, и рельсы, кажется, всегда отдают предпочтение ActiveStorage::Previewer::VideoPreviewer по умолчанию. Даже если я выкину предварительный просмотр видео по умолчанию из средства предварительного просмотра rails и поставлю пользовательский, rails все равно попытается использовать imagemagick и генерирует изображения

class VideoPreviewer < ActiveStorage::Previewer
  ARGS = %w"ffmpeg args..."

  def self.accept?(blob)
    blob.content_type == 'video/mp4'
  end

  def preview
    download_blob_to_tempfile do |input|
      draw "ffmpeg", "-y", "-i", input.path, *ARGS do |output|
        yield io: output, filename: "#{blob.filename.base}.mp4", content_type: "video/mp4"
      end
    end
  end

  private

  def capture(*argv, to:)
    argv << to.path
    to.binmode
    IO.popen(argv) { |out| puts out.read }
    to.rewind
  end
end

Есть ли способ добиться этого с помощью ActiveStorage или мне нужно вернуться с помощью скрепки или другого драгоценного камня?

0 ответов

Другие вопросы по тегам