PHP利用ffmpeg进行视频截图(Linux)
最近在做项目的过程中遇到这个业务 , 用户上传的视频需要有一个封面图来展示 , 但是之前没有搞过这个东西 , 所以写完之后来记录一下.
我是用的TP5的框架+PHP7.2的环境 , 第一次用有些参数我还没有仔细看 , 先把功能实现再说 /手动狗头保命 写的不好大家轻点喷我 哈哈
Linux 环境
一.安装ffmpeg
下载地址 https://johnvansickle.com/ffmpeg/
1.选中对应版本的下载地址使用 wget 命令进行下载
wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
我选择的版本是第一个 , 可以根据自己的实际情况进行选择.
2. 解压
xz -d ffmpeg-git-amd64-static.tar.xz
经过一次解压,.xz 后缀名已经被去掉。接下来执行:
tar -xvf ffmpeg-git-amd64-static.tar
解压完成后进入解压出来的这个目录ffmpeg-git-20190424-amd64-static/:
这里因为这个文件的名字太长了 我就修改成了ffmpeg
ffmpeg 和 ffprobe 都在这里。
3.运行
./ffmpeg 用这个命令试一下 像下图这种情况就证明一件安装成功了
二.PHP代码
简单说明一下情况 , 上代码.
在视频截图的执行过程中会用到system和exec这两个函数 , 但是正常情况下这两个函数是出于被禁用的状态 , 个人建议使用第一个函数 .
(说明:exec()是用于执行shell命令的函数。)
//获取文件包信息
$filesdata = $this->request->file('files');
//获取文件详情
$filedata = $filesdata->getInfo();
//我这里用的是上传文件产生的临时文件作为源文件地址
$url = $filedata['tmp_name'];
//简单做一下处理获取当前上传文件名,不需要后缀,用来做生成截图的名称
$videoname = explode('.',$filedata['name']);
//设置生成文件的地址和文件名称
$newname = '/www/wwwroot/aaa/runtime/image/'.$videoname[0].'.jpg';
//最主要的就是 -ss这个参数 是从哪个时间点开始截图 其他照搬就可以
$str = "/www/server/php/ffmpeg/ffmpeg -i $url -ss 1 -vframes 1 $newname";
//以下两种方法都可以实现,亲测有效
// exec($str);
system($str);
我这边的逻辑是拿到截图后进行压缩 , 然后上传云服务器 , 所有后边的代码就不贴出来了.
到这里PHP利用ffmpeg截图的代码就结束了, 其实很简单 , 大部分都是在做PHP的处理 , 只需要设定好参数调用就可以
感谢观看!!! 哪里有不足的地方请大家多多指教