I try to transcode uploaded video file in project based on shrine-tus-demo and fail to do so.
Here's my code:
require "./config/shrine"
require 'streamio-ffmpeg'
require 'byebug'
class VideoUploader < Shrine
plugin :determine_mime_type
plugin :restore_cached_data
plugin :processing
plugin :versions
process(:store) do |io, context|
# byebug
mov = io.download
video = Tempfile.new(["video", ".h264"], binmode: true)
screenshot = Tempfile.new(["screenshot", ".jpg"], binmode: true)
movie = FFMPEG::Movie.new(mov.path)
movie.transcode(video.path)
movie.screenshot(screenshot.path)
mov.delete
{original: io, video: video, screenshot: screenshot}
end
end
Here's the output of "Movie.first.video" after uploading and promoting:
irb(main):041:0> Movie.first.video
I, [2017-01-07T11:51:21.944015 #88104] INFO -- : (0.000221s) SELECT * FROM "movies" LIMIT 1
Shrine::Error: {"original"=>{"id"=>"1d2559a120cf172bc7aefab1dbba1092.mp4", "storage"=>"store", "metadata"=>{"filename"=>"hero2.mp4", "size"=>86499387, "mime_type"=>"video/mp4"}}, "video"=>{"id"=>"935e4c25e09356a683e9c65d87a1fcfb.h264", "storage"=>"store", "metadata"=>{"filename"=>"video20170107-94245-1xeyoly.h264", "size"=>8781747, "mime_type"=>"application/octet-stream"}}, "screenshot"=>{"id"=>"be2bda285797aca552ba8a37a94b41db.jpg", "storage"=>"store", "metadata"=>{"filename"=>"screenshot20170107-94245-14niirf.jpg", "size"=>39997, "mime_type"=>"image/jpeg"}}} isn't valid uploaded file data
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:713:in `initialize'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:172:in `new'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:172:in `uploaded_file'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:626:in `uploaded_file'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:624:in `uploaded_file'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:592:in `get'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:404:in `video'
from (irb):41
from /Users/user/.rbenv/versions/2.3.3/bin/irb:11:in `<main>'
I try to get files from the hash, but get the same error:
irb(main):043:0> Movie.first.video[:original]
I, [2017-01-07T11:53:43.019084 #88104] INFO -- : (0.000239s) SELECT * FROM "movies" LIMIT 1
Shrine::Error: {"original"=>{"id"=>"1d2559a120cf172bc7aefab1dbba1092.mp4", "storage"=>"store", "metadata"=>{"filename"=>"hero2.mp4", "size"=>86499387, "mime_type"=>"video/mp4"}}, "video"=>{"id"=>"935e4c25e09356a683e9c65d87a1fcfb.h264", "storage"=>"store", "metadata"=>{"filename"=>"video20170107-94245-1xeyoly.h264", "size"=>8781747, "mime_type"=>"application/octet-stream"}}, "screenshot"=>{"id"=>"be2bda285797aca552ba8a37a94b41db.jpg", "storage"=>"store", "metadata"=>{"filename"=>"screenshot20170107-94245-14niirf.jpg", "size"=>39997, "mime_type"=>"image/jpeg"}}} isn't valid uploaded file data
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:713:in `initialize'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:172:in `new'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:172:in `uploaded_file'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:626:in `uploaded_file'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:624:in `uploaded_file'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:592:in `get'
from /Users/user/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/shrine-2.5.0/lib/shrine.rb:404:in `video'
from (irb):43
from /Users/user/.rbenv/versions/2.3.3/bin/irb:11:in `<main>'
I wonder what am I doing wrong?