【PHP】在windows和centos下使用FFmpeg做视频压缩转码

1,845 阅读1分钟

最近一次项目中需要对视频压缩转码,在找寻多个解决方案最后选择使用PHP-FFmpeg包,在windows下ffmpeg较为简单,在centos下环境配置比较麻烦,在文末记录过程中遇到的问题。

一、环境准备

  • windows

官网下载 ffmpeg.zeranoe.com/builds/

下载下来后会在bin中看到ffmpeg.exeffprobe.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,会有ffmpegffprobe两个文件,执行以下

$ ./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