2012-01-19 15 views
3

Rubyを使用してURLで参照されるビデオのメタデータを取得します。この時点で、私は多くの関連記事を見つけましたが、私の問題を解決する方法を見つけることができませんでした。ffmpeg、ffprobe、またはrvideoを使用してRubyスクリプトでビデオメタデータを取得する

私はRVideoを使用しようとしましたが、私はやるとき:

file = RVideo::Inspector.new(:file => 'http://www.agreatsite.com/avideo.mp4')

それは、だから私はRVideoを使用して情報を取得することはできません(私は持っていたときに、それがうまく機能

'ArgumentError: File not found (http://www.agreatsite.com/avideo.mp4)...

をスローします私のローカルコンピュータでホストされているファイル)。

私はffprobeを使用しようとしましたが、出力を読み取る方法がわかりません。 これまでのところ、コンソールで実行したときに必要な情報を「表示」する方法がありますが、実際には「true」を返し、必要な出力をどのようにキャプチャするのかわかりません...

def media_info 
    source = self 
    command = <<-end_command 
     ffprobe -v quiet -print_format json -show_format -show_streams #{source} 
    end_command 
    command.gsub!(/\s+/, " ") 
    system(command) 
    end 

はffprobeまたはRVideoのいずれかで、この作品を作るために、いくつかの助けを大好きです!

更新: 私は必要なものを手に入れる方法を見つけました。私はそれがそのように動作させることができると思い

def get_media_duration

source = self.media[0][:url]  

command = <<-end_command 
    ffprobe -v quiet -show_streams #{source} 
end_command 
command.gsub!(/\s+/, " ") 

duration = "" 
IO.popen(command) { |io| while (line = io.gets) do 
         puts "++ "+line.inspect 
         duration = line.split("duration=")[1].gsub("\n", "") if line.split("duration=").length > 1 
         end 
        } 
duration 

end

が、私にとって非常にエレガントないないようです:わからない、これはそれを行うための最善の方法です。より良い提案が大いに評価されるだろう!

+1

私は助けることができますが、私はffmpegのドキュメントでこれを見つけました:http://ffmpeg.org/ffmpeg.html#concat。もちろん、あなたが使っているrubyのlibは本質的にURLを受け入れない 'ffmpeg -i'を実行します。おそらくあなたはそれをハックすることができます – Brian

+0

あなたは遠隔地からファイルを開こうとしていますが、 'RVideo :: Inspector'がそれを想定しているように扱うかどうかはわかりません。 –

答えて

1

解決策を探している場合は、streamio-ffmpegを確認してください。また、ffprobeは現在json形式をサポートしています:ffprobe -print_format json -show_streams #{input_file}

関連する問題