【问题标题】:How to fetch mp3 duration from rails active storage?如何从 Rails 活动存储中获取 mp3 持续时间?
【发布时间】:2020-01-07 13:54:11
【问题描述】:

我想为我的 rails 应用程序创建一个 RSS 提要并将其提交到 iTunes 和其他服务。 Apple 使用的价值观之一是:

<itunes:duration>DURATION H:MM:SS</itunes:duration>

如何通过 Active Storage 从存储在 Amazon 云中的 mp3 文件中获取它?

谢谢。

【问题讨论】:

  • 您应该研究一个过程,在上传新的 mp3 时,会从文件中派生一些参数(a.o. 持续时间),就像上传图像时一样,上传时也会生成缩略图。对于已经上传的文件,您必须创建一个脚本/任务来下载它们、确定持续时间并更新数据库中的属性(我认为即时执行此操作成本太高)。您知道如何从 mp3 文件中获取持续时间吗?查看 mp3 相关 gem:ruby-toolbox.com/search?utf8=%E2%9C%93&q=mp3
  • @pawciorr - 你试过上面推荐的任何库吗?

标签: ruby-on-rails rss feed


【解决方案1】:

taglib-ruby 可以提供您正在寻找的信息。查看它的文档以了解如何安装它。

确保已安装 gem 及其所需的系统依赖项taglib。 从其源 url 下载文件并将其保存在 Rails.root/tmp 目录中。 (假设您可以获取文件所在的 url 并将其存储在变量 source_url 中)

target_path = 'tmp/downloaded_audio.mp3'

IO.copy_stream(open(source_url), target_path) # download the source file

TagLib::FileRef.open(target_path) do |f|
 t = f.audio_properties.length_in_seconds
 duration_str =  (t/3600).to_i.to_s.rjust(2,'0') + ":"+Time.at(t).utc.strftime("%M:%S")
end

duration_str 如果您要查找的值。理想情况下,您应该将其存储在数据库中,以便在生成 RSS 提要时使用它。

【讨论】:

  • 谢谢你,Alok,我会尝试使用你的建议,如果可行,请告诉你。
猜你喜欢
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多