一些涉及到视频的业务,列表页显示视频列表需要视频的缩略图,一些云服务如七牛云等,可以再上传视频的同时自动生成缩略图,但很多公司由于各种原因,需要自己生成视频缩略图,下面提供一种php的实现方法,主要使用了FFMPEG。
什么是FFMPEG
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
如何安装FFMPEG
- 下载 ffmpeg
ffmpeg的下载链接 http://ffmpeg.org/download.html
- 解压安装包
tar -jxvf ffmpeg-x.x.tar.bz2
- 进入目录
cd ffmpeg-x.x
- 编译安装
./configure --enable-shared && make && make install
安装完成之后 执行 ffmpeg -version输出相关信息,说明ffmpeg安装成功。
可能需要的问题
- yasm没有
解决yum install install yasm
- 报lib不存在
解决ldconfig
php使用FFMPEG
- 首先需要服务器安装好FFMPEG 软件。
- 安装php扩展或者使用类库
我选择了php类库,因为php FFMPEG 已经很久没有更新了,并且安装起来相对麻烦
安装类库方法:composer require php-ffmpeg/php-ffmpeg
- 使用方法具体见github
如下代码使用了视频第一秒的画面作为缩略图。
private function getThumb($dir, $fileName, $name)
{
$ffmpeg = FFMpeg::create([
'ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
'ffprobe.binaries' => '/usr/local/bin/ffprobe',
'timeout' => 3600, // The timeout for the underlying process
'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
]);
$video = $ffmpeg->open($dir . $fileName);
$thumbFile = $dir . $name . "_thumb.jpg";
$video->frame(TimeCode::fromSeconds(1))->save($thumbFile);
return $name . "_thumb.jpg";
}
网友评论