Skip to main content

06.视频截图

开篇明义

遇到一个有视频文件截图的需求,于是搜索了下用php来处理视频文件截图的案例,还真有!大概的处理方式是使用PHP-FFMpeg/PHP-FFMpeg库来实现的,而PHP-FFMpeg/PHP-FFMpeg又通过命令行来调用系统的FFMpeg视频处理程序并把视频文件传进去进行截图并保存。从而实现视频的截图。

系统环境参数

名称说明
OScentos 7.6
php-version 7.2

安装FFMpeg

最终的视频文件是由安装在系统上的、php外部的应用程序的FFMpeg来处理,需要先安装这个程序。

# 由于系统内置源没有FFMpeg 需要引入外部来的源才能安装
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
#安装FFmpeg 和 FFmpeg开发包
yum install ffmpeg ffmpeg-devel -y
# 查看是否安装成功输入下面的可以看看有没有打印相关版本的信息来查看
ffmpeg

php安装FFMpeg扩展包

composer require php-ffmpeg/php-ffmpeg

示例代码

$ffmpeg = \FFMpeg\FFMpeg::create(array(
'ffmpeg.binaries' => '/usr/bin/ffmpeg', // 这里是告诉php 系统内的FFMpeg的启动文件在哪里
'ffprobe.binaries' => '/usr/bin/ffprobe',
'timeout' => 0, // The timeout for the underlying process
'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
), @$logger);
$video = $ffmpeg->open('./test.mp4');
// 保存截图的文件
$microtime = (explode('.', microtime(true)))[1];
$save_name = './frame_'. date("Y-m-d-H-i-s", time()) ."-{$microtime}".'.jpg';
$result = $video ->frame(\FFMpeg\Coordinate\TimeCode::fromSeconds(1)) // 截图视频1秒位置的图片
->save($save_name);

运行完成后会在本地生成一个jpg格式的图片