2013-04-08 3 views
2

J'utilise FFMPEG pour identifier le débit binaire d'un fichier audio dans mon application Rails. Je télécharge le fichier à partir de S3 et je le stocke temporairement dans le dossier tmp, puis je lance les commandes FFMPEG.Identification du débit binaire audio à l'aide de FFMPEG

Localement tout fonctionne comme prévu. Le problème vient lors du déploiement, et je ne reçois rien de 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}} 

J'utilise% x {ffmpeg_command} pour accéder à la ligne de commande, donc je suis errant si cela peut être la cause du problème où il ne trouve pas le fichier comme si elle avait été en cours d'exécution en mode natif dans Rails.

J'ai utilisé FFMPEG sur la ligne de commande sur le serveur, donc je sais que cela fonctionne très bien.

+0

et les fichiers sont-ils écrits dans un dossier 'tmp'? – ted

+0

Vous pouvez utiliser [ffprobe] (http://ffmpeg.org/ffprobe.html) à la place. – blahdiblah

+0

Oui, le fichier est écrit en utilisant la syntaxe File.open. – user1756535

Répondre

2

La meilleure façon est d'utiliser ffprobe avec JSON comme cet exemple:

ffprobe de json -print_format calme -show_format rampe \ - \ Apathy.mp3

qui produit le follwing sortie:

{ 
    "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" 
     } 
    } 
} 
Questions connexes