详解laravel如何安装FFmpeg并进行视频文件处理
发布时间 - 2021-08-02 00:00:00 点击率:次Ubuntu 18.04 安装FFmpeg
1.下载源码编译安装
1.1 下载源码
github地址:github.com/php-ffmpeg/php-ffmpeg
1.2 安装依赖的库
主要安装三个:yasm ,sdl1.2 和 sdl2.0
安装 yasmsudo apt-get install yasm 安装sdl1.2sudo apt-get install libsdl1.2-dev 安装 sdl2.0sudo apt-get install libstdl2-devsudo apt-get install libstdl2-dev
如果sdl2.0 安装出现错误的话可以选择编译安装方式:
官网下载最新版本: www.libsdl.org/download-2.0.php
解压后进入到目录中,依次执行以下命令:
./configure make sudo make install
1.3编译安装ffmpeg
进入ffmpeg文件夹,依次执行以下命令:
./configuremakesudo make install
在这里插入图片描述
1.4 测试是否安装成功
ffmpeg -version ffplay -version
laravel 安装PHP-FFMpeg扩展
composer require php-ffmpeg/php-ffmpeg
基本使用
1.1、 引入到项目
引入完成,它需要制定 两个配置文件信息,以便我们正常使用,也就是上文所讲的 ffmpeg 和 ffprobe
1.2、全局配置
到 AppServiceProvider.php 中添加代码
public function boot()
{
$this->registerSingleObject();
}
private function registerSingleObject()
{// $ffmpeg = FFMpeg::create(array(// 'ffmpeg.binaries' => '/usr/local/ffmpeg/ffmpeg',// 'ffprobe.binaries' => '/usr/local/ffmpeg/ffprobe',// 'timeout' => 3600, // The timeout for the underlying process// 'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use// ));
$this->app->singleton('ffmpeg', function ($app) {
return FFMpeg::create([
'ffmpeg.binaries' => '/usr/local/ffmpeg/ffmpeg',
'ffprobe.binaries' => '/usr/local/ffmpeg/ffprobe',
]);
});
$this->app->singleton('ffprobe', function ($app) {
return FFProbe::create([
'ffprobe.binaries' => '/usr/local/ffmpeg/ffprobe',
]);
});
}使用单例模式获取 FFMpeg 和 FFProbe 对象,其中 exec('which ffmpeg') 是获取 程序位置信息,以便创建类
基础封装
举例:
- 视频的第一秒为封面
- 获取视频基础信息
streams($streamPath)->videos()->first();
return $stream ? $stream->all() : [];
}
// 截取
public static function getCover($streamPath, $fromSecond)
{
$ffmpeg = app('ffmpeg');
$video = $ffmpeg->open($streamPath);
$frame = $video->frame(TimeCode::fromSeconds($fromSecond)); //提取第几秒的图像
$fileName = 'video/' . Str::random(12) . '.jpg';
if (!is_dir(storage_path("video"))) {
mkdir(storage_path("video"), 0777);
}
$frame->save(storage_path($fileName));
return $fileNam
e;
}}业务使用
接受 Request 对象传入的 视频 为例子
public function saveVideotoQiniu($file)
{
Auth::loginUsingId(1);
if ($user = getUser()) {
// 1.判断是否存在此视频
$path = $file->getRealPath();
$hash = md5_file($path);
$video = Video::firstOrNew(['json->hash' => $hash]);
if ($video->id) {
$video->touch();
return $video;
}
// 2.保存到 云
$cdn_path = $this->saveFile($file);
$db_path = getPath($cdn_path);
// 3.获取截图
$fileName = FFMpegUtil::getCover($path, 1);
$image = $this->saveImage(new UploadedFile(storage_path($fileName), 'file.jpg'));
//4.设置视频信息
$data = [];
$data = FFMpegUtil::getVideoInfo($path);
$duration = array_get($data, 'duration');
$duration = $duration > 0 ? ceil($duration) : $duration;
$video->path = $db_path;
$video->user_id = $user->id;
$video->setJsonData('width', array_get($data, 'width'));
$video->setJsonData('height', array_get($data, 'height'));
$video->duration = $duration;
$video->setJsonData('cover', $image->path);
$video->save();
}
}例子中的 saveImage 是将图片上传到 云端的函数,返回上传后的图片 url
更多laravel技术文章,请访问laravel教程栏目!
# laravel
# php
# 封装
# 对象
# github
# ubuntu
# ffmpeg
# 在这里
# 正常使用
# 可以选择
# 配置文件
# 官网
# 是否存在
# 几秒
# 所讲
# 出现错误
# 图片上传
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
linux写shell需要注意的问题(必看)
如何在 Pandas 中基于一列条件计算另一列的分组均值
bing浏览器学术搜索入口_bing学术文献检索地址
如何用腾讯建站主机快速创建免费网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Laravel如何使用.env文件管理环境变量?(最佳实践)
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
如何在阿里云ECS服务器部署织梦CMS网站?
Laravel如何实现本地化和多语言支持?(i18n教程)
如何在IIS中新建站点并配置端口与IP地址?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何在云主机快速搭建网站站点?
Laravel如何使用Telescope进行调试?(安装和使用教程)
手机网站制作与建设方案,手机网站如何建设?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
微信小程序 闭包写法详细介绍
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel如何创建自定义中间件?(Middleware代码示例)
详解Android中Activity的四大启动模式实验简述
Laravel如何处理表单验证?(Requests代码示例)
Android GridView 滑动条设置一直显示状态(推荐)
如何在Tomcat中配置并部署网站项目?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel如何创建自定义Facades?(详细步骤)
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
网站建设保证美观性,需要考虑的几点问题!
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Android利用动画实现背景逐渐变暗
Laravel如何处理文件下载请求?(Response示例)
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何利用DOS批处理实现定时关机操作详解
Python函数文档自动校验_规范解析【教程】
大型企业网站制作流程,做网站需要注册公司吗?
独立制作一个网站多少钱,建立网站需要花多少钱?
Laravel如何使用Livewire构建动态组件?(入门代码)
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel如何升级到最新版本?(升级指南和步骤)
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
敲碗10年!Mac系列传将迎来「触控与联网」双革新


e;
}}