我有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
聖牛,工作!好吧,有點。運行測試時沒有更多的詳細輸出,但不知何時運行,我會被踢出軌道控制檯。
有沒有人有更優雅的解決方案?
不要使用這樣一個古老的'ffmpeg'構建和'-loglevel quiet'會正常運行。你可以[下載一個Linux版本的'ffmpeg'](http://ffmpeg.org/download.html#LinuxBuilds)或按照一步一步的步驟[編譯'ffmpeg'的指南](http:// trac。 ffmpeg.org/wiki/UbuntuCompilationGuide)。 – LordNeckbeard