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

5
我正在尝试以下代码,通过运行ffmpeg工具作为子进程来确定视频分辨率并获取其输出并解析:
IO.popen 'ffmpeg -i ' + path_to_file do |ffmpegIO|
    # my parse goes here
end

...但是ffmpeg的输出仍然连接到标准输出,而且ffmepgIO.readlines为空。是否需要对ffmpeg实用程序进行特殊处理?或者有其他方法可以获得ffmpeg的输出? 我在WinXP和Fedora Linux下测试了这段代码-结果相同。

3个回答

7

针对mouviciel的评论,您需要使用类似于popen3这样的东西:

require 'open3'

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

顺便提一下,注意使用数组作为popen的参数会更安全,特别是当文件名可能包含空格或任何需要引用的字符时。


3

FFmpeg的标准输出用于媒体输出。要获取日志信息(如分辨率),您需要解析ffmpeg的错误输出(stderr)。


0

根据您想要做什么,使用rvideo gem可能会更容易。

例如:

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

我已经对RVideo gem感到失望,因为它无法与ffmpeg配合使用。我检查了这个gem的源代码,并发现它尝试按照我描述的方式运行ffmpeg,因此失败了。 - Eskat0n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接