Question

J'ai créé une classe Rails avec une pièce jointe vidéo, et je veux savoir comment obtenir la longueur d'une vidéo téléchargée sur mon application. Comment puis-je y parvenir?

Était-ce utile?

La solution

Utilisation ffmpeg et le RVideo Gem, qui est un mince emballage rubis autour de lui. Il y a beaucoup de fourchettes du RVideo Projet, personnellement j'utilise http://github.com/greatseth/rvideo Parce qu'il prend en charge la capture de cadres de la vidéo et les enregistre sous forme d'images. Quand tout est configuré, vous pouvez le faire:

# 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

Autres conseils

Je n'ai pas fait travailler entièrement sur RVideo, le gemme n'a pas été mis à jour depuis quatre ans. Cependant, cela fonctionne:

  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

J'ai dû le faire récemment, et c'était mon approche:

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 est installé par FFMPEG, donc si vous avez installé que vous êtes probablement prêt à partir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top