我正在使用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,所以我知道它工作正常。
答案 0 :(得分:2)
最好的方法是使用带有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"
}
}
}