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