5

私は次のコードを試し、ffmpegユーティリティをサブプロセスとして実行してビデオ解像度を決定し、その出力を取得して解析します。

IO.popen 'ffmpeg -i ' + path_to_file do |ffmpegIO|
    # my parse goes here
end

...しかし、ffmpeg出力はまだstdoutに接続されており、ffmepgIO.readlinesは空です。ffmpegユーティリティに必要な特別な処理はありますか?または、ffmpeg出力を取得する他の方法はありますか?私はこのコードをWinXPとFedoraLinuxでテストしました-結果は同じです。

4

3 に答える 3

7

mouvicielのコメントをフォローアップするには、popen3のようなものを使用する必要があります

require 'open3'

Open3.popen3("ffmpeg", "-i", path_to_file) { |stdin, stdout, stderr|
  # do stuff
}

(ところで、popenのパラメーターとして配列を使用する方が少し安全であることに注意してください。特に、ファイル名にスペースや、引用符で囲む必要のある任意の種類の文字が含まれている場合はなおさらです)

于 2009-04-16T21:25:54.217 に答える
3

FFmpegstdoutはメディア出力用です。ロギング情報(解像度など)については、ffmpegstderrを解析する必要があります。

于 2009-04-16T08:41:42.230 に答える
0

何をしようとしているのかによっては、rvideogemを使用する方が簡単な場合があります。

例えば:

video = RVideo::Inspector.new(:file => path_to_file)
video.resolution # => "480x272"
video.width # => 480
video.height # => 272
于 2009-04-16T10:16:25.273 に答える