项目中需要对上传的视频提取一张图片所谓视频封面,查阅相关资料发现需要使用FFMpeg可以达到目的,并在github上发现了这个项目 PHP-FFMpeg,使用的前提是系统中需要安装 ffmpeg
。
我用的是centos6,安装步骤如下:
1 | sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro |
安装好后,查阅PHP-FFMpeg的文档,使用composer安装库:
1 | composer require php-ffmpeg/php-ffmpeg |
安装完成,编写了如下方法来提取封面图片:
1 | require 'vendor/autoload.php'; |
此处发现了一个坑,src\FFMpeg\Media\Frame.php
的save
方法中,第三个参数$returnBase64
设置为true
即表示返回二进制图片数据,但此处并没有按预期返回,并且还报出了一个Fatal error
:
1 | Fatal error: Uncaught Alchemy\BinaryDriver\Exception\ExecutionFailureException: ffmpeg failed to execute command '/usr/bin/ffmpeg' '-y' '-ss' '00:00:01.00' '-i' '/tmp/phphUFOiO' '-vframes' '1' '-f' 'image2pipe' '-' '' in /www/path/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Media/Frame.php on line 134 |
查阅PHP-FFMpeg源码发现 src\FFMpeg\Media\Frame.php
的119行可能有问题,当需要返回二进制数据时,就不需要设置输出文件名了,所以这里缺少判断,改为:
1 | if(!$returnBase64) { |
成功啦!
参考:
1 | https://www.cnblogs.com/wpjamer/p/ffmpeg.html |