使用FFMPEG识别音频比特率

3

我在我的Rails应用程序中使用FFMPEG来识别音频文件的比特率。 我从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,所以我知道它可以正常工作。

文件是否写入了“tmp”文件夹? - ted
你可能想使用ffprobe - blahdiblah
是的,该文件使用 File.open 语法编写。 - user1756535
会看一下ffprobe,因为这可能会使事情变得更容易,或者揭示问题的根源。 - user1756535
1个回答

3

最好的方法是使用带有JSON输出的ffprobe,例如:

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"
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接