2014-04-03 78 views
0

我有ruby on rails應用程序,允許用戶上傳視頻。添加視頻時,我有一個before_save過濾器,它使用ffmpeg生成一系列縮略圖。問題是,當我在軌道控制檯中保存一個視頻項目時,以及當我運行我的測試時,ffmpeg正在產生大量的控制檯輸出。無法從ruby壓制ffmpeg輸出

我的環境:

  • 主機:OS X 10.9.2
  • 流浪盒:Ubuntu的10.04.4
  • 的ffmpeg版本:SVN-r0.5.9-4:0.5.9 -0ubuntu0.10.04.3
  • 紅寶石版本:1.9.3-P194

命令我運行:

`ffmpeg -v 0 -ss #{timestamp} -i #{video_file.path} -y -f image2 -vcodec mjpeg -vframes 1 -s 640*360 #{thumbnail_path}/thumbnail#{i}.jpg` 

這個版本對我的VM的ffmpeg似乎並不關心「-v 0」選項。我也嘗試過「-loglevel quiet」,這會導致ffmpeg出錯,表明該選項無法識別(loglevel和v都可以在我的主機的ffmpeg上運行)。

嘗試使用exec()和system(),這兩者都導致執行掛起。試圖通過這樣做將輸出重定向到文件:

`ffmpeg -v 0 -ss #{timestamp} -i #{video_file.path} -y -f image2 -vcodec mjpeg -vframes 1 -s 640*360 #{thumbnail_path}/thumbnail#{i}.jpg > #{thumbnail_path}/output.txt` 

仍然看到輸出。接下來我試過了:

`ffmpeg -v 0 -ss #{timestamp} -i #{video_file.path} -y -f image2 -vcodec mjpeg -vframes 1 -s 640*360 #{thumbnail_path}/thumbnail#{i}.jpg &> dev/null` 

還在看輸出!最後,我嘗試了:

$stdout.reopen("#{thumbnail_path}/output.txt", "w") 
$stderr.reopen("#{thumbnail_path}/error.txt", "w") 
`ffmpeg -v 0 -ss #{timestamp} -i #{video_file.path} -y -f image2 -vcodec mjpeg -vframes 1 -s 640*360 #{thumbnail_path}/thumbnail#{i}.jpg` 
$stdout = STDOUT 
$stderr = STDERR 

聖牛,工作!好吧,有點。運行測試時沒有更多的詳細輸出,但不知何時運行,我會被踢出軌道控制檯。

有沒有人有更優雅的解決方案?

+0

不要使用這樣一個古老的'ffmpeg'構建和'-loglevel quiet'會正常運行。你可以[下載一個Linux版本的'ffmpeg'](http://ffmpeg.org/download.html#LinuxBuilds)或按照一步一步的步驟[編譯'ffmpeg'的指南](http:// trac。 ffmpeg.org/wiki/UbuntuCompilationGuide)。 – LordNeckbeard

回答

4

你可以試試:

ffmpeg ... >output.txt 2>&1 

其中插入輸出和錯誤在output.txt的

+1

網站注意:''ffmpeg .../dev/null 2>&1''在不保存輸出的情況下執行相同的訣竅(但上述解決方案非常完美,如果您需要某種記錄...) –