Amazon s3 使用Silence上载视频文件并生成缩略图
我想使用圣殿宝石上传视频文件,转码,并从视频生成缩略图 我正在尝试将埃里克·达斯特朗的照片转换成视频。我在创建视频上传程序时遇到问题。我基于 事实上,那个位置没有文件。那么等待上传时文件存储在哪里 此外,使用演示将照片上载到AWS(production env),对象存储在bucket中名为“照片”的文件夹中。Shirike使用表名来命名文件夹。是否可以创建替代文件夹名称和嵌套文件夹名称 谢谢你-看起来像一块神奇的宝石!试着更好地理解它Amazon s3 使用Silence上载视频文件并生成缩略图,amazon-s3,ruby-on-rails-5,shrine,Amazon S3,Ruby On Rails 5,Shrine,我想使用圣殿宝石上传视频文件,转码,并从视频生成缩略图 我正在尝试将埃里克·达斯特朗的照片转换成视频。我在创建视频上传程序时遇到问题。我基于 事实上,那个位置没有文件。那么等待上传时文件存储在哪里 此外,使用演示将照片上载到AWS(production env),对象存储在bucket中名为“照片”的文件夹中。Shirike使用表名来命名文件夹。是否可以创建替代文件夹名称和嵌套文件夹名称 谢谢你-看起来像一块神奇的宝石!试着更好地理解它 Thx进一步深入研究文档,我只剩下一个问题就解决了这个问题
Thx进一步深入研究文档,我只剩下一个问题就解决了这个问题-是否可以控制原始和拇指上传到AWS bucket中的哪些文件夹?Thx 解决方案:
require "streamio-ffmpeg"
require "tempfile"
class VideoUploader < ImageUploader
plugin :add_metadata
plugin :validation_helpers
plugin :processing
plugin :versions
plugin :delete_raw
add_metadata do |io, context|
movie = Shrine.with_file(io) { |file| FFMPEG::Movie.new(file.path) }
{ "duration" => movie.duration,
"bitrate" => movie.bitrate,
"resolution" => movie.resolution,
"frame_rate" => movie.frame_rate
}
end
process(:store) do |io, context|
versions = {original: io}
io.download do |original|
screenshot1 = Tempfile.new(["screenshot1", ".jpg"], binmode: true)
screenshot2 = Tempfile.new(["screenshot2", ".jpg"], binmode: true)
screenshot3 = Tempfile.new(["screenshot3", ".jpg"], binmode: true)
screenshot4 = Tempfile.new(["screenshot4", ".jpg"], binmode: true)
movie = FFMPEG::Movie.new(original.path)
movie.screenshot(screenshot1.path, seek_time: 5, resolution: '640x480')
movie.screenshot(screenshot2.path, seek_time: 10, resolution: '640x480')
movie.screenshot(screenshot3.path, seek_time: 15, resolution: '640x480')
movie.screenshot(screenshot4.path, seek_time: 20, resolution: '640x480')
[screenshot1, screenshot2, screenshot3, screenshot4].each(&:open) # refresh file descriptors
versions.merge!(screenshot1: screenshot1, screenshot2: screenshot2, screenshot3: screenshot3, screenshot4: screenshot4)
end
versions
end
Attacher.validate do
validate_max_size 100.megabyte, message: "is too large (max is 100 MB)"
validate_mime_type_inclusion ALLOWED_TYPES
end
end
需要“streamio ffmpeg”
需要“临时文件”
类视频上传器<图像上传器
插件:添加元数据
插件:验证帮助程序
插件:处理
插件:版本
插件:删除_raw
添加元数据do | io,上下文|
movie=shire.with_file(io){| file | FFMPEG::movie.new(file.path)}
{“duration”=>movie.duration,
“比特率”=>movie.bitrate,
“分辨率”=>movie.resolution,
“帧速率”=>movie.frame\u rate
}
结束
进程(:存储)do | io,上下文|
版本={original:io}
io.download do |原件|
screenshot1=Tempfile.new([“screenshot1”,“.jpg”],binmode:true)
screenshot2=Tempfile.new([“screenshot2”,“.jpg”],binmode:true)
screenshot3=Tempfile.new([“screenshot3”,“.jpg”],binmode:true)
screenshot4=Tempfile.new([“screenshot4”,“.jpg”],binmode:true)
movie=FFMPEG::movie.new(original.path)
电影。截图(截图1.path,搜索时间:5,分辨率:'640x480')
电影。截图(截图2.path,搜索时间:10,分辨率:'640x480')
电影。截图(截图3.path,搜索时间:15,分辨率:'640x480')
电影。截图(截图4.path,搜索时间:20,分辨率:'640x480')
[screenshot1,screenshot2,screenshot3,screenshot4]。每个(&:打开)#刷新文件描述符
版本。合并!(截图1:screenshot1,screenshot2:screenshot2,screenshot3:screenshot3,screenshot4:screenshot4)
结束
版本
结束
Attacher.do
验证\u max\u size 100.MB,消息:“太大(最大为100 MB)”
验证\u mime\u类型\u允许的包含\u类型
结束
结束
/var/folders/mm/_j8x4k2176jcv31zvbc497_c0000gp
/T/shrine20190607-24438-4f3jz2.m4v: No such file or directory
require "streamio-ffmpeg"
require "tempfile"
class VideoUploader < ImageUploader
plugin :add_metadata
plugin :validation_helpers
plugin :processing
plugin :versions
plugin :delete_raw
add_metadata do |io, context|
movie = Shrine.with_file(io) { |file| FFMPEG::Movie.new(file.path) }
{ "duration" => movie.duration,
"bitrate" => movie.bitrate,
"resolution" => movie.resolution,
"frame_rate" => movie.frame_rate
}
end
process(:store) do |io, context|
versions = {original: io}
io.download do |original|
screenshot1 = Tempfile.new(["screenshot1", ".jpg"], binmode: true)
screenshot2 = Tempfile.new(["screenshot2", ".jpg"], binmode: true)
screenshot3 = Tempfile.new(["screenshot3", ".jpg"], binmode: true)
screenshot4 = Tempfile.new(["screenshot4", ".jpg"], binmode: true)
movie = FFMPEG::Movie.new(original.path)
movie.screenshot(screenshot1.path, seek_time: 5, resolution: '640x480')
movie.screenshot(screenshot2.path, seek_time: 10, resolution: '640x480')
movie.screenshot(screenshot3.path, seek_time: 15, resolution: '640x480')
movie.screenshot(screenshot4.path, seek_time: 20, resolution: '640x480')
[screenshot1, screenshot2, screenshot3, screenshot4].each(&:open) # refresh file descriptors
versions.merge!(screenshot1: screenshot1, screenshot2: screenshot2, screenshot3: screenshot3, screenshot4: screenshot4)
end
versions
end
Attacher.validate do
validate_max_size 100.megabyte, message: "is too large (max is 100 MB)"
validate_mime_type_inclusion ALLOWED_TYPES
end
end