我正在尝试使用代码来确定视频分辨率,方法是将ffmpeg实用程序作为子进程运行并获取其输出并解析它:
IO.popen 'ffmpeg -i ' + path_to_file do |ffmpegIO|
# my parse goes here
end
...但是ffmpeg输出仍然连接到stdout,而ffmepgIO.readlines为空。 ffmpeg实用程序是否需要一些特殊处理?还是有其他方法来获得ffmpeg输出? 我在WinXP和Fedora Linux下测试了这段代码 - 结果是一样的。
答案 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