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
Вы можете использовать некоторый гем, который может общаться с ffmpeg, как этот гем: https://github.com/streamio/streamio-ffmpeg
или вы можете вызвать его через командную строку, аналогичную предложенной в этом вопросе: вызов команд оболочки из Ruby