JavaScript Railsで使えるGem

Railsで動画を管理する2 動画のサムネイルを作成する~CarrierWave + Flowplayer

投稿日:

 

*とりあえず動いているけど、もっとましな方法があるとおもいます

前提

Railsで動画ファイルを管理する~CarrierWave Flowplayer

参考

Rubyでffmpegのラッパーを使う~streamio-ffmpeg

www.freezzo.com/2010/12/23/create-ffmpeg-processor-for-carrierwave-in-rails-3/

*ここのコメント欄でサムネイルの作成が議論されてる

 

やることの解説

CarrierWaveでは保存する前にファイルの内容が確認できるようにするために、ファイルはいったん別の場所に保存される(public/uploads/item/tmp)

そして、CarrierWaveではオリジナルファイルの他に別バージョンのファイルを作成して同時に保存する機能がある

この別バージョンのファイルもtmpディレクトリで作業するけど、そのときファイル名が’バージョンシンボル_’+オリジナルファイル名でないと、一緒に保存されず、tmpディレクトリに残ってしまう

CarrierWaveのソースを読んでも何をやっているのか全く理解できなかったので、いろいろ試行錯誤した結果、’バージョンシンボル_’+オリジナルファイル名(mp4とかavi)というファイル名のjpgファイルを作成すれば、うまく一緒に保存されることがわかった 工エエェェ(´д`)ェェエエ工

*その後、ここをみてfull_filenameをオーバーライドすればいいことがわかった(以下は修正済み)

versionファイルの作成を指定する

video_uploader.rb

encodingの次の行あたりに

includeが並んでる辺りに

 

:ssというバージョンの作成を指定する

これからscreenshotというprocessを作っていく

*full_filenameのオーバーライドについては上のリンク先を参照

lib/carrierwave/ffmpeg.rb

こんなファイルを作成してmoduleを作成する

Gemfileにはstreamio-ffmpegを足しておくこと

たぶんapllication.rbとかをいじれば色々省略できそうだけどまた今度

やっていることは、

  1. current_pathはtmpディレクトリにコピーされたファイルへのパス
  2. 参照元のとおりtmpfileを作成して、スクリーンショットを作成(ffmpegのscreenshotメソッドはパスに.jpgをつけないとエラーが出てしまう)
  3. そして、その後、できたjpgファイルの拡張子を削除している

試したこと

  • jpg拡張子を削除した後、conver: ‘jpg’してもエラー(ファイルタイプがあわないとか)
  • jpg拡張子を削除した後、別にjpg拡張子をつけるメソッドを書いても、今度はtmpファイルにjpgファイルが残ってしまって移動されない

試してないこと

  • 参照先の最後のコメントにopenCVを使う方法へのリンクがあったけどやってない

理屈としては、tmpから保存先のフォルダにファイルを判定して移動する処理がどこかにあるはずで、それをオーバーライドするなりすれば、こんなことしなくて済むんだけど、versions.rbやprocess.rbをちらっと読んで諦めた

 

image_tagで呼び出す

うん、うまく表示できた!拡張子はmp4だけど jpgになりました!

flowplayerの初期画面をスクリーンショットにしておく

 

*課題

取ってきたスクリーンショットをRMagickに渡せない orz

やっぱりソースをよく読まないとダメぽい

-JavaScript, Railsで使えるGem
-, ,

執筆者:

関連記事

no image

Rails3.2でテーブルの並び替えをリファクタリング~ヘルパー

環境 Rails3.2.8でテーブル並び替えのテストを作る~cucumberと正規表現 テストができたのでHelper化 目次1 現状2 helper3 index.html.erb 現状 共通部分が …

Railsでデータベーススキーマの変更と関連するモデルのフォーム

  gemを公開しました!詳細は記事の最後に!   新規投稿するフォームのラベルが変数を使っていて見苦しいので自分で好きなラベルを付けられるようにした いまのスキーマはこんな感じな …

Rails4でつかえるインラインエディタを試してみた〜X-editable-rails

目次1 x-editable2 bootstrapを導入3 x-editable-rails4 サンプルアプリ x-editable 文字をダブルクリックして編集できるやつ x-editable vi …

no image

Private_pubでのJSON通信の方法

  前回 Rails3.2でBackbone.jsとPrivate_pubでToDoアプリをリアルタイム化(できた!)   Gemfileへの追加とbundleの実行 privat …

no image

Rails3.2とBackbone.jsでToDoアプリを作ってみた~backbone-on-rails

  公式 backbonejs.org/ Backbone ドキュメント日本語訳 github.com/enja-oss/Backbone イントロダクション github.com/enja