【问题标题】:Can you make Video variants, transformations of video, with ActiveStorage?您可以使用 ActiveStorage 制作视频变体、视频转换吗?
【发布时间】:2018-09-20 19:16:59
【问题描述】:

ActiveStorage 似乎主要关注图像。虽然它确实为get a thumbnail from a video 提供了“预览”支持——“变体”呢?

对于图像,它可能以 JPG 格式上传,但我可以使用 variants feature 转换为 PNG,和/或调整其大小,无论如何。

但是如果我想对视频做类似的事情怎么办?假设视频是作为 mp4 上传的,但我想将其转换为 webm,反之亦然,或者对其进行下采样,或其他任何方式。

如果想使用 ActiveStorage 跟踪原始上传文件,该怎么做?

【问题讨论】:

  • 你有没有得到任何地方?
  • @jrochkind 您在查找有关使用 ActiveStorage 制作视频变体的信息方面取得了进展吗?
  • 没有。据我所知,使用 ActiveStorage 的“预览”或“变体”功能是不可能的。您当然可以使用 ActiveStorage 制作具有自己附件的自己的模型,然后制作您想要的内容并手动附加它们。
  • 我发现了如何在存储之前对视频进行转码,我还没有尝试过,但它可能对你/其他人有帮助:github.com/streamio/streamio-ffmpeg

标签: ruby-on-rails rails-activestorage


【解决方案1】:

我需要一些东西来将 quicktime (mov) 文件转换为 mp4。

这在本地工作,但在生产中使用方式太多内存而无用。

不过,它似乎可以工作,所以如果您有 大量 的 RAM 可用,可能会对您有所帮助。

Example:对于约 4.4mb 的视频,它使用 >1GB 的 RAM 来转码!

# Transcoding quicktime to mp4
if post_params[:files][1].content_type == "video/quicktime"

  # Transcode
  require 'streamio-ffmpeg'
  movie = FFMPEG::Movie.new(post_params[:files][1].tempfile.path)

  # Write new movie
  require 'tempfile'
  tempfile = Tempfile.new(["", ".mp4"]) 
  movie.transcode(tempfile.path)

  # Update tempfile path in ActiveStorage
  post_params[:files][1].tempfile = tempfile

  # Update headers
  post_params[:files][1].headers = post_params[:files][1].headers.sub("\nContent-Type: video/quicktime", "\nContent-Type: video/mp4")

end

所以我打算将这些工作负载卸载到 AWS lambdas,当新文件到达 ActiveStorage 时可以触发它运行。

如果我能成功运行,我会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2015-05-08
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多