Ffmpeg的时间限制

时间:2017-03-18 00:12:09

标签: ruby-on-rails ruby ffmpeg paperclip paperclip-validation

我正在使用Ffmpeg在rails应用中录制视频。我想给用户一个最小和最大时间限制。设置这种约束的最佳标志是什么?

2 个答案:

答案 0 :(得分:1)

ffmpeg中,使用-t(或-to)选项设置持续时间。示例120秒:

-t 120

-t 00:02:00

请参阅FFmpeg Documentation

答案 1 :(得分:1)

这有点超出了Paperclip所做的基本验证的范围。 Paperclip试图为您提供足够的验证来覆盖95%的用例,但是对于任何比典型情况稍微少一点的东西,您都必须编写自己的逻辑。我不相信内置的自定义验证可用于检查视频的长度。 (但是,您可以使用validates_attachment_size验证方法来验证资产的 filesize 。在紧要关头,这可能就足够了。)

如果您想对回形针附件进行更深入的验证,您应该研究一些不同的工具来编写自己的验证方法。如果您正在处理视频,请查看streamio-ffmpeg

使用该gem可以编写如下的自定义验证:

class YourModel < ActiveRecord::Base
  has_attached_file :your_media
  validate :duration_in_range

  private

  def duration_in_range
    # See https://github.com/streamio/streamio-ffmpeg#usage
    unless FFMPEG::Movie.new(your_media.path).duration.in?(MIN_TIME..MAX_TIME)
      errors.add(:your_media, "Video duration must be within #{MIN_TIME} and #{MAX_TIME} seconds")
    end
  end
end