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

2022-05-15 0 155

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
解压后进入到目录中,依次执行以下命令:

./configuremakesudo make install

详解laravel如何安装FFmpeg并进行视频文件处理
1.3编译安装ffmpeg
进入ffmpeg文件夹,依次执行以下命令:
详解laravel如何安装FFmpeg并进行视频文件处理

 ./configuremakesudo make install

在这里插入图片描述
1.4 测试是否安装成功

ffmpeg -versionffplay -version

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

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

基础封装

举例:

视频的第一秒为封面获取视频基础信息

<?phpnamespace 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

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 详解laravel如何安装FFmpeg并进行视频文件处理 https://www.jike1995.com/35867.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务