2013-05-03 64 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。