Rails использует ffmpeg, чтобы сделать скриншот видео

Я хочу использовать ffmpeg, чтобы сделать скриншот загруженного видео.

Что я делаю, так это: загружая видео с carrierwave в amazonS3, когда или во время его загрузки, я хочу сделать скриншот в качестве эскиза для этого видео.

Как я могу сделать это? Как я могу вызвать ffmpeg с рельсами?

Спасибо за вашу помощь

2 ответа

Решение

Для этого мы будем использовать gem streamio-ffmpeg запустить наши команды FFMPEG из библиотеки рельсов

require 'streamio-ffmpeg'
module ControllerVideoProcessor
   def thumbnail path, second
     movie = FFMPEG::Movie.new(path)
     return movie.screenshot("some/temporal/path/screenshot.jpg", :seek_time => second)
   end
end

Как мы видим, у нас есть функция, которая получает путь к входному видео, и вторую мы хотим получить миниатюру. Это так же просто, как запустить команду "скриншот" библиотеки streamio, и все. Он вернет объект FFMPEG, содержащий изображение и его атрибуты.

Также, если вы используете carrierwave драгоценный камень для загрузки ваших файлов вы можете использовать плагин carrierwave gem 'video_thumbnailer'

пример

class VideoUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  include VideoThumbnailer
  storage :file

  version :thumb do
     process generate_thumb:[{quality:5, time_frame: '00:0:01', file_extension: 'jpeg'}]
    def full_filename for_file
      png_name for_file, version_name, "jpeg"
    end
  end

  def png_name for_file, version_name, format
    %Q{#{version_name}_#{for_file.chomp(File.extname(for_file))}.#{format}}
  end

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

  def extension_white_list
    %w( mp4 jpg jpeg gif png )
  end
end

Ссылку и дополнительную информацию об этом вы можете найти здесь

http://ron-on-rails.tumblr.com/post/33720054493/getting-thumbnails-of-a-video-using-ffmpeg-and

https://github.com/teenacmathew/Video-Thumbnailer

Вы можете использовать некоторый гем, который может общаться с ffmpeg, как этот гем: https://github.com/streamio/streamio-ffmpeg

или вы можете вызвать его через командную строку, аналогичную предложенной в этом вопросе: вызов команд оболочки из Ruby

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