使用Ruby运行FFprobe的问题

时间:2012-12-18 18:22:06

标签: ruby json terminal ffprobe

我不熟悉Ruby和编程,不到一年的经验。这是ruby 1.9.3和来自FFmpeg的Ubuntu的最新ffmpeg。我使用的文件是基本的.avi,一些v210 .mov,其他quicktime / finalcutpro类型的文件。

我正在尝试编写一个自动探测工具,当我开始测试并处理大量媒体文件时,这将有助于减轻我的手动工作量。基本上,脚本通过一个目录并探测每个文件,提取我需要的信息,并将其写入csv。

目前,每次运行它时,命令行上的实际捕获都会失败。

def prober(file)
  @the_file = file
  stdout,stderr,status = Open3.capture3("ffprobe -v quiet -print_format json -      show_format -show_streams #{@the_file}")
  STDERR.puts stderr
  if status.success?
    out = stdout
  else
    STDERR.puts "There was a problem, please try again."
  end
  @raw_output = JSON.parse(out)
end

我不知道这是否与我如何运行命令(我真的不完全理解I / O流)或ffprobe的某些事情有关。当它确实通过探测器时它将@raw_output作为nil返回,这会导致JSON解析呕吐,或者我的其他分裂和解析元数据的方法在nil上失败。

任何帮助都很棒,我已经坚持了一段时间。谢谢!如果需要澄清,我可以提供更多代码。

1 个答案:

答案 0 :(得分:0)

假期结束后,我又回来了,发现了问题。文件路径字符串在输入到ffprobe的stdin时需要有引号,但是当我聚合文件时它会删除引号。修复?在字符串中的文件路径周围添加引号。

我希望这有助于某人,显然我是整个互联网上唯一有这个问题的人。