ruby-on-rails - 使用 FFMPEG 识别音频比​​特率

标签 ruby-on-rails ruby ffmpeg

我正在使用 FFMPEG 来识别我的 Rails 应用程序中音频文件的比特率。我正在从 S3 下载文件,并临时存储在 tmp 文件夹中,然后对其运行 FFMPEG 命令。

本地一切都完全按预期运行。部署时出现问题,我没有从 FFMPEG 返回任何内容。

s3 = AWS::S3.new(
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"])

object = s3.buckets[ENV["AWS_S3_BUCKET"]].objects[CGI::unescape(self.url)]

tempname = Digest::MD5.hexdigest(DateTime.now.to_s) + "." + self.file_format
File.open(Rails.root.to_s + '/tmp/' + tempname, 'wb') do |f|
    f.write(object.read)
end

dl = Rails.root.to_s + '/tmp/' + tempname
brcommand = "ffmpeg -i " + dl + " 2>&1 | grep Duration | sed 's/Duration: \(.*\), start/\1/g'"
ffmpeg = %x{#{brcommand}}

我正在使用 %x{ffmpeg_command} 访问命令行,所以我想知道这是否会导致找不到文件的问题,就好像它是在 Rails 中本地运行的一样。

我在服务器的命令行上使用了 FFMPEG,所以我知道它工作正常。

最佳答案

最好的方法是像这个例子一样使用 ffprobe 和 JSON 输出:

ffprobe -v quiet -print_format json -show_format Ramp\ -\ Apathy.mp3

产生以下输出:

{
    "format": {
        "filename": "Ramp - Apathy.mp3",
        "nb_streams": 2,
        "format_name": "mp3",
        "format_long_name": "MP2/3 (MPEG audio layer 2/3)",
        "start_time": "0.000000",
        "duration": "203.638856",
        "size": "4072777",
        "bit_rate": "159999",
        "tags": {
            "title": "Apathy",
            "artist": "Ramp",
            "album": "Evolution Devolution Revolution",
            "date": "1999",
            "genre": "Metal"
        }
    }
}

关于ruby-on-rails - 使用 FFMPEG 识别音频比​​特率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15884037/

相关文章:

ruby - 在数组数组上计算数组乘积

ruby-on-rails - 为什么 thinking-sphinx 在开发中有效,但在我的规范中却无效?

带有jpg背景和本地时间戳的ffmpeg到udp输出

ruby-on-rails - 我可以更改 Rails 应用程序的预期 Rails 版本吗?

ruby-on-rails - 如何在 Rails 中为基于 cookie 的 session 动态设置到期时间

ruby - Ruby 中的这种拓扑排序有缺陷吗?

bash - 无法跳出最里面的 while 循环——Bash - Ubuntu

拆分音频后级联音频中的 FFmpeg 间隙

html - AJAX 调用后显示数据,如何在 Controller 中呈现?

ruby-on-rails - 在 Passenger Rails 应用程序中包含 ~/opt/lib 库