无法抑制来自ruby的ffmpeg输出

时间:2014-04-03 18:58:19

标签: ruby-on-rails ruby bash ffmpeg

我在rails应用程序上有ruby,允许用户上传视频。添加视频时,我有一个使用ffmpeg生成一系列缩略图的before_save过滤器。问题是,当我在rails控制台中保存视频项目时,以及当我运行测试时,ffmpeg会产生大量的控制台输出。

我的环境:

  • 主机:OS X 10.9.2
  • Vagrant Box:Ubuntu 10.04.4
  • ffmpeg version:SVN-r0.5.9-4:0.5.9-0ubuntu0.10.04.3
  • ruby​​版本: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

圣牛,有效!好吧,有点。在运行测试时没有更详细的输出,但是不管怎么说,只要它运行,我就会被拉出rails控制台。

有没有人有更优雅的解决方案?

1 个答案:

答案 0 :(得分:4)

您可以尝试:

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

在output.txt中插入stdout和stderr