我想将mp3文件转换为ogg。我尝试了以下代码
exec("/usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbis testjohn4545454.ogg",$output);
var_dump($output);
但是它没有转换文件,只返回array(0) { }
它只需要一点执行时间。
但是使用ssh命令时转换成功。
请给我解决方案。
答案 0 :(得分:3)
有趣的是,您希望在其自己的流程中执行此操作,并在背景中执行 ,否则您的PHP脚本将在等待转换完成时挂起。
代码:
passthru("nohup /usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbistestjohn4545454.ogg 1> /path/to/logfile.txt 2>&1 &");
注意" nohup"和最后的&符号:这些应该给你你需要的东西。此外,您现在可以定期检查日志文件,以确保它能够执行您想要的操作。
最后,如果您愿意,请查看this question以创建进度条。
答案 1 :(得分:1)
我有一个类似的问题,但我选择在apache可写文件夹中保存和读取文件(输入文件和输出转换文件) 您还可以通过读取该目录来检查转换是否已完成。
答案 2 :(得分:1)
你能检查PHP上的disabled_functions配置,看看exec是不存在吗?此外,您可能希望启用所有error reporting,然后尝试使用简单的bash echo执行exec()并查看它是如何进行的。如果一切顺利,那么检查你是否正在使用正确的文件,正如Jamie指出的那样,工作目录可能是错误的,所以使用绝对路径或相对,无论什么是最方便的。用于检查当前工作目录的Unix命令是pwd
。
修改另外,exec还有另一个警告When safe mode is enabled, you can only execute files within the safe_mode_exec_dir
所以请务必仔细阅读manual以了解其他问题。
答案 3 :(得分:-1)
感谢您的回复。我使用了passthru()
而不是exec()
,它运行正常。