3


2

Ruby on Rails:クリップの添付ファイルとしてのビデオの長さ

ビデオ添付ファイル付きのRailsクラスを作成しました。アプリケーションにアップロードされたビデオの長さを取得する方法を知りたいです。 どうすればそれを達成できますか?

3 Answer


6


Rvideoを完全に動作させることはできませんでした。gemは4年間更新されていません。 しかし、これはうまくいきます:

  before_post_process :get_video_duration

  def get_video_duration
    result = `ffmpeg -i #{self.video.to_file.path} 2>&1`
    r = result.match("Duration: ([0-9]+):([0-9]+):([0-9]+).([0-9]+)")
    if r
      self.duration = r[1].to_i*3600+r[2].to_i*60+r[3].to_i
    end
  end


2


ffmpeg`と RVideo` gemを使用します。これは、その周りの薄いRubyラッパーです。 RVideo`プロジェクトには多くの分岐点がありますが、個人的には http:// github.com / greatseth / rvideo`を使用しています。これは、ビデオからフレームをキャプチャして画像として保存することをサポートしているためです。 すべての設定が完了したら、次の操作を実行できます。

# For Paperclip 2
video_attributes = RVideo::Inspector.new(:file => self.upload.to_file.path, :ffmpeg_binary => "/usr/local/bin/ffmpeg" )
video_attributes.duration # duration in milliseconds

# For Paperclip 3
video_attributes = RVideo::Inspector.new(:file => self.upload.queued_for_write[:original].path)
video_attributes.duration # duration in milliseconds


2


私は最近これをしなければならなかった、これは私のアプローチでした:

before_post_process do
  file = data.queued_for_write[:original].path
  self.duration = Paperclip.run("ffprobe", '-i %s -show_entries format=duration -v quiet -of csv="p=0"' % file).to_f
end

`ffprobe`はffmpegによってインストールされるので、もしそれがインストールされていれば、おそらく大丈夫です。