Pregunta

Creé una clase de Rails con un archivo adjunto de video, y quiero saber cómo obtener la longitud de un video que se carga en mi aplicación. ¿Cómo puedo lograr eso?

¿Fue útil?

Solución

Usar ffmpeg y el RVideo Gema, que es una envoltura rubí delgada a su alrededor. Hay muchos tenedores de la RVideo Proyecto, personalmente uso http://github.com/greatseth/rvideo Porque admite capturar marcos del video y guardarlos como imágenes. Cuando está todo configurado, puedes hacer esto:

# 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

Otros consejos

No conseguí que Rvideo trabajara por completo, la gema no se ha actualizado en cuatro años. Sin embargo, esto funciona:

  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

Tuve que hacer esto recientemente, y este fue mi enfoque:

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á instalado por FFMPEG, por lo que si tiene eso instalado, probablemente esté listo para comenzar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top