最近又使用了一种新的方式;
之前可能使用到的方式getID3
获取视频音频等信息;
今天说的是通过ffmpeg
软件;
获取图片信息 封面图,时长,大小 加水印等;
其实实现起来也比较简单;
只需要三步;
1.安装ffmpeg软件(win系统都有对应的安装包,支持linux的);
2.PHP中composer安装php-ffmpeg库;
3.通过代码去调用就可以啦;
第一步:安装ffmpeg软件;
官网提供的下载地址 ffmpeg下载地址
个人博客提供下载地址 ffmpeg下载地址
下载解压;
进入bin目录;
就可以看到如下图的文件;
下载完成之后;
我们可以添加到环境变量(也可以不添加,我们就要使用绝对路径啦)里面去;
运行ffmpeg
我们可以看见如下界面;
就说明我们安装成功啦(╥╯^╰╥);
OK , 第一步我们已经完成;
第二步:安装php-ffmpeg库
composer require php-ffmpeg/php-ffmpeg
在packagist介绍了很多种用法;
还有github上面也有介绍;
下载成功之后集成到项目中就可以使用啦;
第三步:通过代码去调用
获取视频的宽,高,时长,大小与封面图;
<?php
namespace App\Models\Video;
use FFMpeg\Coordinate\TimeCode;
use FFMpeg\FFProbe;
use FFMpeg\FFMpeg as FFMpegTool;
use Illuminate\Support\Facades\Log;
class Ffmpeg
{
/**
* @param $file
* @return array
* @author shidatuo
* @description 获取视频的宽、高、时长、大小
*/
public static function getWithHeightTime($file)
{
$config = [
'ffmpeg.binaries' => env('FFM_PEG_PATH'),
// env里面配置项 FFM_PEG_PATH=D:\ffmpeg\ffmpeg-2020-12-12-git-5148740e79-essentials_build\bin\ffmpeg.exe
'ffprobe.binaries' => env('FFP_ROBE_PATH'),
// env里面配置项 FFP_ROBE_PATH=D:\ffmpeg\ffmpeg-2020-12-12-git-5148740e79-essentials_build\bin\ffprobe.exe
'timeout' => 300
];
Log::info('ffmpeg配置信息',[$config]);
$ff = FFProbe::create($config);
$times = $ff->format($file)
->get('duration');
$size = $ff->format($file)
->get('size');
$peg = \FFMpeg\FFMpeg::create($config);
$dimension = $peg->getFFProbe()
->streams($file)
->videos()
->first()
->getDimensions();
$height = $dimension->getHeight();
$width = $dimension->getWidth();
Log::info('ffmpeg 获取时长信息',[$times]);
Log::info('ffmpeg 获取大小信息',[$size]);
Log::info('ffmpeg 获取高信息',[$height]);
Log::info('ffmpeg 获取宽信息',[$width]);
return compact('times','size','height','width');
}
/**
* @param $url
* @return array|bool
* @author shidatuo
* @description 获取视频封面
*/
public static function getVideoCover($url)
{
// 程序安装目录,不加可能会无法运行
$ff = FFMpegTool::create([
'ffmpeg.binaries' => env('FFM_PEG_PATH'),
// env里面配置项 FFM_PEG_PATH=D:\ffmpeg\ffmpeg-2020-12-12-git-5148740e79-essentials_build\bin\ffmpeg.exe
'ffprobe.binaries' => env('FFP_ROBE_PATH'),
// env里面配置项 FFP_ROBE_PATH=D:\ffmpeg\ffmpeg-2020-12-12-git-5148740e79-essentials_build\bin\ffprobe.exe
'timeout' => 300
]);
// 打开文件资源
$video = $ff->open($url);
// 文件名称
$file_name = md5(uniqid() . time()) . '.jpg';
// 是否存在目录
$path = date('Ym').'/'.date('d') .'/';
// 是否存在该目录 , 不存在创建目录
if (!is_dir($path))
mkdir($path, 0755, true);
// 生成文件的绝对路径
$file_path = $path . $file_name;
// 获取封面图
$video->frame(TimeCode::fromSeconds(2))->save($file_path);
// 返回数据
return compact('file_path');
}
}
linux系统下是也是一样的;
只是ffmpeg执行路径不一样;
哈哈哈 , 就是这么简单;
睡觉啦;
(╥╯^╰╥)
本文为史大坨原创文章,转载无需和我联系,但请注明来自史大坨博客https://www.shidatuos.cn