如何将此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"
但这并不能保存任何东西。
提前感谢!
答案 0 :(得分:3)
ffmpeg
通常不会在stdr上输出任何内容,也不会在stderr上输出所有调试消息。当您将-
作为输出文件传递时,可以将视频(或图像)输出到标准输出。然后你还需要压制stderr。
system "ffmpeg -i #{self.file} -ss 00:00:02 -c:v mjpeg -f mjpeg -vframes 1 - 2>/dev/null"
这将输出JPEG编码图像的原始数据到stdout。从那里你可以将数据保存到变量中,例如,将其传输到其他地方。
要从system
调用获取stdout,请参阅此处:Getting output of system() calls in ruby - 特别是popen3
应该可以帮助您,在这种情况下,您可以从Ruby中丢弃stderr。