我在rails应用程序上有ruby,允许用户上传视频。添加视频时,我有一个使用ffmpeg生成一系列缩略图的before_save过滤器。问题是,当我在rails控制台中保存视频项目时,以及当我运行测试时,ffmpeg会产生大量的控制台输出。
我的环境:
命令我正在运行:
`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控制台。
有没有人有更优雅的解决方案?
答案 0 :(得分:4)
您可以尝试:
ffmpeg ... >output.txt 2>&1
在output.txt中插入stdout和stderr