我编写了一个php程序,使用ffmpeg从图像序列创建视频。
<?php
$res = shell_exec("ffmpeg -framerate 50 -i image/image%d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 2>&1");
echo "$res";
当我运行它时,
它说GLIBCXX_3.4.15
,GLIBCXX_3.4.9
,GLIBCXX_3.4.11
找不到。
ffmpeg:/opt/lampp/lib/libstdc++.so.6:版本`GLIBCXX_3.4.15&#39;不
找到(/usr/lib/i386-linux-gnu/libjack.so.0要求)ffmpeg:
/ opt / lampp / lib / libstdc ++。so.6:版本`GLIBCXX_3.4.9&#39;找不到
(/usr/lib/i386-linux-gnu/libzmq.so.3要求)ffmpeg:
/ opt / lampp / lib / libstdc ++。so.6:版本`GLIBCXX_3.4.11&#39;找不到
(/usr/lib/i386-linux-gnu/libopencv_core.so.2.4要求)ffmpeg:
/ opt / lampp / lib / libstdc ++。so.6:版本`GLIBCXX_3.4.9&#39;找不到
(/usr/lib/i386-linux-gnu/libopencv_core.so.2.4要求)
但是从终端,ffmpeg -framerate 50 -i image/image%d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
命令工作正常。 为什么php无法在终端找到库,它可以正常工作?我该怎么做才能解决php中的问题?提前谢谢。
答案 0 :(得分:15)
从PHP脚本执行ffmpeg命令时,我也遇到了类似的问题。我通过从终端执行以下命令找到了解决方案。我在这里粘贴这个命令,所以有人可以从中得到帮助。
sudo mv /opt/lampp/lib/libstdc++.so.6 /opt/lampp/lib/libstdc++.so.6.orig
现在只需运行你的php脚本,希望它能运行。
答案 1 :(得分:0)
如果您尝试了上述所有方法(将名称更改为.orig / _old,将较新的版本复制到lib文件夹,在xampp中更改LD_LIBRARY_PATH),
但仍然无法解决此问题。试试这个对我最终有用的技巧:
1。在您的PHP文件的行下面添加。
var_dump(shell_exec("whoami"));
点击与您的PHP文件相关的网址后,您便可以在浏览器中找到用户名
2。在您的终端机
sudo vim /ect/sudoers
#in vim editor, add this line in your sudoers file
"username ALL=(ALL) NOPASSWD:ALL"
#change username to that found in step one
3。将PHP文件中的exec cmd更改为
exec("sudo python3 urfilename.py")
问题的主要原因可能是root权限,因此,通过更改sudoers文件,可以解决该错误。