如何在 PHP 中运行 ffmpeg 命令
Posted
技术标签:
【中文标题】如何在 PHP 中运行 ffmpeg 命令【英文标题】:How to run ffmpeg command in PHP 【发布时间】:2015-05-08 02:45:18 【问题描述】:我需要在 php 中运行 ffmpeg 命令。
但是 php-ffmpeg 已经不再支持最新版本和过时了。
我可以知道在 web 文件(PHP、javascript、jQuery)中运行 ffmpeg 命令的替代方法吗?
我在 PHP 文件中尝试了 exec()
和 shell_exec()
,但得到了空白输出。
echo shell_exec("/usr/local/bin/ffmpeg -i test.mp3 -codec:a libmp3lame -b:a 128k out.mp3");
和
echo shell_exec("ffmpeg -i test.mp3 -codec:a libmp3lame -b:a 128k out.mp3");
【问题讨论】:
在服务器端你可以试试exec('ffmpeg .....');
@Santa'shelper 我尝试了 exec() 和 shell_exec() 但有空白输出。你能告诉我改变mp3比特率的语法吗?所以我很清楚我没有出错。
我不太擅长 ffmpeg,但它应该看起来像 exec('ffmpeg -i /path/to/my.mp3 -r 44100 /path/to/target.mp3', $output); var_dump($output);
警告:我不太确定 -ar 44100
【参考方案1】:
ffmpeg 在 stderr 上输出,因此您需要重定向输出。在命令行中添加2>&1
:
echo shell_exec("/usr/local/bin/ffmpeg -i test.mp3 -codec:a libmp3lame -b:a 128k out.mp3 2>&1");
然后你会看到输出。
【讨论】:
这里要注意2点:1)2前必须有空格,2)必须用双引号,不能单引号 当我在浏览器中运行文件时我不明白一件事是 ge 没有这样的文件或目录但是当我在终端中运行时一切正常请帮助 @mwangaben 你所说的“文件”是什么意思——你的意思是你想运行ffmpeg
?确保您调用了 ffmpeg 的完整路径(例如,/usr/local/bin/ffmpeg
),或者您在 PHP 中的 $PATH
包含 ffmpeg
所在的文件夹。【参考方案2】:
使用FFMpeg\FFMpeg,可以用composer安装:"php-ffmpeg/php-ffmpeg": "0.5.*@dev" (FFMpeg\FFMpeg Git Repository)
或者
使用Symfony Process,可以用composer安装:"symfony/process" : "~2.0" (Symfony Process Documentation)
或者
使用 proc_open() 函数。
FFMpeg\FFMpeg 使用 Symfony 进程 和 Symfony 进程 使用 proc_open() 函数 :)
我更喜欢使用 Symfony 进程:
require 'vendor/autoload.php';
use Symfony\Component\Process\Process;
$process = new Process('ls -lsa');
$process->run();
【讨论】:
这都是矫枉过正,与OP的问题无关,这是一个简单的shell重定向问题。 这不应该被否决。 OP 确实要求提供从 PHP 脚本运行 ffmpeg 的替代方法,这就是它的答案。 正在破译 proc_open 的工作原理,结果发现我有 Symfony 可用,这更干净。【参考方案3】:首先你必须在你的服务器上安装 ffmpeg 库。如果没有在您的服务器命令中安装 ffmpeg,将不会运行。
下面的链接会帮助你
https://ffmpeg.org/
https://www.resellerspanel.com/articles/dedicated-servers-articles/dedicated-servers-howtos/how-to-install-ffmpeg-on-a-dedicated-server/
然后在运行这个命令之后
exec("ffmpeg -i test.mp3 -codec:a libmp3lame -b:a 128k out.mp3");
【讨论】:
以上是关于如何在 PHP 中运行 ffmpeg 命令的主要内容,如果未能解决你的问题,请参考以下文章