▪ 环境
操作系统:CentOS 7.6
PHP 版本: 7.1.19
▪ FFmpeg 介绍
FFmpeg 是一个很强大的音视频处理工具,官网介绍 FFmpeg 是:一个完整的、跨平台的解决方案,可以记录、转换和传输音频和视频。FFmpeg既可以播放视频,也提供命令行工具来处理视频,另外还有强大的视频处理库用于开发,下面是以 Linux 为例介绍 FFmpeg 的安装流程的简单的命令行对视频进行转码操作,是 FFmpeg 中最最简单的入门内容。
FFmpeg 官网地址:http://ffmpeg.org/
▪ FFmpeg 安装
1、下载并安装
cd /usr/local/src
wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.gz
tar -zxvf ffmpeg-4.2.3.tar.gz
cd ffmpeg-4.2.3
./configure --enable-shared --prefix=/usr/local/ffmpeg
make && make install
--enable-shared 参数据说是允许其编译产生动态库,在以后的编程中要用到这个几个动态库
--prefix 用于设置 FFmpeg 的安装目录,目前使用过来如果设置后再进行 ffmpeg-php 安装时会出现需要 --enable-shared
安装时异常:提示因为缺少 yasm 或者该包旧了,执行以下命令安装 yasm
yum -y install yasm
yasm 是一款汇编器,并且是完全重写了 nasm 的汇编环境,接收 nasm 和 gas 语法,支持x86和amd64指令集,所以这里安装一下 yasm 即可
2、安装之后运行
在 /usr/local/ffmpeg 会看到有如下几个目录
- bin 执行文件目录
- lib 静态,动态链接库目录
- include 编程用到的头文件
- share 文档目录
3、配置库目录到系统中
然后进入 bin 目录,执行 ./ffmpeg -version 查看当前版本的详细信息,默认情况下一般会报:
libavdevice.so.57: cannot open shared object file: No such file or directory ...
原因是 lib 目录未加载到链接到系统库中,系统库配置文件 /etc/ld.so.conf ,打开后你会发现里面引用了 /etc/ld.so.conf.d/ 下面所有的 *.conf 文件,所以我们只需执行以下命令:
vim /etc/ld.so.conf.d/ffmpeg.conf
然后添加一行内容:
/usr/local/ffmpeg/lib
之后保存并退出,然后执行 ldconfig 使配置生效,现在再次执行 ./ffmpeg -version 显示就正常了。
ldconfig 是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享
ldconfig 的主要用途:默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件
4、配置执行文件到系统中
然后我们可以将这个 bin 目录添加至环境变量中以保证任何时候在任何目录中都能使用 ffmpeg 命令,操作步骤如下:
ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/bin
▪ ffmpeg-php 安装
不推荐安装:虽然能成功安装,并能在PHP中获取视频相关信息,但是经测试当导出帧图片时,会失败!
FFmpeg 安装完成以后,我们就能正常使用 ffmpeg 命令处理视频的相操作,同时 PHP 中也可以通过 exec() 函数执行 ffmpeg 的相关命令(前提需要修改 php.ini 配置文件,开放 exec 命令权限)。
当然除了 exec() 执行 ffmpeg 外,我们还可以通过安装 PHP 扩展,然后在 PHP 中直接通过 FFmepg 专用函数的方式进行使用。
ffmepg-php 官方扩展网站为 ffmpeg-php.sourceforge.net 。但是由于官方已经停止了维护,所以 PHP 7.0 以上已经无法兼容,基本无法编译成功。经过艰苦的查找,终于找到了第三方修改过的扩展,官方介绍其兼容 PHP 5.6 和 7.2,经过我的测试 PHP 7.1 也能正常通过编译,仓库地址为:https://github.com/TownNews/ffmpeg-php,PHP扩展编译方式如下:
cd /usr/local/src
git clone https://github.com/TownNews/ffmpeg-php
cd ffmpeg-php
cp /usr/local/ffmpeg/include/* ./ -R // 拷贝 FFmpeg 相关包含文件,否则 make 会提示缺少文件
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local/ffmpeg --enable-skip-gd-check
make
如果没有加 --enable-skip-gd-check,那么在安装完成后 phpinfo() 显示中会出现:ffmpeg-php gd support..disabled
如果添加了 --enable-skip-gd-check,那么在安装完成后 phpinfo() 显示中会出现:ffmpeg-php gd support..enabled
完成编译以后,就需要配置 PHP 的扩展加载,操作方式如下:
// 拷贝扩展文件到 PHP 的扩展目录
// 扩展目录具体可以查看 php.ini 获取,此处我的默认扩展目录为:/usr/local/php/ext/
cp modules/ffmpeg.so /usr/local/php/ext/
// 编辑 php.ini 配置
vim /usr/local/php/etc/php.ini
在 PHP 配置文件中添加:extension=ffmpeg.so
完成后重启 PHP 即可
systemctl restart php-fpm.service