Ruby on rails Rails/ActiveStorage文件处理&x2013;只在飞行中还是上传?若然,原因为何?

Ruby on rails Rails/ActiveStorage文件处理&x2013;只在飞行中还是上传?若然,原因为何?,ruby-on-rails,rails-activestorage,Ruby On Rails,Rails Activestorage,我正在计划一个RoR项目,涉及视频的上传和压缩。通常情况下,我会使用Shirize处理文件附件,并在上传后在后台使用ffmpeg处理视频压缩 既然ActiveStorage是内置的Rails 5.2,我想选择它,但我不确定它是否能很好地处理视频(w/压缩)。到目前为止,我只找到了有关处理图像(使用Minimagik)或创建视频/pdf预览(使用ffmpeg或mutools)的文档,这些文档似乎都是即时生成的 由于视频的压缩是时间密集型的,我认为应该在上传之后直接进行,以便为请求做好准备上传后,使

我正在计划一个RoR项目,涉及视频的上传和压缩。通常情况下,我会使用Shirize处理文件附件,并在上传后在后台使用ffmpeg处理视频压缩

既然
ActiveStorage
是内置的Rails 5.2,我想选择它,但我不确定它是否能很好地处理视频(w/压缩)。到目前为止,我只找到了有关处理图像(使用Minimagik)或创建视频/pdf预览(使用ffmpeg或mutools)的文档,这些文档似乎都是即时生成的

由于视频的压缩是时间密集型的,我认为应该在上传之后直接进行,以便为请求做好准备上传后,使用ActiveStorage或仅在运行中处理文件时是否有选项

如果不是,为什么或者更确切地说,建议动态处理所有文件处理


谢谢

这是我上传视频后将其转换为MP4的解决方案。也许不是最干净的,但它很管用。我使用Delayed::Job异步处理调用

def process_video!
  if video.attached? && video.blob.content_type != 'video/mp4'

    orig_video_tmpfile = "#{Rails.root}/tmp/#{video.blob.key}_#{video.blob.filename.to_s}"
    mp4_video_tmpfile = "#{Rails.root}/tmp/#{video.blob.key}_#{video.blob.filename.base}.mp4"
    File.open(orig_video_tmpfile, 'wb') do |f|
      f.write(video.download)
    end

    system('ffmpeg', '-i', orig_video_tmpfile, mp4_video_tmpfile)

    self.video.attach(
      io: File.open(mp4_video_tmpfile),
      filename: "#{video.blob.filename.base}.mp4",
      content_type: 'video/mp4'
    )

    File.delete(orig_video_tmpfile)
    File.delete(mp4_video_tmpfile)
  end
end
handle_asynchronously :process_video!
after_commit :process_video!

我还对这个问题的解决办法感兴趣。你同时解决了吗?没有,我还没有找到解决这个问题的方法,到目前为止,文档中没有提到另一种方法。我继续使用了
sicle
,这是imo最好、最通用的上传解决方案。谢谢你的回答。看看我在下面的帖子里是怎么解决的。谢谢你。关于
ffmpeg
的使用,有一个很有用的库,它可以与Rails和Insfile一起使用,用于各种版本的Silence,但是它应该可以与任何东西一起使用。