PHP使用FFmpeg实现视频随机截图并转图片

发布时间:2026-07-06 09:23

本文以CentOS7为例,介绍FFmpeg的安装、php-ffmpeg扩展的配置,以及如何通过PHP调用FFmpeg随机截取视频帧并转换为图片。同时说明了启用proc_open函数的重要性,并验证截图功能是否正常工作,为开发者提供一份清晰的操作指南。

安装FFmpeg软件

在CentOS 7系统上安装FFmpeg需要添加第三方仓库并执行安装命令:

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
sudo yum install ffmpeg ffmpeg-devel -y

验证安装是否成功:

ffmpeg -version 

安装PHP扩展

通过Composer安装php-ffmpeg扩展:

composer require php-ffmpeg/php-ffmpeg 

检查并启用proc_open函数:

定位PHP配置文件路径:

php -i | grep 'php.ini' 

编辑php.ini文件,找到disable_functions配置项,删除proc_open和proc_get_status。重启PHP服务:

service php-fpm restart 

验证proc_open是否可用:

php -r "var_dump(function_exists('proc_open'));" 

实现视频截图功能

使用php-ffmpeg扩展从视频中随机截取一帧:

require 'vendor/autoload.php';
 
use FFMpeg\FFMpeg;
use FFMpeg\Coordinate\TimeCode;
 
$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open('input.mp4');
 
$duration = $video->getFormat()->get('duration');
$randomTime = mt_rand(1, $duration - 1);
 
$frame = $video->frame(TimeCode::fromSeconds($randomTime));
$frame->save('random_screenshot.jpg');