将FFMPEG屏幕截图输出文件保存到变量中



如何将此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"

但这并不能拯救任何东西。

提前感谢!

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

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

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

要从system调用中获取stdout,请参阅此处:在ruby中获取system((调用的输出,尤其是popen3,在这种情况下应该会有所帮助,您可以从ruby中丢弃stderr。

最新更新