ffmpeg处理视频功能非常强大和实用。
包括截取视频帧图、获取视频时长、给视频增加水印等等功能。
我的服务器一般选择linux(centos7),所以先讲linux安装ffmpeg的方法。
一、linux安装ffmpeg
第1步,下载并进行解压(两种方式可以下载)
第一种,wget方式
wget http://www.ffmpeg.org/releases/ffmpeg-4.4.tar.gz tar -zxvf ffmpeg-4.4.tar.gz
目前最新版本是4.4(2021年5月31号),可以访问链接 http://www.ffmpeg.org/releases/ 查看要下载的版本
第二种,官网下载
官网地址 http://ffmpeg.org/download.html
点击下图中标注的地方下载,下载完以后将下载文件传到服务器,通过ftp/rz命令都可以,只要上传上去就可以。
上传成功后,进行解压
tar -zxvf ffmpeg-snapshot.tar.bz2
第2步,进入到解压目录并进行配置(以下载方式1为例)
cd ffmpeg-4.4 ./configure --prefix=/usr/local/ffmpeg
注意:如果此时就执行 ./configure --prefix=/usr/local/ffmpeg 可能会报下图中的错误。
所以就需要先安装nasm/yasm
安装nasm/yasm
①下载(2种方式下载)
第一种wget
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
第二种官网下载
官网地址 http://yasm.tortall.net/Download.html
如下图,点击红框中进行下载,目前版本是1.3.0(2021年5月31号)
②进行解压,配置(以第一种下载方式为例)
tar -zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0/ ./configure make && make install
第3步,重新进入到解压的ffmpeg目录,继续配置并编译
cd ffmpeg-4.4 ./configure --prefix=/usr/local/ffmpeg make && make install
注意:编译时间可能有点久,你可以让它编译,你去干点其他的。
第四步,配置环境变量
vim打开profile vim /etc/profile 在最后添加PATH并保存 export PATH=$PATH:/usr/local/ffmpeg/bin 重新读取并生效 source /etc/profile
第五步,安装成功,查看版本
ffmpeg -version
二、windows安装ffmpeg
第1步,官网下载
官网地址: http://ffmpeg.org/download.html
当然也可以直接去github下载,地址 https://github.com/BtbN/FFmpeg-Builds/releases
根据自己的系统选择要下载的版本,我的系统是64位,所以下载win64的
第2步,将下载的文件解压,并将解压后的文件放到ffmpeg里面
解压后的文件列表
我要把ffmpeg放到F盘下的soft文件夹下,所以在F:\soft下新建ffmpeg文件夹,然后把解压的文件列表放到ffmpeg里面。
第3步,配置环境变量
我的系统是Windows 10 家庭中文版 64位,所以以此系统进行讲解,其他版本环境变量的设置,不会的话自己搜一下就可以了。
①电脑桌面找到“此电脑”图标,右键选择“属性”,在弹窗窗口,点击“高级系统设置”,如下图
②点击“环境变量”
③找到系统变量的“PATH",进行修改
④将安装的ffmpeg的bin目录加入到PATH里面,最后保存就设置好了。
因为我的安装目录是F:\soft\ffmpeg
所以此处新增F:\soft\ffmpeg\bin就可以了
⑤cmd查看版本
ffmpeg -version
三、PHP的使用示例
我用的是thinkphp5.1框架,直接使用composer安装ffmpeg
不会用composer的可以参考 https://www.yusan.cn/blog/13.html
composer require php-ffmpeg/php-ffmpeg
windows系统php代码示例
//这里处理视频文件(获得视频封面和时长) $file_path = "demo.mp4"; $ffmpeg = \FFMpeg\FFMpeg::create(); $video = $ffmpeg->open($file_path); $frame = $video->frame(\FFMpeg\Coordinate\TimeCode::fromSeconds(1)); // 这里是提取第1秒的图像作为视频封面 //封面图 $video_cover = "cover.jpg"; $frame->save($video_cover);//这里是保存下来的封面图片 //获得时长,单位秒 $ffprobe = \FFMpeg\FFProbe::create(); $video_duration = $ffprobe->format($file_path)->get('duration', 0);//这是获得的时长
linux系统php代码示例
着重说一下问题,使用上面获得封面图的方法,linux上面总是报错,可能是我配置的原因,反正怎么也成功不了,那就换一下解决方法。使用命令执行。
如下。
//这里处理视频文件(获得视频封面和时长) $file_path = "demo.mp4"; //下面的地址就是linux安装ffmpeg的地址 $config = [ 'ffmpeg.binaries' => '/usr/local/ffmpeg', 'ffprobe.binaries' => '/usr/local/ffmpeg/bin/ffprobe' ]; $ffmpeg = \FFMpeg\FFMpeg::create($config); //$video = $ffmpeg->open($file_path); //封面图 $sec = "1";//这里是提取第1秒的图像作为视频封面 $video_cover = "cover.jpg"; $str = "/usr/local/ffmpeg/bin/ffmpeg -i " . $file_path . " -y -f mjpeg -ss ".$sec." -t 0.001 " . $video_cover; exec($str, $callback); //获得时长,单位秒 $ffprobe = \FFMpeg\FFProbe::create($config); $video_duration = $ffprobe->format($file_path)->get('duration', 0);//这是获得的时长
命令行注意:
(1)命令前一定要加上 ”/usr/local/ffmpeg/bin/“
(2)php一定不要禁用exec
上面只是列举了ffmpeg比较简单常用的功能,对ffmpeg感兴趣的可以自己去研究。
有什么不明白的可以私聊我或者评论区发表评论。