如何在PHP中运行ffmpeg命令

7

我需要在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's helper
1
@Santa'shelper,我尝试使用exec()和shell_exec(),但输出为空。您能否告诉我更改mp3比特率的语法,以便我可以确定我没有做错? - PreeT
我不太擅长 ffmpeg,但它应该是这个样子的: exec('ffmpeg -i /path/to/my.mp3 -r 44100 /path/to/target.mp3', $output); var_dump($output); 警告:我不确定 -ar 44100 - Santa's helper
3个回答

17

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)必须使用双引号而不是单引号。 - Antony
我不明白一个问题,当我在浏览器中运行文件时会出现“没有这样的文件或目录”的错误,但是当我在终端中运行时一切正常。请帮忙解决。 - mwangaben
@mwangaben 你所说的“file”是什么意思 - 你是想运行ffmpeg吗?请确保你要么调用完整路径到ffmpeg(例如,/usr/local/bin/ffmpeg),要么在PHP中的$PATH包含ffmpeg所在的文件夹。 - slhck

3
使用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 Process,而Symfony Process使用了proc_open()函数 :)
我更喜欢使用Symfony Process:
require 'vendor/autoload.php';

use Symfony\Component\Process\Process;
$process = new Process('ls -lsa');
$process->run();

2
这些都是过度的,与OP的问题无关,他的问题只是一个简单的shell重定向问题。 - slhck
2
这个回答是针对提问者要求的从 PHP 脚本中运行 ffmpeg 的另一种方式。请不要将其下投。 - Out of Control
破解proc_open的工作原理时,发现我有可用的Symfony,这更加简洁。 - Cameron Wilby

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接