• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 详解Laravel如何安装FFmpeg并进行视频文件处理

详解Laravel如何安装FFmpeg并进行视频文件处理

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Laravel如何安装,安装FFmpeg,Laravel视频文件处理等相关知识,希望对您有所帮助

详解Laravel如何安装FFmpeg并进行视频文件处理

Ubuntu 18.04 安装FFmpeg

1、下载源码编译安装

github地址:github.com/PHP-FFMpeg/PHP-FFMpeg

安装依赖的库

主要安装三个: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

解压后进入到目录中,依次执行以下命令:

./configuremakesudo make install


61079f3f7da12.jpg


编译安装ffmpeg

进入ffmpeg文件夹,依次执行以下命令:


61079f6d89c8d.jpg


./configuremakesudo make install

在这里插入图片描述

测试是否安装成功

ffmpeg -versionffplay -version


61079fa46de0b.png


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') 是获取 程序位置信息,以便创建类


基础封装

举例:

视频的第一秒为封面

获取视频基础信息

<?php namespace AppHelpers;use FFMpegCoordinateTimeCode;use IlluminateSupportStr;class FFMpegUtil{     // 获取视频信息    public static function getVideoInfo($streamPath)    {        $ffprobe = app('ffprobe');        $stream  = $ffprobe->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 $fileName;    }}

业务使用

接受 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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解Laravel如何安装FFmpeg并进行视频文件处理
  • 一文详解Laravel如何安装inertia vue3的版本

相关文章

  • 2022-04-292018最新手机号验证正则表达式方法
  • 2022-04-29Thinkphp5+Redis实现商品秒杀代码实例讲解
  • 2022-04-29网站上线前需要做的优化准备工作
  • 2022-04-29手把手教你用PHP完成一个分布式事务TCC
  • 2022-04-29Photoshop绘制梦幻炫彩效果的艺术字
  • 2022-04-29关键词meta标签Keywords优化详解
  • 2022-04-29PHP中三种设置脚本最大执行时间的方法
  • 2022-04-29renderjs有什么用?聊聊uniapp中用renderjs的一些细节
  • 2022-04-29VUE中怎么导出excel文件?
  • 2022-04-29详解php中的str_replace()(附代码实例)

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Linux 定时检测 MySQL 数据库是否宕机并自动重启
    • 插件highcharts在thinkphp中的使用
    • Photoshop快速制作漂亮的花朵浮雕字
    • Photoshop制作光滑的金色发光字
    • Photoshop制作水彩喷溅效果的艺术字
    • javascript:void什么意思
    • 详细介绍mysql忘记密码的解决方案及修改密码的三种方式
    • CSS Flex 布局 space-between 最后一行左对齐
    • 为网站选择一个适当的DMOZ目录
    • Photoshop制作铝光汽车Logo教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有