やりたかったこと
動画の初めの画像をthumbnailとして作成したかった。
thumbnail画像のuploaderは、carrierwave-base64を使って作成している。
画像・動画共に作成したthumbnailの保存はcarrierwave-base64にまとめてしまいたかったので、carrierwave-base64にbase64エンコードされた画像を渡したい。
メディアファイルは、api経由で、movie, imageに格納されて送られてくる。
以下のやり方でbase64エンコードした画像を受け取って、あげればよい。
thumbnail_controller.rb
def get_base64_video_thumbnail
i_path = @poster.movie.path
o_path = "./public/uploads/tmp/#{SecureRandom.hex(10)}.jpeg"
begin
system "ffmpeg -itsoffset -1 -i #{i_path} -s 300x300 -y -vframes 1 -f image2 -an #{o_path}"
ret_base64_img = "data:image/jpeg;base64," + Base64.encode64(File.new(o_path).read)
File.delete(o_path)
return ret_base64_img
rescue => e
render json: {
message: I18n.t("controllers.posters.fail_create_thumbnail")
}, :status => :unprocessable_entity and return
end
end