2013-05-03 63 views
1

我怎样才能得到这个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"

但这不保存任何东西。

在此先感谢!

+1

你是什么意思?你想在变量中的JPEG的内容?你可以在这种情况下捕获一个进程的stdout,ffmpeg到一个变量中。 ffmpeg写入的文件不在stdout上。 – av501 2013-05-04 04:21:27

+0

嗨av501,我想将ffmpeg产生的jpeg的内容保存到一个变量中,这样我就可以将这个与载波一起用于上传到s3。标准输出会执行此操作吗? – dodgerogers747 2013-05-04 06:23:46

+1

请参阅下面@ slhck的答案。它是正确的。将其设置为转储到标准输出然后使用它。 – av501 2013-05-04 10:32:00

回答

3

ffmpeg通常在stdout上输出任何内容,并在stderr上输出所有调试消息。当您通过-作为输出文件时,您可以将视频(或图像)输出到标准输出。那么你还需要抑制stderr。

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

这将输出JPEG编码图像的原始数据到标准输出。从那里你可以将数据保存到一个变量,例如,将其转移到别的地方。

要从system调用stdout,请参阅:Getting output of system() calls in ruby - 特别是popen3应该可以帮助您解决这种情况,您可以从Ruby中放弃stderr。