前言
以前做过类似项目,当时是利用php 执行cli命令的方式去读取视频第一帧,现在2024年了服务器环境的升级再使用这种方式也不好了,现在用新的方式去实现这个简单的功能。(有点困了不想写了)
实现步骤
- 前提要先安装ffmpeg和ffprobe两个二进制文件扩展,网上有很多安装方法,自行搜索。安装完成之后,使用 find / -name 分别搜索这两个文件:find / -name ffmpeg,find / -name ffprobe 如果扩展安装成功是一定搜得到的。
- composer安装php-ffmpeg/php-ffmpeg库,我的版本是
"php-ffmpeg/php-ffmpeg": "^0.19.0",现在有其它php库支持php8+了,有实力的可以用最新的版本,我这里是php7.4,也不想去搞环境了,麻烦,主要是要出活。
- 代码操作,经过测试此代码复制可用
// 初始化FFMpeg实例,指向FFmpeg可执行文件的路径(根据实际情况调整路径)$ffmpeg = FFMpeg::create(['ffmpeg.binaries' => '/usr/bin/ffmpeg', // 或者其他FFmpeg实际路径,用find / -name 分别搜索'ffprobe.binaries' => '/usr/bin/ffprobe', // 或者其他ffprobe实际路径]);// 指定要从中提取第一帧的视频文件路径$inputVideo = $updata['real_path']; // 替换为您的视频文件物理路径// 指定输出图像文件的路径和格式(例如,输出为JPEG格式)$filename = Tools::rand_str() . '.jpg';$outputImage = 'public/uploads/video_cover/' . $filename;; // 替换为您希望保存第一帧的物理路径// 打开视频文件$video = $ffmpeg->open($inputVideo);// 提取第一帧(默认情况下,FFMpeg库将从视频的开始处获取第一帧)$frame = $video->frame(TimeCode::fromSeconds(0));// 将第一帧保存到指定的图像文件$frame->save($outputImage, 'image/jpeg');
扩展安装参考:https://www.cnblogs.com/j-jian/p/13542234.html
要在CentOS和RHEL发行版上安装FFmpeg,您需要使用以下命令在系统上启用EPEL和RPM Fusion存储库。
要安装和启用EPEL,请使用以下命令。
# yum install epel-release
要安装和启用RPM Fusion,请在您的分发版本上使用以下命令。
-------------- 在 CentOS 7.x 上-------------- # yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
启用存储库后,运行以下命令安装FFmpeg:
# yum install ffmpeg ffmpeg-devel# ffmpeg -version
END