无法在Ruby中将ffmpeg作为子进程运行

时间:2009-04-16 08:34:02

标签: ruby ffmpeg

我正在尝试使用代码来确定视频分辨率,方法是将ffmpeg实用程序作为子进程运行并获取其输出并解析它:

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

...但是ffmpeg输出仍然连接到stdout,而ffmepgIO.readlines为空。 ffmpeg实用程序是否需要一些特殊处理?还是有其他方法来获得ffmpeg输出? 我在WinXP和Fedora Linux下测试了这段代码 - 结果是一样的。

3 个答案:

答案 0 :(得分:7)

要跟进mouviciel的评论,你需要使用类似popen3的内容:

require 'open3'

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

(顺便说一句,请注意,使用数组作为popen的参数会更安全一些,特别是如果文件名可能包含空格或任何需要引用的字符,否则)

答案 1 :(得分:3)

FFmpeg标准输出用于媒体输出。要记录信息(例如分辨率),您必须解析ffmpeg stderr。

答案 2 :(得分:0)

根据您的尝试,可能更容易使用rvideo gem

例如:

video = RVideo::Inspector.new(:file => path_to_file)
video.resolution # => "480x272"
video.width # => 480
video.height # => 272