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

Esk*_*t0n 5 ruby ffmpeg

我正在尝试通过运行ffmpeg实用程序作为子进程来跟踪代码以确定视频分辨率并获取其输出并解析它:

IO.popen 'ffmpeg -i ' + path_to_file do |ffmpegIO|
    # my parse goes here
end
Run Code Online (Sandbox Code Playgroud)

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

小智 7

要跟进mouviciel的评论,你需要使用像popen3这样的东西:

require 'open3'

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

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