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 или мне нужно вернуться с помощью скрепки или другого драгоценного камня?