質問編集履歴
3
調査内容追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,7 +17,14 @@
|
|
17
17
|
どなたか同様の症状を解決したことがあれば解決策をご教示ください。
|
18
18
|
また、まったく別の方法でもいいので動画投稿時に作成したscreenshotを表示させる方法がありましたら教えてください!
|
19
19
|
|
20
|
+
###2015/11/10追記###
|
21
|
+
heroku logs --tailで@m.movie.url(:screenshot)と二回打つとURLが読み出せることがわかりました。
|
22
|
+
しかし、その場合は拡張子が何もついていません。
|
20
23
|
|
24
|
+
versionで保存したファイルのURLが保存されるところに何かまずいところがあるのでしょうか?
|
25
|
+
また、@m.movie.current_pathと入力した場合、nilが返却されます。ローカル環境では問題ないのですがherokuの場合、何か設定が必要だったりするのでしょうか?
|
26
|
+
|
27
|
+
|
21
28
|
###ソースコード
|
22
29
|
動画投稿部分
|
23
30
|
```ruby
|
2
質問内容の改善
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
heroku上でffmpegとcarrierwaveを使用して
|
1
|
+
heroku上でffmpegとcarrierwaveを使用して作成したscreenshotを表示する方法について
|
body
CHANGED
@@ -1,26 +1,23 @@
|
|
1
1
|
###前提・実現したいこと
|
2
|
-
|
2
|
+
ffmpeg&carrierwaveを使用して動画投稿時にその動画のscreenshotを作成したいと考えています。
|
3
|
-
その中で投稿した動画のスクリーンショットを撮るためにffmpegのbuildpacksを追加しました
|
4
|
-
追加したbuildpacksは以下です
|
5
|
-
https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git
|
6
3
|
|
7
|
-
追加方法はheroku buildpacks:addで追加しています。heroku run "ffmpeg --version"で読み出しも行えます。
|
8
|
-
しかし、追加した後いざ動画投稿してみてもスクリーンショットが作成されません。
|
9
|
-
heroku
|
4
|
+
現在、プラットフォームはheroku、ホスト先はcloudinaryを使用して動画投稿部分の作成までは完了しました。
|
10
5
|
|
11
|
-
|
6
|
+
しかし、作成したscreenshotの読み出しを行っているページにアクセスしても「We're sorry, but something went wrong.If you are the application owner check the logs for more information.」とエラー画面が表示されるのみとなってしまいます。
|
12
7
|
|
13
|
-
###2015/11/10 追記###
|
14
|
-
|
8
|
+
どうやら、screenshotの表示に失敗しているようでheroku logs --tailで画像表示部分を実行してみたところ以下のエラーが出ました
|
15
9
|
|
16
10
|
irb(main):003:0> @m.movie.url(:screenshot)
|
17
11
|
ArgumentError: wrong number of arguments (0 for 1)
|
18
12
|
from /app/app/uploaders/movie_uploader.rb:32:in `dirname'
|
19
13
|
from /app/app/uploaders/movie_uploader.rb:32:in `screenshot'
|
20
14
|
|
21
|
-
た
|
15
|
+
また、動画の方は@m.movie.urlで投稿先のURLの読み出しが行えますし、その動画の拡張子をjpgにした場合、変換した画像が読み込めます。ただし、movie_uploader.rb内の処理では「screenshot.jpg」にしているつもりなんですが・・・
|
22
16
|
|
17
|
+
どなたか同様の症状を解決したことがあれば解決策をご教示ください。
|
18
|
+
また、まったく別の方法でもいいので動画投稿時に作成したscreenshotを表示させる方法がありましたら教えてください!
|
23
19
|
|
20
|
+
|
24
21
|
###ソースコード
|
25
22
|
動画投稿部分
|
26
23
|
```ruby
|
@@ -56,7 +53,6 @@
|
|
56
53
|
end
|
57
54
|
|
58
55
|
def screenshot
|
59
|
-
directory = File.dirname
|
60
56
|
tmpfile = File.join(File.dirname(current_path), "tmpfile")
|
61
57
|
File.rename(current_path, tmpfile)
|
62
58
|
movie = FFMPEG::Movie.new(tmpfile)
|
1
タイトル変更と問題点、ソースコードの記載変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
heroku上でffmpegと
|
1
|
+
heroku上でffmpegとcarrierwaveを使用して動画投稿時にscreenshotを作成する方法について
|
body
CHANGED
@@ -10,29 +10,65 @@
|
|
10
10
|
|
11
11
|
無事ffmpegが動作する方法や、こうすれば動作していない原因がわかる等のアドバイスがありましたらいただけないでしょうか?
|
12
12
|
|
13
|
+
###2015/11/10 追記###
|
14
|
+
heroic logs --tailで画像表示部分を実行してみたところ以下のエラーが出ました
|
15
|
+
|
16
|
+
irb(main):003:0> @m.movie.url(:screenshot)
|
17
|
+
ArgumentError: wrong number of arguments (0 for 1)
|
18
|
+
from /app/app/uploaders/movie_uploader.rb:32:in `dirname'
|
19
|
+
from /app/app/uploaders/movie_uploader.rb:32:in `screenshot'
|
20
|
+
|
21
|
+
ただしもう一度@m.movie.url(:screenshot)を読み出すと問題なくurlが読み出せます
|
22
|
+
|
23
|
+
|
13
24
|
###ソースコード
|
14
|
-
|
25
|
+
動画投稿部分
|
15
26
|
```ruby
|
27
|
+
# movie_uploader.rb
|
16
|
-
#
|
28
|
+
# encoding: utf-8
|
17
29
|
require 'streamio-ffmpeg'
|
30
|
+
require 'carrierwave'
|
31
|
+
class MovieUploader < CarrierWave::Uploader::Base
|
18
32
|
|
33
|
+
if Rails.env.production?
|
34
|
+
include Cloudinary::CarrierWave
|
19
|
-
|
35
|
+
else
|
36
|
+
storage :file
|
37
|
+
end
|
38
|
+
# Include RMagick or MiniMagick support:
|
39
|
+
include CarrierWave::RMagick
|
40
|
+
# include CarrierWave::MiniMagick
|
41
|
+
|
42
|
+
def store_dir
|
43
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def extension_white_list
|
47
|
+
%w(jpg jpeg gif png mov wmv mp4 flv avi)
|
48
|
+
end
|
49
|
+
|
20
50
|
version :screenshot do
|
21
51
|
process :screenshot
|
52
|
+
process :convert => "jpg"
|
22
53
|
def full_filename (for_file = model.logo.file)
|
23
54
|
"screenshot.jpg"
|
24
55
|
end
|
25
56
|
end
|
26
57
|
|
27
58
|
def screenshot
|
59
|
+
directory = File.dirname
|
28
60
|
tmpfile = File.join(File.dirname(current_path), "tmpfile")
|
29
|
-
|
30
61
|
File.rename(current_path, tmpfile)
|
31
|
-
|
32
62
|
movie = FFMPEG::Movie.new(tmpfile)
|
33
|
-
movie.screenshot(current_path + ".jpg",
|
63
|
+
movie.screenshot(current_path + ".jpg", preserve_aspect_ratio: :width)
|
34
64
|
File.rename(current_path + ".jpg", current_path)
|
35
|
-
|
36
65
|
File.delete(tmpfile)
|
37
66
|
end
|
67
|
+
end
|
68
|
+
|
69
|
+
```
|
70
|
+
|
71
|
+
表示部分
|
72
|
+
```html
|
73
|
+
<%= image_tag @movie.movie.url(:screenshot) %>
|
38
74
|
```
|