登录  /  注册
首页 > php框架 > Laravel > 正文

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

藏色散人
发布: 2021-08-02 14:34:32
转载
2554人浏览过

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',
            ]);
        });
    }
登录后复制

使用单例模式获取 FFMpegFFProbe 对象,其中 exec('which ffmpeg') 是获取 程序位置信息,以便创建类

基础封装

举例:

  • 视频的第一秒为封面
  • 获取视频基础信息
<?php namespace AppHelpers;use FFMpegCoordinateTimeCode;use IlluminateSupportStr;class FFMpegUtil{

    // 获取视频信息
    public static function getVideoInfo($streamPath)
    {
        $ffprobe = app(&#39;ffprobe&#39;);
        $stream  = $ffprobe->streams($streamPath)-&gt;videos()-&gt;first();
        return $stream ? $stream-&gt;all() : [];
    }

    // 截取
    public static function getCover($streamPath, $fromSecond)
    {
        $ffmpeg   = app('ffmpeg');
        $video    = $ffmpeg-&gt;open($streamPath);
        $frame    = $video-&gt;frame(TimeCode::fromSeconds($fromSecond)); //提取第几秒的图像
        $fileName = 'video/' . Str::random(12) . '.jpg';
        if (!is_dir(storage_path("video"))) {
            mkdir(storage_path("video"), 0777);
        }
        $frame-&gt;save(storage_path($fileName));
        return $fileName;
    }}
登录后复制

业务使用

接受 Request 对象传入的 视频 为例子

public function saveVideotoQiniu($file)
    {
        Auth::loginUsingId(1);
        if ($user = getUser()) {

            // 1.判断是否存在此视频
            $path  = $file-&gt;getRealPath();
            $hash  = md5_file($path);
            $video = Video::firstOrNew(['json-&gt;hash' =&gt; $hash]);
            if ($video-&gt;id) {
                $video-&gt;touch();
                return $video;
            }

            // 2.保存到 云
            $cdn_path = $this-&gt;saveFile($file);
            $db_path  = getPath($cdn_path);

            // 3.获取截图
            $fileName = FFMpegUtil::getCover($path, 1);
            $image    = $this-&gt;saveImage(new UploadedFile(storage_path($fileName), 'file.jpg'));

            //4.设置视频信息
            $data     = [];
            $data     = FFMpegUtil::getVideoInfo($path);
            $duration = array_get($data, 'duration');
            $duration = $duration &gt; 0 ? ceil($duration) : $duration;

            $video-&gt;path    = $db_path;
            $video-&gt;user_id = $user-&gt;id;
            $video-&gt;setJsonData('width', array_get($data, 'width'));
            $video-&gt;setJsonData('height', array_get($data, 'height'));
            $video-&gt;duration = $duration;
            $video-&gt;setJsonData('cover', $image-&gt;path);
            $video-&gt;save();
        }
    }
登录后复制

例子中的 saveImage 是将图片上传到 云端的函数,返回上传后的图片 url

更多laravel技术文章,请访问laravel教程栏目!

以上就是详解laravel如何安装FFmpeg并进行视频文件处理的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:learnku网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号