最近一次项目中需要对视频压缩转码,在找寻多个解决方案最后选择使用PHP-FFmpeg包,在windows下ffmpeg较为简单,在centos下环境配置比较麻烦,在文末记录过程中遇到的问题。
一、环境准备
- windows
官网下载 ffmpeg.zeranoe.com/builds/
下载下来后会在bin中看到ffmpeg.exe和ffprobe.exe两个可执行文件
- centos
在linux需要用到x264
$ git clone git://git.videolan.org/x264.git
$ cd x264
$./configure --enable-shared --enable-static
$ make && make install
官网下载 ffmpeg ffmpeg.org/download.ht…
也可使用以下命令直接下载,然后解压
$ wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.xz
$ xz -d ffmpeg-4.3.1.tar.xz
$ tar xvf ffmpeg-4.3.1.tar
解压后进入文件夹,开始编译安装ffmpeg
$ ./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/lib --disable-x86asm
$ make && make install
在安装完成之后,进入/user/local/ffmpeg/bin,会有ffmpeg和ffprobe两个文件,执行以下
$ ./ffmpeg
返回当前ffmpeg版本则表示安装成功
二、使用php-ffmpeg
使用以下命令安装php-ffmpeg扩展包
$ composer require php-ffmpeg/php-ffmpeg
对视频进行压缩转码
use FFMpeg\Coordinate\Dimension;
use FFMpeg\FFMpeg;
use FFMpeg\Filters\Video\ResizeFilter;
use FFMpeg\Format\Video\X264;
$ffmpeg = FFMpeg::create([
'ffmpeg.binaries' => '/path/to/ffmpeg',//ffmpeg安装后的路径 在bin下
'ffprobe.binaries' => '/path/to/ffprobe',//ffprobe安装后的路径 在bin下
'timeout' => 9800,
'ffmpeg.threads' => 12
]);
$video = $ffmpeg->open($real_path);
$video->filters()->resize(new Dimension(300,450), ResizeFilter::RESIZEMODE_FIT , true);
$format = new X264('aac');
$format
->setKiloBitrate(100)
->setAudioChannels(2)
->setAudioKiloBitrate(256);
$video->save($format,'export.mp4');
三、问题记录
- Your FFProbe version is too old and does not support -help option, please upgrade
一般为ffmpeg动态扩展库未加载到,可这样解决
$ vim /etc/ld.so.conf
##添加/path/to/ffmpeg/lib到文件末尾
$ ldconfig
- Encoding failed
1、在new X264()时,未传入初始化参数,改为new x264('aac')
2、如传入了初始化参数仍报此错,可去掉/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Media/AbstractVideo.php下的try_catch查看,一般会在linux下看到Unknown encoder ‘h264’,需提前安装x264,在安装完成后,运行程序一般会提示Your FFProbe version is too old ,一般是用于编码x264的动态库(或者其他编码库,这里是x264)是没有加载到,需要手动添加
$ vim /etc/ld.so.conf
##添加/path/to/x264/lib到文件末尾
$ ldconfig