ubuntu 18.04 安装ffmpeg1.下载源码编译安装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
1.3编译安装ffmpeg
进入ffmpeg文件夹,依次执行以下命令:
./configuremakesudo make install
在这里插入图片描述
1.4 测试是否安装成功
ffmpeg -versionffplay -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') 是获取 程序位置信息,以便创建类
基础封装举例:
视频的第一秒为封面获取视频基础信息<?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教程栏目!
以上就是详解laravel如何安装ffmpeg并进行视频文件处理的详细内容。