1

如何将此 FFMPEG 代码的输出文件保存到变量中?

  def take_screenshot
    logger.debug "Trying to grab a screenshot from #{self.file}"
    system "ffmpeg -i #{self.file} -ss 00:00:02 -vframes 1 #{Rails.root}/public/uploads/tmp/screenshots/#{File.basename(self.file)}.jpg"
    self.save!
  end

我试过了: self.screenshot = system "ffmpeg -i #{self.file} -ss 00:00:02 -vframes 1 #{Rails.root}/public/uploads/tmp/screenshots/#{File.basename(self.file)}.jpg"

但这并不能节省任何东西。

提前致谢!

4

1 回答 1

3

ffmpeg通常在 stdout 上不输出任何内容,在 stderr 上输出所有调试消息。-当您作为输出文件传递时,您可以使其将视频(或图像)输出到标准输出。然后你还需要抑制标准错误。

system "ffmpeg -i #{self.file} -ss 00:00:02 -c:v mjpeg -f mjpeg -vframes 1 - 2>/dev/null"

这会将 JPEG 编码图像的原始数据输出到标准输出。从那里您可以将数据保存到变量中,例如,将其传输到其他地方。

要从system调用中获取标准输出,请参见此处:在 ruby​​ 中获取 system() 调用的输出——在这种情况下尤其popen3对您有所帮助,您可以在 Ruby 中丢弃标准错误。

于 2013-05-04T07:50:02.630 回答