使用FFmpeg
使用composer安装:
$ composer require php-ffmpeg/php-ffmpeg
一. 遇到的第一个问题
Unable to load FFProbe in file
查阅了很多博客之后,发现得去ffmpeg官网下载安装ffmpeg。
然后在create()中传入参数。(参数为文件路径)
$config = [
'ffmpeg.binaries' => '/var/www/blog/public/ffmpeg/bin/ffmpeg.exe',// the path to the FFProbe binary
'ffprobe.binaries' => '/var/www/blog/public/ffmpeg/bin/ffprobe.exe',// the path to the FFProbe binary
'timeout' => 3600, // the timeout for the underlying process
'ffmpeg.threads' => 12, // the number of threads that FFMpeg should use
];
$ffmpeg = FFMpeg::create($config);
(二进制文件指的是后缀为exe的文件)
① 这里出现的一个小问题是应该下载static版而不是开发版。
static目录结构:
开发版目录结构:
② 我这里地址路径是在laradock里面的路径。
分割线------------------------------------------------------
我使用的是laradock+laravel,在本地成功之后发现laradock上好像自带ffmpeg,于是迫不及待的试了一试。laradock官方文档
就是打开.env
文件然后把ffmpeg改成true,再build一下,在workspace里面/usr/bin 里面就有ffmpeg和ffprobe文件了。
但是!!!
不知道为什么这里的这两个东西用不了。(有大佬看见希望救救我T T)
根据路径引入之后一直报错Unable to load FFProbe
(或者Your FFProbe version is too old and does not support -help option, please upgrade.
)
根本到不了return 111;
那里 T T
就在这个地方研究了很久,看了很多博客之后也没有解决问题。
最后有幸发现了这个解释。网站地址
于是最后我又去了ffmpeg官网,在workspace中下载了ffmpeg的开发版。
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
通过.gitignore
在工作区中进行了安装。
//关键的几个命令,./configure相关命令可以去百度看看
./configure --enable-shared --prefix=/monchickey/ffmpeg
make
make install
最终得到了可执行的二进制文件
然后再引入这个文件就可以啦。
不过最后有些代码按着文档上的那些方法来写却报错了。感觉可能是下载的版本不对还是别的什么问题,这里我还没深入研究。
直接用了laravel中执行命令的方法来使用了。
$newname = time() .'_'. rand(10000, 99999999);//制作新名字 没后缀
$ext_a = $request->file('audio')->getClientOriginalExtension();//获取后缀名
//进行剪辑
if ($audio_time>$video_time){//音频长于视频的时候
$process = new Process(['/var/www/blog/resources/new_ffmpeg/bin/ffmpeg','-ss','0','-t',$video_time,'-i',$audio_realpath,'-codec','copy','ffmpeg/'.$newname.'.'.$ext_a]);
$process->run();
// 命令行执行结束
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();//这里可以优化。。。。
}
最后
唉,看了好多天博客,虽然还没弄透彻,但是总算功能出来了。